@gftdcojp/weblate-nextjs-sdk
Version:
A Next.js SDK for integrating with Weblate translation management system
121 lines (100 loc) • 3.44 kB
JavaScript
const fs = require('fs');
const { execSync } = require('child_process');
/**
* CalVer versioning script for @gftdcojp/weblate-nextjs-sdk
* Format: YYYY.MM.MICRO
*
* Usage:
* node scripts/calver.js # Auto-increment micro version for current month
* node scripts/calver.js major # Create new major release for current month
* node scripts/calver.js --help # Show help
*/
function getCurrentDate() {
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
return { year, month };
}
function getCurrentVersion() {
const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8'));
return packageJson.version;
}
function updatePackageVersion(newVersion) {
const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8'));
packageJson.version = newVersion;
fs.writeFileSync('package.json', JSON.stringify(packageJson, null, 2) + '\n');
return newVersion;
}
function generateCalVer(type = 'micro') {
const { year, month } = getCurrentDate();
const currentVersion = getCurrentVersion();
console.log(`Current version: ${currentVersion}`);
// Parse current version
const versionParts = currentVersion.split('.');
const currentYear = parseInt(versionParts[0]);
const currentMonth = parseInt(versionParts[1]);
const currentMicro = parseInt(versionParts[2]) || 0;
let newYear = year;
let newMonth = parseInt(month);
let newMicro = 1;
// If we're in the same year and month, increment micro
if (currentYear === year && currentMonth === newMonth) {
if (type === 'micro') {
newMicro = currentMicro + 1;
} else if (type === 'major') {
newMicro = 1; // Reset to 1 for major release
}
}
const newVersion = `${newYear}.${String(newMonth).padStart(2, '0')}.${newMicro}`;
return newVersion;
}
function main() {
const args = process.argv.slice(2);
if (args.includes('--help') || args.includes('-h')) {
console.log(`
CalVer Versioning Script
Format: YYYY.MM.MICRO
Usage:
node scripts/calver.js # Auto-increment micro version
node scripts/calver.js major # Create new major release for current month
node scripts/calver.js --help # Show this help
Examples:
2025.07.1 -> 2025.07.2 (micro increment)
2025.07.5 -> 2025.08.1 (new month)
2025.07.3 -> 2025.07.1 (major release, reset micro)
`);
return;
}
const type = args[0] === 'major' ? 'major' : 'micro';
const newVersion = generateCalVer(type);
console.log(`Generated CalVer: ${newVersion}`);
console.log(`Release type: ${type}`);
// Update package.json
updatePackageVersion(newVersion);
console.log(`✅ Updated package.json to version ${newVersion}`);
// Update VERSION constant in source
const indexPath = 'src/index.ts';
if (fs.existsSync(indexPath)) {
let indexContent = fs.readFileSync(indexPath, 'utf8');
indexContent = indexContent.replace(
/export const VERSION = ['"][^'"]*['"];/,
`export const VERSION = '${newVersion}';`
);
fs.writeFileSync(indexPath, indexContent);
console.log(`✅ Updated VERSION constant in ${indexPath}`);
}
console.log(`
Next steps:
1. npm run build
2. npm test
3. git add .
4. git commit -m "chore: release ${newVersion}"
5. git tag v${newVersion}
6. git push origin main --tags
7. npm publish
`);
}
if (require.main === module) {
main();
}