#!/usr/bin/env node const fs = require('fs') const { execSync } = require('child_process') const path = require('path') // Dynamic import for ES module let chalk // Initialize ES modules async function initializeModules () { if (!chalk) { chalk = (await import('chalk')).default } } /** * Simple version bumping script for BMad-Method * Usage: node tools/version-bump.js [patch|minor|major] */ function getCurrentVersion () { const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8')) return packageJson.version } async function bumpVersion (type = 'patch') { await initializeModules() const validTypes = ['patch', 'minor', 'major'] if (!validTypes.includes(type)) { console.error(chalk.red(`Invalid version type: ${type}. Use: ${validTypes.join(', ')}`)) process.exit(1) } console.log(chalk.yellow('āš ļø Manual version bumping is disabled.')) console.log(chalk.blue('šŸ¤– This project uses semantic-release for automated versioning.')) console.log('') console.log(chalk.bold('To create a new release, use conventional commits:')) console.log(chalk.cyan(' feat: new feature (minor version bump)')) console.log(chalk.cyan(' fix: bug fix (patch version bump)')) console.log(chalk.cyan(' feat!: breaking change (major version bump)')) console.log('') console.log(chalk.dim('Example: git commit -m "feat: add new installer features"')) console.log(chalk.dim('Then push to main branch to trigger automatic release.')) return null } async function main () { await initializeModules() const type = process.argv[2] || 'patch' const currentVersion = getCurrentVersion() console.log(chalk.blue(`Current version: ${currentVersion}`)) // Check if working directory is clean try { execSync('git diff-index --quiet HEAD --') } catch (error) { console.error(chalk.red('āŒ Working directory is not clean. Commit your changes first.')) process.exit(1) } const newVersion = await bumpVersion(type) console.log(chalk.green('\nšŸŽ‰ Version bump complete!')) console.log(chalk.blue(`šŸ“¦ ${currentVersion} → ${newVersion}`)) } if (require.main === module) { main().catch(error => { console.error('Error:', error) process.exit(1) }) } module.exports = { bumpVersion, getCurrentVersion }