36 lines
1.2 KiB
JavaScript
36 lines
1.2 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* CI / global release sanity: when building from a version tag, the root
|
|
* package.json "version" must match the tag (without the leading "v").
|
|
*
|
|
* Exits 0 when GITHUB_REF is not refs/tags/v* (e.g. branch builds, PRs).
|
|
*/
|
|
import { readFileSync } from 'node:fs';
|
|
import { join, dirname } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const root = join(dirname(fileURLToPath(import.meta.url)), '..');
|
|
const ref = process.env.GITHUB_REF || '';
|
|
|
|
if (!ref.startsWith('refs/tags/v')) {
|
|
console.log(
|
|
`[assert-tag-matches-package] Skip: GITHUB_REF is not a version tag (${ref || '(empty)'})`,
|
|
);
|
|
process.exit(0);
|
|
}
|
|
|
|
const tagVersion = ref.slice('refs/tags/v'.length);
|
|
const pkgVersion = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')).version;
|
|
|
|
if (tagVersion !== pkgVersion) {
|
|
console.error(
|
|
`[assert-tag-matches-package] Mismatch: git tag is "${tagVersion}" but package.json version is "${pkgVersion}".`,
|
|
);
|
|
console.error(
|
|
'Push a commit that sets package.json "version" to match the tag before cutting the release.',
|
|
);
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log(`[assert-tag-matches-package] OK: tag v${tagVersion} matches package.json.`);
|