* 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>
51 lines
1.2 KiB
JavaScript
51 lines
1.2 KiB
JavaScript
// 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,
|
|
manager: 'external',
|
|
reason: 'external',
|
|
};
|
|
}
|
|
|
|
if (!hasManagedProcess || !activeBinary) {
|
|
return {
|
|
supported: false,
|
|
manager: null,
|
|
reason: 'unavailable',
|
|
};
|
|
}
|
|
|
|
if (isBundledBinary(activeBinary)) {
|
|
return {
|
|
supported: false,
|
|
manager: 'openchamber',
|
|
reason: 'bundled',
|
|
};
|
|
}
|
|
|
|
return {
|
|
supported: true,
|
|
manager: 'opencode',
|
|
reason: null,
|
|
};
|
|
};
|