mirror of
https://github.com/mattpocock/skills.git
synced 2026-08-07 16:41:07 +00:00
`npm run version` now runs `changeset version` and then `scripts/sync-plugin-version.mjs`, which copies the new version into `.claude-plugin/plugin.json`. The release workflow calls `npm run version` instead of `npx changeset version`, so the version PR carries both files. Also closes the drift this replaces: `plugin.json` was manually bumped to 1.2.1 while `package.json` stayed at 1.2.0. `package.json` moves up to 1.2.1 so the plugin version never goes backwards. `npm run check-plugin-version` reports drift without writing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
42 lines
1.4 KiB
JavaScript
42 lines
1.4 KiB
JavaScript
#!/usr/bin/env node
|
|
// Copies package.json's version into .claude-plugin/plugin.json.
|
|
// Runs as part of `npm run version`, immediately after `changeset version`.
|
|
// With --check it changes nothing and exits 1 if the two versions differ.
|
|
|
|
import { readFileSync, writeFileSync } from "node:fs";
|
|
import { dirname, join } from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
const repo = join(dirname(fileURLToPath(import.meta.url)), "..");
|
|
const pluginPath = join(repo, ".claude-plugin", "plugin.json");
|
|
|
|
const { version } = JSON.parse(readFileSync(join(repo, "package.json"), "utf8"));
|
|
const source = readFileSync(pluginPath, "utf8");
|
|
const plugin = JSON.parse(source);
|
|
|
|
if (plugin.version === version) {
|
|
console.log(`plugin.json version is ${version} — already in sync`);
|
|
process.exit(0);
|
|
}
|
|
|
|
if (process.argv.includes("--check")) {
|
|
console.error(
|
|
`plugin.json version is ${plugin.version}, package.json is ${version}. Run \`node scripts/sync-plugin-version.mjs\`.`,
|
|
);
|
|
process.exit(1);
|
|
}
|
|
|
|
// Rewrite only the version line, to keep the key order and the formatting.
|
|
const updated = source.replace(
|
|
/("version"\s*:\s*")[^"]*(")/,
|
|
`$1${version}$2`,
|
|
);
|
|
|
|
if (JSON.parse(updated).version !== version) {
|
|
console.error(`Could not find a version field to replace in ${pluginPath}.`);
|
|
process.exit(1);
|
|
}
|
|
|
|
writeFileSync(pluginPath, updated);
|
|
console.log(`plugin.json version ${plugin.version} -> ${version}`);
|