feat: add Windows ARM64 support with x64-baseline CLI workaround (#2537)

* feat: add Windows ARM64 support with x64-baseline CLI workaround

Windows ARM64 native opencode.exe fails with a Bun FFI/TinyCC dlopen
error (anomalyco/opencode#19130). As a temporary workaround:

- Bundle x64-baseline OpenCode CLI on ARM64 instead of native ARM64
  (prepare-opencode-cli.mjs, env-runtime.js)
- Disable OpenCode self-upgrade on ARM64 in server, VS Code, and UI
  (upgrade-capability.js, opencode-upgrade-runtime.ts, useUIStore.ts,
  OpenCodeCliSettings.tsx, search.ts, SettingsView.tsx, platform.ts)
- Add ARM64 Windows cross-compile builds to release and smoke workflows
  (release.yml, release-desktop-smoke.yml)
- Refactor Windows latest.yml to use combine-electron-manifests pattern
  matching macOS, since two arches now produce per-arch manifests

The CI ARM64 build itself is permanent; only the x64-baseline CLI
bundling and upgrade disablement are temporary and should be reverted
when the upstream issue is resolved.

* fix(desktop): select Windows updater by architecture

---------

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
This commit is contained in:
Howon Lee
2026-07-30 20:07:08 +03:00
committed by GitHub
co-authored by Bohdan Triapitsyn
parent 5792a3d2e2
commit 09f0c64839
18 changed files with 206 additions and 30 deletions
@@ -664,8 +664,15 @@ export const createOpenCodeEnvRuntime = (deps) => {
};
const getWindowsNativeOpencodePackageNames = () => {
// TEMPORARY WORKAROUND — Windows ARM64: native opencode.exe fails with a Bun
// FFI/TinyCC dlopen error (https://github.com/anomalyco/opencode/issues/19130).
// prepare-opencode-cli.mjs bundles x64-baseline instead; match that here so
// the runtime resolver looks for the same x64-baseline package. Restore the
// arm64 branch below when the upstream issue is resolved.
if (process.arch === 'arm64') {
return ['opencode-windows-arm64'];
// --- ORIGINAL (restore when ARM64 is fixed) ---
// return ['opencode-windows-arm64'];
return ['opencode-windows-x64-baseline', 'opencode-windows-x64'];
}
if (process.arch === 'x64') {
// Prefer the baseline build when bypassing package-manager wrappers so the
@@ -1,9 +1,23 @@
// TEMPORARY WORKAROUND — Windows ARM64: native opencode.exe fails with a Bun
// FFI/TinyCC dlopen error (https://github.com/anomalyco/opencode/issues/19130).
// Disable OpenCode self-upgrade on ARM64 so it can't overwrite the working x64
// binary with the broken ARM64 build. Remove when the upstream issue is resolved.
const isWindowsArm64 = () => process.platform === 'win32' && process.arch === 'arm64';
export const resolveOpenCodeUpgradeCapability = ({
isExternal,
hasManagedProcess,
activeBinary,
isBundledBinary,
}) => {
if (isWindowsArm64()) {
return {
supported: false,
manager: 'openchamber',
reason: 'windows-arm64-workaround',
};
}
if (isExternal) {
return {
supported: false,