| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 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: "aarch64-pc-windows-msvc",
- ocBinary: "opencode-windows-arm64",
- 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 arch === "arm64" ? "aarch64-pc-windows-msvc" : "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 === "win32" && process.env.GITHUB_ACTIONS === "true") {
- await $`pwsh -NoLogo -NoProfile -ExecutionPolicy Bypass -File ../../script/sign-windows.ps1 ${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" : ""}`
- }
|