diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2373b83..636612a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,3 +34,7 @@ jobs: - run: pnpm publish --access public --no-git-checks env: NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} + + - run: pnpm publish --dir ./opencode --access public --no-git-checks + env: + NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} diff --git a/CHANGELOG.md b/CHANGELOG.md index fbe782c..74f7adc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +### 🏡 Chore + +- **release:** Simplify release flow to one script and sync version for wrapper `opencode` package +- **release:** Publish wrapper package from `opencode/` in release workflow +- **release:** Keep single root changelog/release and sync wrapper package metadata only + ### ⚠️ Notes - **db path:** `createObsxa()` now defaults to an XDG-compliant data path (`~/.local/share/obsxa/obsxa.db` on Linux) instead of `./obsxa.db`. Pass `db: "./obsxa.db"` explicitly to keep legacy location. diff --git a/opencode/index.d.mts b/opencode/index.d.mts new file mode 100644 index 0000000..6713f3e --- /dev/null +++ b/opencode/index.d.mts @@ -0,0 +1 @@ +export { createObsxaPlugin, createObsxaPlugin as default } from "obsxa/opencode"; diff --git a/opencode/index.mjs b/opencode/index.mjs new file mode 100644 index 0000000..cef156d --- /dev/null +++ b/opencode/index.mjs @@ -0,0 +1,2 @@ +export { createObsxaPlugin } from "obsxa/opencode"; +export { createObsxaPlugin as default } from "obsxa/opencode"; diff --git a/opencode/package.json b/opencode/package.json new file mode 100644 index 0000000..1321093 --- /dev/null +++ b/opencode/package.json @@ -0,0 +1,26 @@ +{ + "name": "obsxa-opencode", + "version": "0.0.2", + "description": "OpenCode plugin wrapper package for obsxa", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/oritwoen/obsxa.git" + }, + "files": [ + "index.mjs", + "index.d.mts" + ], + "type": "module", + "main": "./index.mjs", + "types": "./index.d.mts", + "exports": { + ".": { + "types": "./index.d.mts", + "default": "./index.mjs" + } + }, + "dependencies": { + "obsxa": "0.0.2" + } +} diff --git a/package.json b/package.json index 0937f98..d3d2d1d 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "test:run": "vitest --run", "generate": "drizzle-kit generate", "prepack": "pnpm run build", - "release": "pnpm test:run && pnpm build && changelogen --release --push" + "release": "pnpm test:run && pnpm build && node ./scripts/release-with-opencode.mjs" }, "dependencies": { "@libsql/client": "^0.17.0", diff --git a/scripts/release-with-opencode.mjs b/scripts/release-with-opencode.mjs new file mode 100644 index 0000000..5c37b96 --- /dev/null +++ b/scripts/release-with-opencode.mjs @@ -0,0 +1,47 @@ +import { execFileSync } from "node:child_process"; +import { existsSync, readFileSync, writeFileSync } from "node:fs"; +import { dirname, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; + +const rootDir = resolve(dirname(fileURLToPath(import.meta.url)), ".."); +const packageJsonPath = resolve(rootDir, "package.json"); +const opencodePackageJsonPath = resolve(rootDir, "opencode/package.json"); + +function runChangelogen(args) { + execFileSync("changelogen", args, { + cwd: rootDir, + stdio: "inherit", + }); +} + +function readRootVersion() { + const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8")); + const version = packageJson.version; + if (typeof version !== "string" || version.length === 0) { + throw new Error("Missing version in package.json"); + } + return version; +} + +function syncOpencodePackageVersion(version) { + if (!existsSync(opencodePackageJsonPath)) { + throw new Error(`Missing wrapper package definition at ${opencodePackageJsonPath}`); + } + + const opencodePackageJson = JSON.parse(readFileSync(opencodePackageJsonPath, "utf8")); + opencodePackageJson.version = version; + opencodePackageJson.dependencies ??= {}; + opencodePackageJson.dependencies.obsxa = version; + writeFileSync( + opencodePackageJsonPath, + `${JSON.stringify(opencodePackageJson, null, 2)}\n`, + "utf8", + ); +} + +runChangelogen(["--bump"]); + +const version = readRootVersion(); +syncOpencodePackageVersion(version); + +runChangelogen(["--release", "-r", version, "--push"]);