| | #!/usr/bin/env node |
| |
|
| | |
| | |
| | |
| | |
| |
|
| | import { execSync } from 'child_process'; |
| | import { readFileSync, writeFileSync } from 'fs'; |
| | import { join } from 'path'; |
| |
|
| | const PACKAGE_JSON_PATH = join(process.cwd(), 'app', 'package.json'); |
| | const CHANGELOG_PATH = join(process.cwd(), 'CHANGELOG.md'); |
| |
|
| | function getCurrentVersion() { |
| | const packageJson = JSON.parse(readFileSync(PACKAGE_JSON_PATH, 'utf8')); |
| | return packageJson.version; |
| | } |
| |
|
| | function updateVersion(newVersion) { |
| | const packageJson = JSON.parse(readFileSync(PACKAGE_JSON_PATH, 'utf8')); |
| | packageJson.version = newVersion; |
| | writeFileSync(PACKAGE_JSON_PATH, JSON.stringify(packageJson, null, 2) + '\n'); |
| | console.log(`β
Updated package.json to version ${newVersion}`); |
| | } |
| |
|
| | function updateChangelog(newVersion) { |
| | const changelog = readFileSync(CHANGELOG_PATH, 'utf8'); |
| | const today = new Date().toISOString().split('T')[0]; |
| |
|
| | const updatedChangelog = changelog.replace( |
| | '## [Unreleased]', |
| | `## [Unreleased]\n\n## [${newVersion}] - ${today}` |
| | ); |
| |
|
| | writeFileSync(CHANGELOG_PATH, updatedChangelog); |
| | console.log(`β
Updated CHANGELOG.md with version ${newVersion}`); |
| | } |
| |
|
| | function createGitTag(version) { |
| | try { |
| | execSync(`git tag -a v${version} -m "Release version ${version}"`, { stdio: 'inherit' }); |
| | console.log(`β
Created git tag v${version}`); |
| | } catch (error) { |
| | console.error(`β Failed to create git tag: ${error.message}`); |
| | } |
| | } |
| |
|
| | function main() { |
| | const args = process.argv.slice(2); |
| | const versionType = args[0]; |
| |
|
| | if (!['major', 'minor', 'patch'].includes(versionType)) { |
| | console.error('β Please specify version type: major, minor, or patch'); |
| | console.log('Usage: node scripts/release.mjs [major|minor|patch]'); |
| | process.exit(1); |
| | } |
| |
|
| | const currentVersion = getCurrentVersion(); |
| | const [major, minor, patch] = currentVersion.split('.').map(Number); |
| |
|
| | let newVersion; |
| | switch (versionType) { |
| | case 'major': |
| | newVersion = `${major + 1}.0.0`; |
| | break; |
| | case 'minor': |
| | newVersion = `${major}.${minor + 1}.0`; |
| | break; |
| | case 'patch': |
| | newVersion = `${major}.${minor}.${patch + 1}`; |
| | break; |
| | } |
| |
|
| | console.log(`π Releasing version ${newVersion} (from ${currentVersion})`); |
| |
|
| | |
| | updateVersion(newVersion); |
| | updateChangelog(newVersion); |
| |
|
| | |
| | createGitTag(newVersion); |
| |
|
| | console.log(`\nπ Release ${newVersion} prepared!`); |
| | console.log('\nNext steps:'); |
| | console.log('1. Review the changes:'); |
| | console.log(' git diff'); |
| | console.log('2. Commit the changes:'); |
| | console.log(` git add . && git commit -m "chore: release version ${newVersion}"`); |
| | console.log('3. Push the changes and tags:'); |
| | console.log(` git push && git push --tags`); |
| | console.log('4. Create a release on Hugging Face Spaces'); |
| | } |
| |
|
| | main(); |
| |
|