#!/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}`);