-
Notifications
You must be signed in to change notification settings - Fork 290
/
version.mjs
87 lines (73 loc) · 2.64 KB
/
version.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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 === 'beta') {
console.log('Branch: beta');
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`;
}
} else {
// if commit message starts with feat bump the minor version, otherwise bump the patch version
const isBumpMinor = lastCommitMessage.trim().startsWith('feat');
if (isBumpMinor) {
nextVersion = semver.inc(currentVersion, 'minor');
} else {
nextVersion = semver.inc(currentVersion, 'patch');
}
}
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);
});