mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-03-30 13:54:01 +00:00
70 lines
2.1 KiB
TypeScript
70 lines
2.1 KiB
TypeScript
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" : ""}`
|
|
}
|