- Added update-version.js script to automate version bumps across all packages - Added check-version-consistency.js script to verify version consistency - Integrated version check into CI workflow - Scripts check package.json versions AND package-lock.json sync - Added npm scripts: `npm run update-version` and `npm run check-version` - Added documentation in scripts/README.md This ensures version consistency across the monorepo and prevents accidental version mismatches or outdated lock files. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
96 lines
No EOL
3.1 KiB
JavaScript
Executable file
96 lines
No EOL
3.1 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import { execSync } from 'child_process';
|
|
import { fileURLToPath } from 'url';
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = path.dirname(__filename);
|
|
|
|
/**
|
|
* Updates version across all package.json files in the monorepo
|
|
* Usage: node scripts/update-version.js <new-version>
|
|
* Example: node scripts/update-version.js 0.14.2
|
|
*/
|
|
|
|
const newVersion = process.argv[2];
|
|
|
|
if (!newVersion) {
|
|
console.error('❌ Please provide a version number');
|
|
console.error('Usage: node scripts/update-version.js <new-version>');
|
|
console.error('Example: node scripts/update-version.js 0.14.2');
|
|
process.exit(1);
|
|
}
|
|
|
|
// Validate version format
|
|
const versionRegex = /^\d+\.\d+\.\d+(-[\w.]+)?$/;
|
|
if (!versionRegex.test(newVersion)) {
|
|
console.error('❌ Invalid version format. Please use semantic versioning (e.g., 1.2.3 or 1.2.3-beta.1)');
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log(`🔄 Updating all packages to version ${newVersion}...`);
|
|
|
|
// List of package.json files to update
|
|
const packagePaths = [
|
|
'package.json',
|
|
'client/package.json',
|
|
'server/package.json',
|
|
'cli/package.json'
|
|
];
|
|
|
|
const updatedFiles = [];
|
|
|
|
// Update version in each package.json
|
|
packagePaths.forEach(packagePath => {
|
|
const fullPath = path.join(__dirname, '..', packagePath);
|
|
|
|
if (!fs.existsSync(fullPath)) {
|
|
console.warn(`⚠️ Skipping ${packagePath} - file not found`);
|
|
return;
|
|
}
|
|
|
|
try {
|
|
const packageJson = JSON.parse(fs.readFileSync(fullPath, 'utf8'));
|
|
const oldVersion = packageJson.version;
|
|
packageJson.version = newVersion;
|
|
|
|
// Update workspace dependencies in root package.json
|
|
if (packagePath === 'package.json' && packageJson.dependencies) {
|
|
Object.keys(packageJson.dependencies).forEach(dep => {
|
|
if (dep.startsWith('@modelcontextprotocol/inspector-')) {
|
|
packageJson.dependencies[dep] = `^${newVersion}`;
|
|
}
|
|
});
|
|
}
|
|
|
|
fs.writeFileSync(fullPath, JSON.stringify(packageJson, null, 2) + '\n');
|
|
updatedFiles.push(packagePath);
|
|
console.log(`✅ Updated ${packagePath} from ${oldVersion} to ${newVersion}`);
|
|
} catch (error) {
|
|
console.error(`❌ Failed to update ${packagePath}:`, error.message);
|
|
process.exit(1);
|
|
}
|
|
});
|
|
|
|
console.log('\n📝 Summary:');
|
|
console.log(`Updated ${updatedFiles.length} files to version ${newVersion}`);
|
|
|
|
// Update package-lock.json
|
|
console.log('\n🔒 Updating package-lock.json...');
|
|
try {
|
|
execSync('npm install', { stdio: 'inherit' });
|
|
console.log('✅ package-lock.json updated successfully');
|
|
} catch (error) {
|
|
console.error('❌ Failed to update package-lock.json:', error.message);
|
|
console.error('Please run "npm install" manually');
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log('\n✨ Version update complete!');
|
|
console.log('\nNext steps:');
|
|
console.log('1. Review the changes: git diff');
|
|
console.log('2. Commit the changes: git add -A && git commit -m "chore: bump version to ' + newVersion + '"');
|
|
console.log('3. Create a git tag: git tag v' + newVersion);
|
|
console.log('4. Push changes and tag: git push && git push --tags'); |