1 | const semver = require('semver');
|
2 | const {FIRST_RELEASE, FIRSTPRERELEASE} = require('./definitions/constants');
|
3 | const {isSameChannel, getLatestVersion, tagsToVersions, highest} = require('./utils');
|
4 |
|
5 | module.exports = ({branch, nextRelease: {type, channel}, lastRelease, logger}) => {
|
6 | let version;
|
7 | if (lastRelease.version) {
|
8 | const {major, minor, patch} = semver.parse(lastRelease.version);
|
9 |
|
10 | if (branch.type === 'prerelease') {
|
11 | if (
|
12 | semver.prerelease(lastRelease.version) &&
|
13 | lastRelease.channels.some((lastReleaseChannel) => isSameChannel(lastReleaseChannel, channel))
|
14 | ) {
|
15 | version = highest(
|
16 | semver.inc(lastRelease.version, 'prerelease'),
|
17 | `${semver.inc(getLatestVersion(tagsToVersions(branch.tags), {withPrerelease: true}), type)}-${
|
18 | branch.prerelease
|
19 | }.${FIRSTPRERELEASE}`
|
20 | );
|
21 | } else {
|
22 | version = `${semver.inc(`${major}.${minor}.${patch}`, type)}-${branch.prerelease}.${FIRSTPRERELEASE}`;
|
23 | }
|
24 | } else {
|
25 | version = semver.inc(lastRelease.version, type);
|
26 | }
|
27 |
|
28 | logger.log('The next release version is %s', version);
|
29 | } else {
|
30 | version = branch.type === 'prerelease' ? `${FIRST_RELEASE}-${branch.prerelease}.${FIRSTPRERELEASE}` : FIRST_RELEASE;
|
31 | logger.log(`There is no previous release, the next release version is ${version}`);
|
32 | }
|
33 |
|
34 | return version;
|
35 | };
|