126 lines
4.0 KiB
TypeScript
Executable File
126 lines
4.0 KiB
TypeScript
Executable File
#!/usr/bin/env bun
|
|
|
|
import { $ } from "bun"
|
|
import fs from "fs"
|
|
import { rm } from "fs/promises"
|
|
import path from "path"
|
|
import { Script } from "@opencode-ai/script"
|
|
import { createSolidTransformPlugin } from "@opentui/solid/bun-plugin"
|
|
import pkg from "../package.json"
|
|
import { modelsData } from "./generate"
|
|
|
|
const dir = path.resolve(import.meta.dirname, "..")
|
|
const binary = "lildax"
|
|
process.chdir(dir)
|
|
|
|
await rm("dist", { recursive: true, force: true })
|
|
|
|
const singleFlag = process.argv.includes("--single")
|
|
const baselineFlag = process.argv.includes("--baseline")
|
|
const skipInstall = process.argv.includes("--skip-install")
|
|
const sourcemapsFlag = process.argv.includes("--sourcemaps")
|
|
const plugin = createSolidTransformPlugin()
|
|
|
|
const allTargets: {
|
|
os: string
|
|
arch: "arm64" | "x64"
|
|
abi?: "musl"
|
|
avx2?: false
|
|
}[] = [
|
|
{ os: "linux", arch: "arm64" },
|
|
{ os: "linux", arch: "x64" },
|
|
{ os: "linux", arch: "x64", avx2: false },
|
|
{ os: "linux", arch: "arm64", abi: "musl" },
|
|
{ os: "linux", arch: "x64", abi: "musl" },
|
|
{ os: "linux", arch: "x64", abi: "musl", avx2: false },
|
|
{ os: "darwin", arch: "arm64" },
|
|
{ os: "darwin", arch: "x64" },
|
|
{ os: "darwin", arch: "x64", avx2: false },
|
|
{ os: "win32", arch: "arm64" },
|
|
{ os: "win32", arch: "x64" },
|
|
{ os: "win32", arch: "x64", avx2: false },
|
|
]
|
|
|
|
const targets = singleFlag
|
|
? allTargets.filter((item) => {
|
|
if (item.os !== process.platform || item.arch !== process.arch) return false
|
|
if (item.avx2 === false) return baselineFlag
|
|
return item.abi === undefined
|
|
})
|
|
: allTargets
|
|
|
|
if (!skipInstall) await $`bun install --os="*" --cpu="*" @opentui/core@${pkg.dependencies["@opentui/core"]}`
|
|
|
|
const localParserWorker = path.resolve(dir, "node_modules/@opentui/core/parser.worker.js")
|
|
const rootParserWorker = path.resolve(dir, "../../node_modules/@opentui/core/parser.worker.js")
|
|
const parserWorker = fs.realpathSync(fs.existsSync(localParserWorker) ? localParserWorker : rootParserWorker)
|
|
|
|
for (const item of targets) {
|
|
const target = [
|
|
binary,
|
|
item.os === "win32" ? "windows" : item.os,
|
|
item.arch,
|
|
item.avx2 === false ? "baseline" : undefined,
|
|
item.abi,
|
|
]
|
|
.filter(Boolean)
|
|
.join("-")
|
|
const name = target.replace(binary, "cli")
|
|
console.log(`building ${name}`)
|
|
const result = await Bun.build({
|
|
entrypoints: ["./src/index.ts", parserWorker],
|
|
tsconfig: "./tsconfig.json",
|
|
plugins: [plugin],
|
|
external: ["node-gyp"],
|
|
format: "esm",
|
|
minify: true,
|
|
sourcemap: sourcemapsFlag ? "linked" : "none",
|
|
splitting: true,
|
|
compile: {
|
|
autoloadBunfig: false,
|
|
autoloadDotenv: false,
|
|
autoloadTsconfig: true,
|
|
autoloadPackageJson: true,
|
|
target: target.replace(binary, "bun") as Bun.Build.CompileTarget,
|
|
outfile: `./dist/${name}/bin/${binary}`,
|
|
execArgv: [`--user-agent=${binary}/${Script.version}`, "--use-system-ca", "--"],
|
|
windows: {},
|
|
},
|
|
define: {
|
|
OPENCODE_VERSION: `'${Script.version}'`,
|
|
OPENCODE_CLI_NAME: `'${binary}'`,
|
|
OPENCODE_MODELS_DEV: modelsData,
|
|
OPENCODE_CHANNEL: `'${Script.channel}'`,
|
|
OPENCODE_LIBC: item.os === "linux" ? `'${item.abi ?? "glibc"}'` : "undefined",
|
|
// FFF_LIBC selects the fff native lib variant: "musl" or "gnu".
|
|
FFF_LIBC: item.os === "linux" ? `'${item.abi ?? "gnu"}'` : "undefined",
|
|
OTUI_TREE_SITTER_WORKER_PATH:
|
|
(item.os === "win32" ? '"B:/~BUN/root/' : '"/$bunfs/root/') +
|
|
path.relative(dir, parserWorker).replaceAll("\\", "/") +
|
|
'"',
|
|
...(item.os === "linux" ? { "process.env.OPENTUI_LIBC": JSON.stringify(item.abi ?? "glibc") } : {}),
|
|
},
|
|
})
|
|
|
|
if (!result.success) {
|
|
for (const log of result.logs) console.error(log)
|
|
process.exit(1)
|
|
}
|
|
|
|
await Bun.write(
|
|
`./dist/${name}/package.json`,
|
|
JSON.stringify(
|
|
{
|
|
name: `@opencode-ai/${name}`,
|
|
version: Script.version,
|
|
license: "MIT",
|
|
repository: { type: "git", url: "git+https://github.com/anomalyco/opencode.git" },
|
|
os: [item.os],
|
|
cpu: [item.arch],
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
)
|
|
}
|