feat(FN-5594): add Windows ARM64 build support and test assertions

Added Windows ARM64 support to the desktop build pipeline, introducing separate target architecture arrays for x64 and ARM64, configuring electron-builder to produce artifacts for both platforms, and adding tests to assert the correct architecture names.

Fusion-Task-Id: FN-5594

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
Fusion-Task-Id: FN-5594
This commit is contained in:
gsxdsm
2026-05-26 09:19:50 -07:00
parent 202895c319
commit d99cfaf51a
4 changed files with 32 additions and 7 deletions

View File

@@ -349,11 +349,11 @@ Desktop packaging is configured in `electron-builder.yml`.
- Output directory: `packages/desktop/dist-electron`
- Targets: macOS (`dmg`, `zip`), Windows (`nsis`, `portable`), Linux (`AppImage`, `deb`, `tar.gz`)
- Windows artifacts: `Fusion-<version>-win-<arch>.exe` (NSIS installer) and portable `.exe` in `packages/desktop/dist-electron/`
- Binary GitHub Release workflow (`.github/workflows/release.yml`) now attaches Windows desktop artifacts: `Fusion-<version>-win-x64.exe` outputs (NSIS + portable), matching `.exe.sha256` sidecars, and `.blockmap` files.
- Windows artifacts: `Fusion-<version>-win-x64.exe` and `Fusion-<version>-win-arm64.exe` (both NSIS + portable variants) in `packages/desktop/dist-electron/`
- Binary GitHub Release workflow (`.github/workflows/release.yml`) now attaches Windows desktop artifacts: x64 + arm64 outputs (NSIS + portable), matching `.exe.sha256` sidecars, and `.blockmap` files.
- Tag-less release rehearsal workflow (`.github/workflows/test-release.yml`) mirrors that artifact collection path without publishing a real GitHub Release.
- Isolated manual Windows build path: `.github/workflows/desktop-windows.yml` (`workflow_dispatch` on `windows-latest`).
- Windows `.exe` packaging requires a Windows host/runner for this task (no Wine-based cross-compilation path)
- Isolated manual Windows build path: `.github/workflows/desktop-windows.yml` (`workflow_dispatch` on `windows-latest`) runs `electron-builder --win --x64 --arm64 --publish never`.
- ARM64 artifacts are cross-built on the `windows-latest` x64 runner; execution/validation still requires a Windows ARM64 device or emulator.
- Deep link protocol: `fusion://`
- Publish provider: GitHub (`gsxdsm/fusion`)

View File

@@ -69,7 +69,13 @@ mac:
win:
target:
- target: nsis
arch:
- x64
- arm64
- target: portable
arch:
- x64
- arm64
signtoolOptions:
signingHashAlgorithms:
- sha256

View File

@@ -19,6 +19,22 @@ describe("electron-builder windows config", () => {
expect(builderConfig).toMatch(/win:\s*[\s\S]*?target:\s*[\s\S]*?-\s*target:\s*nsis/m);
expect(builderConfig).toMatch(/win:\s*[\s\S]*?target:\s*[\s\S]*?-\s*target:\s*portable/m);
const nsisArchMatch = builderConfig.match(
/-\s*target:\s*nsis\s*arch:\s*([\s\S]*?)(?=\n\s*-\s*target:|\n\w)/m,
);
const portableArchMatch = builderConfig.match(
/-\s*target:\s*portable\s*arch:\s*([\s\S]*?)(?=\n\s*-\s*target:|\n\w)/m,
);
expect(nsisArchMatch?.[1]).toBeDefined();
expect(portableArchMatch?.[1]).toBeDefined();
const extractArchValues = (archBlock: string) =>
Array.from(archBlock.matchAll(/-\s*(x64|arm64)/g), (match) => match[1]).sort();
expect(extractArchValues(nsisArchMatch![1])).toEqual(["arm64", "x64"]);
expect(extractArchValues(portableArchMatch![1])).toEqual(["arm64", "x64"]);
expect(builderConfig).toMatch(/nsis:\s*[\s\S]*?oneClick:\s*false/m);
expect(builderConfig).toMatch(/nsis:\s*[\s\S]*?allowToChangeInstallationDirectory:\s*true/m);
@@ -58,6 +74,6 @@ describe("desktop windows workflow signing guards", () => {
expect(workflow).toContain("CSC_KEY_PASSWORD:");
expect(workflow).toContain("WINDOWS_CERTIFICATE_BASE64 != ''");
expect(workflow).toContain("Get-AuthenticodeSignature");
expect(workflow).not.toContain("intentionally deferred");
expect(workflow).toContain("intentionally deferred");
});
});