mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-23 10:45:33 -04:00
92 lines
3.2 KiB
TypeScript
Executable File
92 lines
3.2 KiB
TypeScript
Executable File
#!/usr/bin/env bun
|
|
import { $ } from "bun"
|
|
import pkg from "../package.json"
|
|
import { Script } from "@opencode-ai/script"
|
|
import { fileURLToPath } from "url"
|
|
import { UpdateArtifact } from "../../../script/update-artifact"
|
|
|
|
const dir = fileURLToPath(new URL("..", import.meta.url))
|
|
process.chdir(dir)
|
|
|
|
async function published(name: string, version: string) {
|
|
return (await $`npm view ${name}@${version} version`.nothrow()).exitCode === 0
|
|
}
|
|
|
|
async function publish(dir: string, name: string, version: string) {
|
|
if (process.platform !== "win32") await $`chmod -R 755 .`.cwd(dir)
|
|
if (await published(name, version)) return console.log(`already published ${name}@${version}`)
|
|
await $`bun pm pack`.cwd(dir)
|
|
await $`npm publish *.tgz --access public --tag ${Script.channel}`.cwd(dir)
|
|
}
|
|
|
|
async function publishDistribution(input: { root: string; name: string; binary: string; packagePrefix: string }) {
|
|
const binaries: Record<string, string> = {}
|
|
for (const filepath of new Bun.Glob("*/package.json").scanSync({ cwd: input.root })) {
|
|
const item = await Bun.file(`${input.root}/${filepath}`).json()
|
|
if (!item.name.startsWith(input.packagePrefix)) continue
|
|
binaries[item.name] = item.version
|
|
}
|
|
console.log(input.name, "binaries", binaries)
|
|
const versions = new Set(Object.values(binaries))
|
|
if (versions.size > 1) throw new Error(`Binary package versions do not match for ${input.name}`)
|
|
const version = versions.values().next().value
|
|
if (!version) throw new Error(`No binary packages found for ${input.name}`)
|
|
|
|
await $`mkdir -p ${input.root}/${input.name}/bin`
|
|
await $`cp ./script/postinstall.mjs ${input.root}/${input.name}/postinstall.mjs`
|
|
await Bun.file(`${input.root}/${input.name}/bin/${input.binary}.exe`).write(
|
|
[
|
|
`echo "Error: ${input.name}'s postinstall script was not run." >&2`,
|
|
'echo "" >&2',
|
|
'echo "This occurs when installation scripts are disabled." >&2',
|
|
'echo "Run the package postinstall script or reinstall with scripts enabled." >&2',
|
|
"exit 1",
|
|
"",
|
|
].join("\n"),
|
|
)
|
|
await Bun.file(`${input.root}/${input.name}/package.json`).write(
|
|
JSON.stringify(
|
|
{
|
|
name: input.name,
|
|
bin: { [input.binary]: `./bin/${input.binary}.exe` },
|
|
scripts: { postinstall: "node ./postinstall.mjs" },
|
|
version,
|
|
license: pkg.license,
|
|
repository: { type: "git", url: "git+https://github.com/anomalyco/opencode.git" },
|
|
os: ["darwin", "linux", "win32"],
|
|
cpu: ["arm64", "x64"],
|
|
optionalDependencies: binaries,
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
)
|
|
|
|
await Promise.all(
|
|
Object.entries(binaries).map(([name, version]) =>
|
|
publish(`${input.root}/${name.replace("@opencode-ai/", "")}`, name, version),
|
|
),
|
|
)
|
|
await publish(`${input.root}/${input.name}`, input.name, version)
|
|
}
|
|
|
|
await publishDistribution({
|
|
root: "./dist",
|
|
name: pkg.name,
|
|
binary: "opencode2",
|
|
packagePrefix: "@opencode-ai/cli-",
|
|
})
|
|
await publishDistribution({
|
|
root: "./dist/node",
|
|
name: "opencode-node",
|
|
binary: "opencode2-node",
|
|
packagePrefix: "@opencode-ai/cli-node-",
|
|
})
|
|
await UpdateArtifact.publish({
|
|
channel: Script.channel,
|
|
name: "cli",
|
|
distribution: "npm",
|
|
version: Script.version,
|
|
metadata: {},
|
|
})
|