82 lines
2.4 KiB
JavaScript
82 lines
2.4 KiB
JavaScript
import { execa } from 'execa';
|
|
import semver from 'semver';
|
|
import fs from 'fs/promises';
|
|
|
|
async function run() {
|
|
const { stdout: branchName } = await execa('git', [
|
|
'rev-parse',
|
|
'--abbrev-ref',
|
|
'HEAD',
|
|
]);
|
|
console.log('Current branch:', branchName);
|
|
|
|
// read the current version from lerna.json
|
|
const lernaJson = JSON.parse(await fs.readFile('lerna.json', 'utf-8'));
|
|
const currentVersion = lernaJson.version;
|
|
|
|
console.log('Current version:', currentVersion);
|
|
|
|
const { stdout: currentCommitHash } = await execa('git', [
|
|
'rev-parse',
|
|
'HEAD',
|
|
]);
|
|
console.log('Current commit hash:', currentCommitHash);
|
|
|
|
const { stdout: lastCommitMessage } = await execa('git', [
|
|
'log',
|
|
'--format=%B',
|
|
'-n',
|
|
'1',
|
|
]);
|
|
|
|
let nextVersion;
|
|
|
|
if (branchName === 'release') {
|
|
console.log('Branch: release');
|
|
nextVersion = semver.inc(currentVersion, 'minor');
|
|
} else {
|
|
console.log('Branch: master/main');
|
|
const prereleaseComponents = semver.prerelease(currentVersion);
|
|
const isBumpBeta = lastCommitMessage.trim().endsWith('[BUMP BETA]');
|
|
console.log('isBumpBeta', isBumpBeta);
|
|
|
|
if (
|
|
prereleaseComponents &&
|
|
prereleaseComponents.includes('beta') &&
|
|
!isBumpBeta
|
|
) {
|
|
nextVersion = semver.inc(currentVersion, 'prerelease', 'beta');
|
|
} else if (isBumpBeta && prereleaseComponents.includes('beta')) {
|
|
console.log('Bumping beta version to be fresh beta');
|
|
nextVersion = `${semver.major(currentVersion)}.${semver.minor(
|
|
currentVersion
|
|
) + 1}.0-beta.0`;
|
|
} else {
|
|
console.log('Bumping minor version for beta release');
|
|
const nextMinorVersion = semver.inc(currentVersion, 'minor');
|
|
nextVersion = `${semver.major(nextMinorVersion)}.${semver.minor(
|
|
nextMinorVersion
|
|
)}.0-beta.0`;
|
|
}
|
|
}
|
|
|
|
if (!nextVersion) {
|
|
throw new Error('Could not determine next version');
|
|
}
|
|
|
|
console.log('Next version:', nextVersion);
|
|
console.log('Current commit hash:', currentCommitHash);
|
|
|
|
const versionInfo = { version: nextVersion, commit: currentCommitHash };
|
|
await fs.writeFile('./version.json', JSON.stringify(versionInfo, null, 2));
|
|
await fs.writeFile('./version.txt', versionInfo.version);
|
|
await fs.writeFile('./commit.txt', versionInfo.commit);
|
|
|
|
console.log('Version info saved to version.json');
|
|
}
|
|
|
|
run().catch(err => {
|
|
console.error('Error encountered during new version & commit write:', err);
|
|
process.exit(1);
|
|
});
|