diff options
Diffstat (limited to 'script/publish.ts')
| -rwxr-xr-x | script/publish.ts | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/script/publish.ts b/script/publish.ts new file mode 100755 index 000000000..23a6e5c9d --- /dev/null +++ b/script/publish.ts @@ -0,0 +1,83 @@ +#!/usr/bin/env bun + +import { $ } from "bun" +import { Script } from "@opencode-ai/script" +import { buildNotes, getLatestRelease } from "./changelog" + +const highlightsTemplate = ` +<!-- +Add highlights before publishing. Delete this section if no highlights. + +- For multiple highlights, use multiple <highlight> tags +- Highlights with the same source attribute get grouped together +--> + +<!-- +<highlight source="SourceName (TUI/Desktop/Web/Core)"> + <h2>Feature title goes here</h2> + <p short="Short description used for Desktop Recap"> + Full description of the feature or change + </p> + + https://github.com/user-attachments/assets/uuid-for-video (you will want to drag & drop the video or picture) + + <img + width="1912" + height="1164" + alt="image" + src="https://github.com/user-attachments/assets/uuid-for-image" + /> +</highlight> +--> + +` + +console.log("=== publishing ===\n") + +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` +await import(`../packages/sdk/js/script/build.ts`) + +if (Script.release) { + const previous = await getLatestRelease() + const notes = await buildNotes(previous, "HEAD") + // notes.unshift(highlightsTemplate) + 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 edit v${Script.version} --draft=false --title "v${Script.version}" --notes ${notes.join("\n") || "No notable changes"}` +} + +console.log("\n=== cli ===\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) |
