diff --git a/lib/get-next-version.js b/lib/get-next-version.js index f4c4439e..19b9e299 100644 --- a/lib/get-next-version.js +++ b/lib/get-next-version.js @@ -1,14 +1,15 @@ const semver = require('semver'); const {FIRST_RELEASE, FIRSTPRERELEASE} = require('./definitions/constants'); -module.exports = ({branch, nextRelease: {type}, lastRelease, logger}) => { +module.exports = ({branch, nextRelease: {type, channel}, lastRelease, logger}) => { let version; if (lastRelease.version) { + const {major, minor, patch} = semver.parse(lastRelease.version); version = branch.type === 'prerelease' - ? semver.prerelease(lastRelease.version) + ? semver.prerelease(lastRelease.version) && lastRelease.channel === channel ? semver.inc(lastRelease.version, 'prerelease') - : `${semver.inc(lastRelease.version, type)}-${branch.prerelease}.${FIRSTPRERELEASE}` + : `${semver.inc(`${major}.${minor}.${patch}`, type)}-${branch.prerelease}.${FIRSTPRERELEASE}` : semver.inc(lastRelease.version, type); logger.log('The next release version is %s', version); } else { diff --git a/test/get-next-version.test.js b/test/get-next-version.test.js index 476d5e9f..a3212a5f 100644 --- a/test/get-next-version.test.js +++ b/test/get-next-version.test.js @@ -76,6 +76,16 @@ test('Increase version for patch release on prerelease branch', t => { }), '1.0.0-beta.2' ); + + t.is( + getNextVersion({ + branch: {name: 'alpha', type: 'prerelease', prerelease: 'alpha'}, + nextRelease: {type: 'patch', channel: 'alpha'}, + lastRelease: {version: '1.0.0-beta.1', channel: 'beta'}, + logger: t.context.logger, + }), + '1.0.1-alpha.1' + ); }); test('Increase version for minor release on prerelease branch', t => { @@ -98,6 +108,16 @@ test('Increase version for minor release on prerelease branch', t => { }), '1.0.0-beta.2' ); + + t.is( + getNextVersion({ + branch: {name: 'alpha', type: 'prerelease', prerelease: 'alpha'}, + nextRelease: {type: 'minor', channel: 'alpha'}, + lastRelease: {version: '1.0.0-beta.1', channel: 'beta'}, + logger: t.context.logger, + }), + '1.1.0-alpha.1' + ); }); test('Increase version for major release on prerelease branch', t => { @@ -120,6 +140,16 @@ test('Increase version for major release on prerelease branch', t => { }), '1.0.0-beta.2' ); + + t.is( + getNextVersion({ + branch: {name: 'alpha', type: 'prerelease', prerelease: 'alpha'}, + nextRelease: {type: 'major', channel: 'alpha'}, + lastRelease: {version: '1.0.0-beta.1', channel: 'beta'}, + logger: t.context.logger, + }), + '2.0.0-alpha.1' + ); }); test('Return 1.0.0 if there is no previous release on prerelease branch', t => {