| #!/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); |
|
|
| const packageJsonPath = path.join(__dirname, '../package.json'); |
| const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); |
|
|
| function getCurrentVersion() { |
| return packageJson.version; |
| } |
|
|
| function updateVersion(type) { |
| const currentVersion = getCurrentVersion(); |
| const [major, minor, patch] = currentVersion.split('.').map(Number); |
|
|
| let newVersion; |
| switch (type) { |
| case 'major': |
| newVersion = `${major + 1}.0.0`; |
| break; |
| case 'minor': |
| newVersion = `${major}.${minor + 1}.0`; |
| break; |
| case 'patch': |
| default: |
| newVersion = `${major}.${minor}.${patch + 1}`; |
| break; |
| } |
|
|
| packageJson.version = newVersion; |
| fs.writeFileSync( |
| packageJsonPath, |
| JSON.stringify(packageJson, null, 2) + '\n' |
| ); |
| return newVersion; |
| } |
|
|
| function createGitTag(version) { |
| const tagName = `v${version}`; |
|
|
| try { |
| |
| execSync(`git rev-parse "v${version}" >/dev/null 2>&1`, { |
| stdio: 'ignore', |
| }); |
| console.log(`β
Tag v${version} already exists`); |
| return tagName; |
| } catch { |
| |
| execSync(`git tag -a "v${version}" -m "Release v${version}"`, { |
| stdio: 'inherit', |
| }); |
| console.log(`β
Created tag v${version}`); |
| return tagName; |
| } |
| } |
|
|
| function main() { |
| const type = process.argv[2] || 'patch'; |
|
|
| if (!['major', 'minor', 'patch'].includes(type)) { |
| console.error('β Invalid version type. Use: major, minor, or patch'); |
| process.exit(1); |
| } |
|
|
| console.log(`π Releasing ${type} version...`); |
|
|
| |
| const newVersion = updateVersion(type); |
| console.log(`π¦ Updated version to ${newVersion}`); |
|
|
| |
| console.log(`π Updating version in HTML files...`); |
| execSync('npm run update-version', { stdio: 'inherit' }); |
|
|
| |
| execSync('git add package.json *.html src/pages/*.html', { |
| stdio: 'inherit', |
| }); |
| execSync(`git commit -m "Release v${newVersion}"`, { stdio: 'inherit' }); |
| console.log(`πΎ Committed version change`); |
|
|
| |
| const tagName = createGitTag(newVersion); |
|
|
| |
| console.log(`π¦ Building and packaging distribution files...`); |
| execSync('npm run package', { stdio: 'inherit' }); |
| console.log(`π¦ Distribution files packaged successfully`); |
|
|
| |
| console.log(`π€ Pushing to main...`); |
| execSync('git push origin main', { stdio: 'inherit' }); |
| execSync(`git push origin ${tagName}`, { stdio: 'inherit' }); |
|
|
| console.log(`π Release v${newVersion} complete!`); |
| console.log(`π¦ Docker image: bentopdfteam/bentopdf:${newVersion}`); |
| console.log(`π¦ Distribution: dist-${newVersion}.zip`); |
| console.log( |
| `π·οΈ GitHub release: https://github.com/alam00000/bentopdf/releases/tag/${tagName}` |
| ); |
| console.log( |
| `π‘ Download dist-${newVersion}.zip from the release page for self-hosting.` |
| ); |
| } |
|
|
| main(); |
|
|