2026-09-24 13:17:55 -04:00
|
|
|
/*
|
|
|
|
|
* build-win.cjs — build the Windows x64 installer. Works on Windows AND on macOS: electron-builder
|
|
|
|
|
* fetches its own mac build of wine for the few Windows-only steps, so the laptop can produce the
|
|
|
|
|
* exact installer the stage PC installs.
|
|
|
|
|
*
|
|
|
|
|
* npm run build:win
|
|
|
|
|
*
|
|
|
|
|
* Two things this wrapper exists to guarantee:
|
|
|
|
|
*
|
|
|
|
|
* - --x64. electron-builder otherwise targets the HOST architecture, so on an Apple Silicon Mac a
|
|
|
|
|
* plain `electron-builder --win` quietly produces an arm64 build that the stage PC cannot run.
|
|
|
|
|
* - a clean signing environment. There is no code-signing certificate. electron-builder aborts on
|
|
|
|
|
* an EMPTY WIN_CSC_LINK ("Env WIN_CSC_LINK is not correct"), so those variables are removed
|
|
|
|
|
* rather than blanked, and identity auto-discovery is turned off.
|
2026-10-21 21:07:41 -04:00
|
|
|
* - a working uninstaller. On macOS electron-builder rebuilds the NSIS uninstaller in JavaScript and
|
|
|
|
|
* skips NSIS's icon patch, so unless the installer and uninstaller use the SAME icon the uninstaller
|
|
|
|
|
* fails NSIS's integrity check — and then that version can never be updated or uninstalled
|
|
|
|
|
* (1.4.35-1.4.37 shipped like that). build/installerIcon.ico makes electron-builder use one icon for
|
|
|
|
|
* both, so this refuses to build without it.
|
2026-09-24 13:17:55 -04:00
|
|
|
*/
|
|
|
|
|
const { spawnSync } = require('child_process');
|
2026-10-21 21:07:41 -04:00
|
|
|
const fs = require('fs');
|
2026-09-24 13:17:55 -04:00
|
|
|
const path = require('path');
|
|
|
|
|
|
|
|
|
|
const env = { ...process.env, CSC_IDENTITY_AUTO_DISCOVERY: 'false' };
|
|
|
|
|
for (const key of ['CSC_LINK', 'WIN_CSC_LINK', 'CSC_KEY_PASSWORD', 'WIN_CSC_KEY_PASSWORD', 'CSC_KEYCHAIN']) {
|
|
|
|
|
delete env[key];
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-21 21:07:41 -04:00
|
|
|
const ICON = path.join(__dirname, '..', 'build', 'installerIcon.ico');
|
|
|
|
|
if (!fs.existsSync(ICON)) {
|
|
|
|
|
console.error('build/installerIcon.ico is missing. Without it the uninstaller built on macOS is damaged');
|
|
|
|
|
console.error('("Installer integrity check has failed") and the version could never be updated. See tools/build-win.cjs.');
|
|
|
|
|
process.exit(1);
|
|
|
|
|
}
|
|
|
|
|
|
2026-09-24 13:17:55 -04:00
|
|
|
const extra = process.argv.slice(2);
|
|
|
|
|
const args = ['electron-builder', '--win', '--x64', ...extra];
|
|
|
|
|
|
|
|
|
|
console.log(`Building the Windows x64 installer on ${process.platform}…`);
|
|
|
|
|
const r = spawnSync(process.platform === 'win32' ? 'npx.cmd' : 'npx', args, {
|
|
|
|
|
cwd: path.join(__dirname, '..'),
|
|
|
|
|
env,
|
|
|
|
|
stdio: 'inherit',
|
|
|
|
|
shell: process.platform === 'win32'
|
|
|
|
|
});
|
|
|
|
|
if (r.error) { console.error('Build failed to start:', r.error.message); process.exit(1); }
|
|
|
|
|
process.exit(r.status === null ? 1 : r.status);
|