Buckets:
| import { $ } from "bun" | |
| import semver from "semver" | |
| import path from "path" | |
| const rootPkgPath = path.resolve(import.meta.dir, "../../../package.json") | |
| const rootPkg = await Bun.file(rootPkgPath).json() | |
| const expectedBunVersion = rootPkg.packageManager?.split("@")[1] | |
| if (!expectedBunVersion) { | |
| throw new Error("packageManager field not found in root package.json") | |
| } | |
| // relax version requirement | |
| const expectedBunVersionRange = `^${expectedBunVersion}` | |
| if (!semver.satisfies(process.versions.bun, expectedBunVersionRange)) { | |
| throw new Error(`This script requires bun@${expectedBunVersionRange}, but you are using bun@${process.versions.bun}`) | |
| } | |
| const env = { | |
| OPENCODE_CHANNEL: process.env["OPENCODE_CHANNEL"], | |
| OPENCODE_BUMP: process.env["OPENCODE_BUMP"], | |
| OPENCODE_VERSION: process.env["OPENCODE_VERSION"], | |
| OPENCODE_RELEASE: process.env["OPENCODE_RELEASE"], | |
| } | |
| const CHANNEL = await (async () => { | |
| if (env.OPENCODE_CHANNEL) return env.OPENCODE_CHANNEL | |
| if (env.OPENCODE_BUMP) return "latest" | |
| if (env.OPENCODE_VERSION && !env.OPENCODE_VERSION.startsWith("0.0.0-")) return "latest" | |
| return await $`git branch --show-current`.text().then((x) => x.trim()) | |
| })() | |
| const IS_PREVIEW = CHANNEL !== "latest" | |
| const VERSION = await (async () => { | |
| if (env.OPENCODE_VERSION) return env.OPENCODE_VERSION | |
| if (IS_PREVIEW) return `0.0.0-${CHANNEL}-${new Date().toISOString().slice(0, 16).replace(/[-:T]/g, "")}` | |
| const version = await fetch("https://registry.npmjs.org/opencode-ai/latest") | |
| .then((res) => { | |
| if (!res.ok) throw new Error(res.statusText) | |
| return res.json() | |
| }) | |
| .then((data: any) => data.version) | |
| const [major, minor, patch] = version.split(".").map((x: string) => Number(x) || 0) | |
| const t = env.OPENCODE_BUMP?.toLowerCase() | |
| if (t === "major") return `${major + 1}.0.0` | |
| if (t === "minor") return `${major}.${minor + 1}.0` | |
| return `${major}.${minor}.${patch + 1}` | |
| })() | |
| const bot = ["actions-user", "opencode", "opencode-agent[bot]"] | |
| const teamPath = path.resolve(import.meta.dir, "../../../.github/TEAM_MEMBERS") | |
| const team = [ | |
| ...(await Bun.file(teamPath) | |
| .text() | |
| .then((x) => x.split(/\r?\n/).map((x) => x.trim())) | |
| .then((x) => x.filter((x) => x && !x.startsWith("#")))), | |
| ...bot, | |
| ] | |
| export const Script = { | |
| get channel() { | |
| return CHANNEL | |
| }, | |
| get version() { | |
| return VERSION | |
| }, | |
| get preview() { | |
| return IS_PREVIEW | |
| }, | |
| get release(): boolean { | |
| return !!env.OPENCODE_RELEASE | |
| }, | |
| get team() { | |
| return team | |
| }, | |
| } | |
| console.log(`opencode script`, JSON.stringify(Script, null, 2)) | |
Xet Storage Details
- Size:
- 2.57 kB
- Xet hash:
- aa71256cd41a6b400c346443b9956b5d3cd77d9f4c4843f7ef3978257ecd8832
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.