mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-09-30 12:39:42 +02:00
Makes the drift that PR #70 caught impossible to repeat: - `version-packages` script now runs `changeset version && npm install --package-lock-only && check-lockfile-sync`, so the lockfile is always regenerated and verified as part of consuming a changeset - New `scripts/check-lockfile-sync.mjs` compares package.json#.version against package-lock.json's root and packages[""] version fields (npm ci does not enforce these, which is why the prior drift slipped through CI) - CI now runs `npm run check:lockfile` on every push/PR — any future drift fails the build before merge - COM workflow in CLAUDE.md collapsed back to a single release-bump step now that lockfile sync is automatic Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
30 lines
1.3 KiB
JavaScript
Executable File
30 lines
1.3 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
// Fails if package-lock.json's version fields don't match package.json.
|
|
// Changesets bumps package.json but NOT the lockfile — this catches that drift
|
|
// (the top-level `version` in lockfiles is metadata, so `npm ci` won't flag it).
|
|
|
|
import { readFileSync } from 'node:fs';
|
|
import { resolve, dirname } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
const pkg = JSON.parse(readFileSync(resolve(repoRoot, 'package.json'), 'utf8'));
|
|
const lock = JSON.parse(readFileSync(resolve(repoRoot, 'package-lock.json'), 'utf8'));
|
|
|
|
const expected = pkg.version;
|
|
const rootVersion = lock.version;
|
|
const selfVersion = lock.packages?.['']?.version;
|
|
|
|
const mismatches = [];
|
|
if (rootVersion !== expected) mismatches.push(` package-lock.json#.version = ${rootVersion} (expected ${expected})`);
|
|
if (selfVersion !== expected) mismatches.push(` package-lock.json#.packages[""].version = ${selfVersion} (expected ${expected})`);
|
|
|
|
if (mismatches.length > 0) {
|
|
console.error(`\nLockfile version drift detected (package.json is ${expected}):`);
|
|
console.error(mismatches.join('\n'));
|
|
console.error('\nFix: run `npm install --package-lock-only` and commit the updated package-lock.json.\n');
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log(`Lockfile in sync with package.json (${expected}).`);
|