summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop-electron/scripts/utils.ts
diff options
context:
space:
mode:
authorBrendan Allan <[email protected]>2026-03-04 15:12:34 +0800
committerGitHub <[email protected]>2026-03-04 15:12:34 +0800
commit5cf235fa6cf7b4c890c68f8ff68a96fcae992abf (patch)
tree25fdfd8ce95ad048fb097822995dcf060e8d6d8b /packages/desktop-electron/scripts/utils.ts
parente4f0825c56300286ec0aa82b1006e4006a17e1e1 (diff)
downloadopencode-5cf235fa6cf7b4c890c68f8ff68a96fcae992abf.tar.gz
opencode-5cf235fa6cf7b4c890c68f8ff68a96fcae992abf.zip
desktop: add electron version (#15663)
Diffstat (limited to 'packages/desktop-electron/scripts/utils.ts')
-rw-r--r--packages/desktop-electron/scripts/utils.ts69
1 files changed, 69 insertions, 0 deletions
diff --git a/packages/desktop-electron/scripts/utils.ts b/packages/desktop-electron/scripts/utils.ts
new file mode 100644
index 000000000..4c9af1fc7
--- /dev/null
+++ b/packages/desktop-electron/scripts/utils.ts
@@ -0,0 +1,69 @@
+import { $ } from "bun"
+
+export type Channel = "dev" | "beta" | "prod"
+
+export function resolveChannel(): Channel {
+ const raw = Bun.env.OPENCODE_CHANNEL
+ if (raw === "dev" || raw === "beta" || raw === "prod") return raw
+ return "dev"
+}
+
+export const SIDECAR_BINARIES: Array<{ rustTarget: string; ocBinary: string; assetExt: string }> = [
+ {
+ rustTarget: "aarch64-apple-darwin",
+ ocBinary: "opencode-darwin-arm64",
+ assetExt: "zip",
+ },
+ {
+ rustTarget: "x86_64-apple-darwin",
+ ocBinary: "opencode-darwin-x64-baseline",
+ assetExt: "zip",
+ },
+ {
+ rustTarget: "x86_64-pc-windows-msvc",
+ ocBinary: "opencode-windows-x64-baseline",
+ assetExt: "zip",
+ },
+ {
+ rustTarget: "x86_64-unknown-linux-gnu",
+ ocBinary: "opencode-linux-x64-baseline",
+ assetExt: "tar.gz",
+ },
+ {
+ rustTarget: "aarch64-unknown-linux-gnu",
+ ocBinary: "opencode-linux-arm64",
+ assetExt: "tar.gz",
+ },
+]
+
+export const RUST_TARGET = Bun.env.RUST_TARGET
+
+function nativeTarget() {
+ const { platform, arch } = process
+ if (platform === "darwin") return arch === "arm64" ? "aarch64-apple-darwin" : "x86_64-apple-darwin"
+ if (platform === "win32") return "x86_64-pc-windows-msvc"
+ if (platform === "linux") return arch === "arm64" ? "aarch64-unknown-linux-gnu" : "x86_64-unknown-linux-gnu"
+ throw new Error(`Unsupported platform: ${platform}/${arch}`)
+}
+
+export function getCurrentSidecar(target = RUST_TARGET ?? nativeTarget()) {
+ const binaryConfig = SIDECAR_BINARIES.find((b) => b.rustTarget === target)
+ if (!binaryConfig) throw new Error(`Sidecar configuration not available for Rust target '${target}'`)
+
+ return binaryConfig
+}
+
+export async function copyBinaryToSidecarFolder(source: string) {
+ const dir = `resources`
+ await $`mkdir -p ${dir}`
+ const dest = windowsify(`${dir}/opencode-cli`)
+ await $`cp ${source} ${dest}`
+ if (process.platform === "darwin") await $`codesign --force --sign - ${dest}`
+
+ console.log(`Copied ${source} to ${dest}`)
+}
+
+export function windowsify(path: string) {
+ if (path.endsWith(".exe")) return path
+ return `${path}${process.platform === "win32" ? ".exe" : ""}`
+}