Files
Maestro/scripts/set-version.mjs
Pedram Amini b6e0d14059 ## CHANGES
- Version stamping now includes package.json version plus short git hash 🧩
- Local build label switched to clearer “(local)” suffix for sanity 🏷️
- Script now reads package.json robustly with safe “unknown” fallback 🛡️
- Added proper ESM path resolution using fileURLToPath/dirname utilities 🧭
2025-12-29 08:03:50 -06:00

73 lines
1.8 KiB
JavaScript

#!/usr/bin/env node
/**
* Cross-platform script to set VITE_APP_VERSION environment variable
* with the local git hash. Works on Windows, macOS, and Linux.
*
* Usage: node scripts/set-version.mjs <command> [args...]
* Example: node scripts/set-version.mjs npm run build
*/
import { execFileSync, spawn } from 'child_process';
import { readFileSync } from 'fs';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';
import process from 'process';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
function getGitHash() {
try {
const hash = execFileSync('git', ['rev-parse', '--short=8', 'HEAD'], {
encoding: 'utf8',
stdio: ['pipe', 'pipe', 'pipe']
}).trim();
return hash;
} catch {
return 'unknown';
}
}
function getPackageVersion() {
try {
const packageJson = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
return packageJson.version;
} catch {
return 'unknown';
}
}
const gitHash = getGitHash();
const packageVersion = getPackageVersion();
const version = `${packageVersion} ${gitHash} (local)`;
// Set environment variable
process.env.VITE_APP_VERSION = version;
// Get the command and args to run
const [,, ...args] = process.argv;
if (args.length === 0) {
console.log(`VITE_APP_VERSION=${version}`);
process.exit(0);
}
// Run the command with the environment variable set
const command = args[0];
const commandArgs = args.slice(1);
const child = spawn(command, commandArgs, {
stdio: 'inherit',
shell: true,
env: { ...process.env, VITE_APP_VERSION: version }
});
child.on('close', (code) => {
process.exit(code ?? 0);
});
child.on('error', (err) => {
console.error(`Failed to run command: ${err.message}`);
process.exit(1);
});