Add hybrid versioning scripts, version shown in app footer
This commit is contained in:
63
scripts/generate-version.js
Normal file
63
scripts/generate-version.js
Normal file
@@ -0,0 +1,63 @@
|
||||
// scripts/generate-version.js - Generate version info from git
|
||||
const { execSync } = require('child_process');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const pkg = require('../package.json');
|
||||
|
||||
try {
|
||||
const gitHash = execSync('git rev-parse --short HEAD').toString().trim();
|
||||
const gitBranch = execSync('git rev-parse --abbrev-ref HEAD').toString().trim();
|
||||
const gitDate = execSync('git log -1 --format=%cd --date=format:%Y-%m-%d').toString().trim();
|
||||
const isDirty = execSync('git status --porcelain').toString().trim() !== '';
|
||||
|
||||
const version = {
|
||||
version: `${pkg.version}+${gitHash}${isDirty ? '-dirty' : ''}`,
|
||||
semver: pkg.version,
|
||||
commit: gitHash,
|
||||
branch: gitBranch,
|
||||
buildDate: new Date().toISOString(),
|
||||
gitDate: gitDate,
|
||||
};
|
||||
|
||||
fs.writeFileSync(
|
||||
path.join(__dirname, '../src/version.json'),
|
||||
JSON.stringify(version, null, 2)
|
||||
);
|
||||
|
||||
// Also generate version.ts for better Vite/TypeScript compatibility
|
||||
const versionTs = `// Auto-generated by scripts/generate-version.js
|
||||
export const VERSION_INFO = ${JSON.stringify(version, null, 2)} as const;
|
||||
`;
|
||||
fs.writeFileSync(
|
||||
path.join(__dirname, '../src/version.ts'),
|
||||
versionTs
|
||||
);
|
||||
|
||||
console.log(`✓ Generated version: ${version.version}`);
|
||||
console.log(` Semver: ${version.semver}, Commit: ${version.commit}, Branch: ${version.branch}`);
|
||||
} catch (error) {
|
||||
console.warn('⚠ Could not generate git version, using package.json fallback');
|
||||
const version = {
|
||||
version: pkg.version,
|
||||
semver: pkg.version,
|
||||
commit: 'unknown',
|
||||
branch: 'unknown',
|
||||
buildDate: new Date().toISOString(),
|
||||
gitDate: 'unknown',
|
||||
};
|
||||
|
||||
fs.writeFileSync(
|
||||
path.join(__dirname, '../src/version.json'),
|
||||
JSON.stringify(version, null, 2)
|
||||
);
|
||||
|
||||
const versionTs = `// Auto-generated by scripts/generate-version.js
|
||||
export const VERSION_INFO = ${JSON.stringify(version, null, 2)} as const;
|
||||
`;
|
||||
fs.writeFileSync(
|
||||
path.join(__dirname, '../src/version.ts'),
|
||||
versionTs
|
||||
);
|
||||
|
||||
console.log(`✓ Fallback version: ${version.version}`);
|
||||
}
|
||||
Reference in New Issue
Block a user