feat(FN-5608): add linux arm64 dual-arch support to desktop release workflo
Adds Linux ARM64 as a target architecture to the desktop release pipeline, including dual-arch release and test-release workflows, electron-builder configuration updates, and corresponding tests and documentation. Fusion-Task-Id: FN-5608 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai> Fusion-Task-Id: FN-5608
This commit is contained in:
@@ -357,9 +357,10 @@ Desktop packaging is configured in `electron-builder.yml`.
|
||||
- Electron-updater feed files are also published per platform: `latest.yml` (Windows), `latest-mac.yml` (macOS), and `latest-linux.yml` (Linux). `setupAutoUpdater` / `triggerUpdateCheck` resolve these feeds from the GitHub Release channel.
|
||||
- Windows: x64 + arm64 outputs (NSIS + portable), matching `.exe.sha256` sidecars, and `.blockmap` files.
|
||||
- macOS: `Fusion-<version>-mac-arm64.dmg`, `Fusion-<version>-mac-x64.dmg`, matching `.zip` variants, `.sha256` sidecars, and `.blockmap` files.
|
||||
- Linux: `Fusion-<version>-linux-x64.AppImage` with `.sha256`, plus best-effort `.deb` and `.tar.gz` outputs (and sidecars) when available on the runner image.
|
||||
- Linux: `Fusion-<version>-linux-x64.AppImage` and `Fusion-<version>-linux-arm64.AppImage` with matching `.sha256` sidecars, plus best-effort `.deb` and `.tar.gz` outputs per arch (`Fusion-<version>-linux-x64.{deb,tar.gz}` / `Fusion-<version>-linux-arm64.{deb,tar.gz}`) and sidecars when available on the runner image.
|
||||
- Tag-less release rehearsal workflow (`.github/workflows/test-release.yml`) mirrors that artifact collection path without publishing a real GitHub Release.
|
||||
- Linux desktop artifacts now include detached GPG signature sidecars: `*.AppImage.asc`, `*.deb.asc`, and `*.tar.gz.asc` when Linux signing secrets are configured in CI.
|
||||
- Linux ARM64 artifacts are cross-built from the `ubuntu-latest` x64 runner by passing `electron-builder --linux --x64 --arm64`; running/validating arm64 installers still requires an arm64 Linux device or emulator.
|
||||
- Linux desktop artifacts can include detached GPG signature sidecars (`*.AppImage.asc`, `*.deb.asc`, `*.tar.gz.asc`) when Linux signing secrets are configured in CI; full Linux desktop code-signing rollout remains tracked in FN-5605.
|
||||
- Linux `.deb` and `.tar.gz` outputs are best-effort and may be absent on some runner images without failing the release.
|
||||
|
||||
### Linux signing
|
||||
|
||||
@@ -92,5 +92,14 @@ linux:
|
||||
category: Development
|
||||
target:
|
||||
- target: AppImage
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
- target: deb
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
- target: tar.gz
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
|
||||
@@ -84,6 +84,27 @@ describe("electron-builder desktop config", () => {
|
||||
(match) => match[1]?.trim(),
|
||||
);
|
||||
expect(linuxTargetEntries[0]).toBe("AppImage");
|
||||
|
||||
const linuxArchMatches = Array.from(
|
||||
linuxSection.matchAll(
|
||||
/-\s*target:\s*(AppImage|deb|tar\.gz)\s*arch:\s*([\s\S]*?)(?=\n\s*-\s*target:|\n\w|$)/g,
|
||||
),
|
||||
);
|
||||
|
||||
expect(linuxArchMatches).toHaveLength(3);
|
||||
|
||||
const linuxArchByTarget = new Map(
|
||||
linuxArchMatches.map((match) => {
|
||||
const target = match[1];
|
||||
const archBlock = match[2] ?? "";
|
||||
const archValues = Array.from(archBlock.matchAll(/-\s*(x64|arm64)/g), (entry) => entry[1]).sort();
|
||||
return [target, archValues] as const;
|
||||
}),
|
||||
);
|
||||
|
||||
expect(linuxArchByTarget.get("AppImage")).toEqual(["arm64", "x64"]);
|
||||
expect(linuxArchByTarget.get("deb")).toEqual(["arm64", "x64"]);
|
||||
expect(linuxArchByTarget.get("tar.gz")).toEqual(["arm64", "x64"]);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -32,6 +32,10 @@ describe("desktop release workflow wiring", () => {
|
||||
expect(workflow).toContain("build-desktop-linux:");
|
||||
expect(workflow).toContain("runs-on: ubuntu-latest");
|
||||
expect(workflow).toMatch(/pnpm --filter @fusion\/desktop dist:linux|electron-builder --linux/);
|
||||
expect(workflow).toContain("--x64");
|
||||
expect(workflow).toContain("--arm64");
|
||||
expect(workflow).toContain("Fusion-*-linux-arm64.AppImage");
|
||||
expect(workflow).toContain("Fusion-*-linux-x64.AppImage");
|
||||
expect(workflow).toContain("name: fusion-desktop-linux");
|
||||
expect(workflow).toContain("packages/desktop/dist-electron/latest-linux.yml");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user