yosi.ai
Version:
AI-powered code generation tool using Google's Gemini API
94 lines (78 loc) • 2.66 kB
JavaScript
const { execSync } = require('child_process');
const readline = require('readline');
const fs = require('fs');
const path = require('path');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const packageJsonPath = path.join(__dirname, '..', 'package.json');
const packageJson = require(packageJsonPath);
const currentVersion = packageJson.version;
console.log(`Current version: ${currentVersion}`);
// Parse the current version
const [major, minor, patch] = currentVersion.split('.').map(Number);
console.log('\nSelect version bump:');
console.log(`1. Patch (${major}.${minor}.${patch + 1})`);
console.log(`2. Minor (${major}.${minor + 1}.0)`);
console.log(`3. Major (${major + 1}.0.0)`);
console.log('4. Custom version');
rl.question('\nEnter your choice (1-4): ', (choice) => {
let newVersion;
switch (choice) {
case '1':
newVersion = `${major}.${minor}.${patch + 1}`;
break;
case '2':
newVersion = `${major}.${minor + 1}.0`;
break;
case '3':
newVersion = `${major + 1}.0.0`;
break;
case '4':
rl.question('Enter custom version (x.y.z): ', (customVersion) => {
if (!/^\d+\.\d+\.\d+$/.test(customVersion)) {
console.error('Invalid version format. Must be x.y.z where x, y, and z are numbers.');
rl.close();
return;
}
updateVersionAndPublish(customVersion);
});
return;
default:
console.error('Invalid choice. Please enter a number between 1 and 4.');
rl.close();
return;
}
if (newVersion) {
updateVersionAndPublish(newVersion);
}
});
function updateVersionAndPublish(newVersion) {
rl.question(`Publish version ${newVersion}? (y/n): `, (answer) => {
if (answer.toLowerCase() === 'y') {
try {
// Update package.json
packageJson.version = newVersion;
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
console.log(`Updated package.json to version ${newVersion}`);
// Run tests
console.log('\nRunning tests...');
execSync('npm test', { stdio: 'inherit' });
// Publish to npm
console.log('\nPublishing to npm...');
execSync('npm publish', { stdio: 'inherit' });
console.log(`\nSuccessfully published version ${newVersion} to npm!`);
} catch (error) {
console.error('Error during publishing:', error.message);
}
} else {
console.log('Publishing cancelled.');
}
rl.close();
});
}
rl.on('close', () => {
process.exit(0);
});