summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2026-04-18 12:31:59 -0400
committerDax Raad <[email protected]>2026-04-18 12:32:23 -0400
commit5eaef6b758cbfb683deadb8d440a420c3c1ee1f8 (patch)
tree44ed60450e987d9cbee29954911f1d0b47860d72
parentc5c38cad9c444070fa3b18d569fa75eb2ab40407 (diff)
downloadopencode-5eaef6b758cbfb683deadb8d440a420c3c1ee1f8.tar.gz
opencode-5eaef6b758cbfb683deadb8d440a420c3c1ee1f8.zip
release: avoid package.json drift during publish
-rwxr-xr-xpackages/plugin/script/publish.ts36
-rwxr-xr-xpackages/sdk/js/script/publish.ts19
-rwxr-xr-xscript/publish.ts17
3 files changed, 49 insertions, 23 deletions
diff --git a/packages/plugin/script/publish.ts b/packages/plugin/script/publish.ts
index de129918c..fea8c7230 100755
--- a/packages/plugin/script/publish.ts
+++ b/packages/plugin/script/publish.ts
@@ -11,22 +11,28 @@ async function published(name: string, version: string) {
}
await $`bun tsc`
-const pkg = await import("../package.json").then(
- (m) => m.default as { name: string; version: string; exports: Record<string, string> },
-)
-const original = JSON.parse(JSON.stringify(pkg))
+const originalText = await Bun.file("package.json").text()
+const pkg = JSON.parse(originalText) as {
+ name: string
+ version: string
+ exports: Record<string, string>
+}
if (await published(pkg.name, pkg.version)) {
console.log(`already published ${pkg.name}@${pkg.version}`)
- process.exit(0)
-}
-for (const [key, value] of Object.entries(pkg.exports)) {
- const file = value.replace("./src/", "./dist/").replace(".ts", "")
- // @ts-ignore
- pkg.exports[key] = {
- import: file + ".js",
- types: file + ".d.ts",
+} else {
+ for (const [key, value] of Object.entries(pkg.exports)) {
+ const file = value.replace("./src/", "./dist/").replace(".ts", "")
+ // @ts-ignore
+ pkg.exports[key] = {
+ import: file + ".js",
+ types: file + ".d.ts",
+ }
+ }
+ await Bun.write("package.json", JSON.stringify(pkg, null, 2))
+ try {
+ await $`bun pm pack`
+ await $`npm publish *.tgz --tag ${Script.channel} --access public`
+ } finally {
+ await Bun.write("package.json", originalText)
}
}
-await Bun.write("package.json", JSON.stringify(pkg, null, 2))
-await $`bun pm pack && npm publish *.tgz --tag ${Script.channel} --access public`
-await Bun.write("package.json", JSON.stringify(original, null, 2))
diff --git a/packages/sdk/js/script/publish.ts b/packages/sdk/js/script/publish.ts
index b5e1211fc..29426a41b 100755
--- a/packages/sdk/js/script/publish.ts
+++ b/packages/sdk/js/script/publish.ts
@@ -11,12 +11,12 @@ async function published(name: string, version: string) {
return (await $`npm view ${name}@${version} version`.nothrow()).exitCode === 0
}
-const pkg = (await import("../package.json").then((m) => m.default)) as {
+const originalText = await Bun.file("package.json").text()
+const pkg = JSON.parse(originalText) as {
name: string
version: string
exports: Record<string, unknown>
}
-const original = JSON.parse(JSON.stringify(pkg))
function transformExports(exports: Record<string, unknown>) {
return Object.fromEntries(
Object.entries(exports).map(([key, value]) => {
@@ -33,10 +33,13 @@ function transformExports(exports: Record<string, unknown>) {
}
if (await published(pkg.name, pkg.version)) {
console.log(`already published ${pkg.name}@${pkg.version}`)
- process.exit(0)
+} else {
+ pkg.exports = transformExports(pkg.exports)
+ await Bun.write("package.json", JSON.stringify(pkg, null, 2))
+ try {
+ await $`bun pm pack`
+ await $`npm publish *.tgz --tag ${Script.channel} --access public`
+ } finally {
+ await Bun.write("package.json", originalText)
+ }
}
-pkg.exports = transformExports(pkg.exports)
-await Bun.write("package.json", JSON.stringify(pkg, null, 2))
-await $`bun pm pack`
-await $`npm publish *.tgz --tag ${Script.channel} --access public`
-await Bun.write("package.json", JSON.stringify(original, null, 2))
diff --git a/script/publish.ts b/script/publish.ts
index 6cd244e0e..c8e39a4b3 100755
--- a/script/publish.ts
+++ b/script/publish.ts
@@ -15,11 +15,23 @@ const pkgjsons = await Array.fromAsync(
).then((arr) => arr.filter((x) => !x.includes("node_modules") && !x.includes("dist")))
const extensionToml = fileURLToPath(new URL("../packages/extensions/zed/extension.toml", import.meta.url))
+const publishPackageJsons = ["packages/plugin/package.json", "packages/sdk/js/package.json"]
async function hasChanges() {
return (await $`git diff --quiet && git diff --cached --quiet`.nothrow()).exitCode !== 0
}
+async function hasPublishPackageJsonChanges() {
+ if ((await $`git diff --quiet -- ${publishPackageJsons}`.nothrow()).exitCode !== 0) return true
+ return (await $`git diff --cached --quiet -- ${publishPackageJsons}`.nothrow()).exitCode !== 0
+}
+
+async function logPublishPackageJsonChanges() {
+ await $`git status --short -- ${publishPackageJsons}`
+ await $`git diff -- ${publishPackageJsons}`
+ await $`git diff --cached -- ${publishPackageJsons}`
+}
+
async function releaseTagExists() {
return (await $`git rev-parse -q --verify refs/tags/${tag}`.nothrow()).exitCode === 0
}
@@ -76,6 +88,11 @@ if (Script.release) {
if (Script.release && !Script.preview) {
await $`git fetch origin`
+ if (await hasPublishPackageJsonChanges()) {
+ console.error("publish scripts left package.json changes before syncing dev")
+ await logPublishPackageJsonChanges()
+ throw new Error("packages/plugin/package.json or packages/sdk/js/package.json changed during publish")
+ }
await $`git checkout -B dev origin/dev`
await prepareReleaseFiles()
if (await hasChanges()) {