From 943fbf39a333ab4182e6f598c89f995d5063dbe1 Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Sat, 20 Dec 2025 02:22:17 +0800 Subject: ci: separate standalone publishing from dependent publishing (#5634) Co-authored-by: GitHub Action --- script/publish-complete.ts | 14 +++++++++ script/publish-start.ts | 72 ++++++++++++++++++++++++++++++++++++++++++++++ script/publish.ts | 72 ---------------------------------------------- 3 files changed, 86 insertions(+), 72 deletions(-) create mode 100644 script/publish-complete.ts create mode 100755 script/publish-start.ts delete mode 100755 script/publish.ts (limited to 'script') diff --git a/script/publish-complete.ts b/script/publish-complete.ts new file mode 100644 index 000000000..aae1a3524 --- /dev/null +++ b/script/publish-complete.ts @@ -0,0 +1,14 @@ +#!/usr/bin/env bun + +import { Script } from "@opencode-ai/script" +import { $ } from "bun" + +if (!Script.preview) { + await $`gh release edit ${process.env.OPENCODE_RELEASE_TAG} --draft=false` +} + +await $`bun install` + +await $`gh release download --pattern "opencode-linux-*64.tar.gz" --pattern "opencode-darwin-*64.zip" -D dist` + +await import(`../packages/opencode/script/publish-registries.ts`) diff --git a/script/publish-start.ts b/script/publish-start.ts new file mode 100755 index 000000000..d11b435b4 --- /dev/null +++ b/script/publish-start.ts @@ -0,0 +1,72 @@ +#!/usr/bin/env bun + +import { $ } from "bun" +import { Script } from "@opencode-ai/script" +import { generateChangelog } from "./changelog" + +let notes = "" + +console.log("=== publishing ===\n") + +if (!Script.preview) { + const previous = 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) + + console.log("generating changelog since " + previous) + notes = await generateChangelog(`v${previous}`, "HEAD") + console.log("---- Generated Changelog ----") + console.log(notes) + console.log("-----------------------------") +} + +const pkgjsons = await Array.fromAsync( + new Bun.Glob("**/package.json").scan({ + absolute: true, + }), +).then((arr) => arr.filter((x) => !x.includes("node_modules") && !x.includes("dist"))) + +for (const file of pkgjsons) { + let pkg = await Bun.file(file).text() + pkg = pkg.replaceAll(/"version": "[^"]+"/g, `"version": "${Script.version}"`) + console.log("updated:", file) + await Bun.file(file).write(pkg) +} + +const extensionToml = new URL("../packages/extensions/zed/extension.toml", import.meta.url).pathname +let toml = await Bun.file(extensionToml).text() +toml = toml.replace(/^version = "[^"]+"/m, `version = "${Script.version}"`) +toml = toml.replaceAll(/releases\/download\/v[^/]+\//g, `releases/download/v${Script.version}/`) +console.log("updated:", extensionToml) +await Bun.file(extensionToml).write(toml) + +await $`bun install` + +console.log("\n=== opencode ===\n") +await import(`../packages/opencode/script/publish.ts`) + +console.log("\n=== sdk ===\n") +await import(`../packages/sdk/js/script/publish.ts`) + +console.log("\n=== plugin ===\n") +await import(`../packages/plugin/script/publish.ts`) + +const dir = new URL("..", import.meta.url).pathname +process.chdir(dir) + +if (!Script.preview) { + await $`git commit -am "release: v${Script.version}"` + await $`git tag v${Script.version}` + await $`git fetch origin` + await $`git cherry-pick HEAD..origin/dev`.nothrow() + await $`git push origin HEAD --tags --no-verify --force-with-lease` + await new Promise((resolve) => setTimeout(resolve, 5_000)) + await $`gh release create v${Script.version} -d --title "v${Script.version}" --notes ${notes || "No notable changes"} ./packages/opencode/dist/*.zip ./packages/opencode/dist/*.tar.gz` + const release = await $`gh release view v${Script.version} --json id,tagName`.json() + if (process.env.GITHUB_OUTPUT) { + await Bun.write(process.env.GITHUB_OUTPUT, `releaseId=${release.id}\ntagName=${release.tagName}\n`) + } +} diff --git a/script/publish.ts b/script/publish.ts deleted file mode 100755 index d11b435b4..000000000 --- a/script/publish.ts +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env bun - -import { $ } from "bun" -import { Script } from "@opencode-ai/script" -import { generateChangelog } from "./changelog" - -let notes = "" - -console.log("=== publishing ===\n") - -if (!Script.preview) { - const previous = 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) - - console.log("generating changelog since " + previous) - notes = await generateChangelog(`v${previous}`, "HEAD") - console.log("---- Generated Changelog ----") - console.log(notes) - console.log("-----------------------------") -} - -const pkgjsons = await Array.fromAsync( - new Bun.Glob("**/package.json").scan({ - absolute: true, - }), -).then((arr) => arr.filter((x) => !x.includes("node_modules") && !x.includes("dist"))) - -for (const file of pkgjsons) { - let pkg = await Bun.file(file).text() - pkg = pkg.replaceAll(/"version": "[^"]+"/g, `"version": "${Script.version}"`) - console.log("updated:", file) - await Bun.file(file).write(pkg) -} - -const extensionToml = new URL("../packages/extensions/zed/extension.toml", import.meta.url).pathname -let toml = await Bun.file(extensionToml).text() -toml = toml.replace(/^version = "[^"]+"/m, `version = "${Script.version}"`) -toml = toml.replaceAll(/releases\/download\/v[^/]+\//g, `releases/download/v${Script.version}/`) -console.log("updated:", extensionToml) -await Bun.file(extensionToml).write(toml) - -await $`bun install` - -console.log("\n=== opencode ===\n") -await import(`../packages/opencode/script/publish.ts`) - -console.log("\n=== sdk ===\n") -await import(`../packages/sdk/js/script/publish.ts`) - -console.log("\n=== plugin ===\n") -await import(`../packages/plugin/script/publish.ts`) - -const dir = new URL("..", import.meta.url).pathname -process.chdir(dir) - -if (!Script.preview) { - await $`git commit -am "release: v${Script.version}"` - await $`git tag v${Script.version}` - await $`git fetch origin` - await $`git cherry-pick HEAD..origin/dev`.nothrow() - await $`git push origin HEAD --tags --no-verify --force-with-lease` - await new Promise((resolve) => setTimeout(resolve, 5_000)) - await $`gh release create v${Script.version} -d --title "v${Script.version}" --notes ${notes || "No notable changes"} ./packages/opencode/dist/*.zip ./packages/opencode/dist/*.tar.gz` - const release = await $`gh release view v${Script.version} --json id,tagName`.json() - if (process.env.GITHUB_OUTPUT) { - await Bun.write(process.env.GITHUB_OUTPUT, `releaseId=${release.id}\ntagName=${release.tagName}\n`) - } -} -- cgit v1.2.3