34 lines
1.3 KiB
JavaScript
34 lines
1.3 KiB
JavaScript
#!/usr/bin/env node
|
|
// Bumps the app version in src/version.json.
|
|
//
|
|
// node scripts/bump-version.mjs -> patch (1.0.0 -> 1.0.1)
|
|
// node scripts/bump-version.mjs minor -> 1.0.1 -> 1.1.0
|
|
// node scripts/bump-version.mjs major -> 1.1.0 -> 2.0.0
|
|
//
|
|
// Run automatically by the pre-commit hook (.githooks/pre-commit).
|
|
import fs from 'node:fs';
|
|
|
|
const VERSION_FILE = new URL('../src/version.json', import.meta.url);
|
|
const level = (process.argv[2] || 'patch').toLowerCase();
|
|
|
|
const data = JSON.parse(fs.readFileSync(VERSION_FILE, 'utf8'));
|
|
const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(data.version || '');
|
|
if (!match) {
|
|
console.error(`bump-version: invalid version "${data.version}" in src/version.json (expected X.Y.Z)`);
|
|
process.exit(1);
|
|
}
|
|
|
|
let [major, minor, patch] = match.slice(1).map(Number);
|
|
if (level === 'major') { major++; minor = 0; patch = 0; }
|
|
else if (level === 'minor') { minor++; patch = 0; }
|
|
else if (level === 'patch') { patch++; }
|
|
else {
|
|
console.error(`bump-version: unknown level "${level}" (use patch, minor or major)`);
|
|
process.exit(1);
|
|
}
|
|
|
|
const previous = data.version;
|
|
data.version = `${major}.${minor}.${patch}`;
|
|
fs.writeFileSync(VERSION_FILE, JSON.stringify(data, null, 2) + '\n', 'utf8');
|
|
console.log(`bump-version: ${previous} -> ${data.version}`);
|