fix: increase next version on prerelease branch based on highest commit type
This commit is contained in:
parent
c16fcc9d15
commit
9ecc7a369c
@ -1,18 +1,28 @@
|
|||||||
const semver = require('semver');
|
const semver = require('semver');
|
||||||
const {FIRST_RELEASE, FIRSTPRERELEASE} = require('./definitions/constants');
|
const {FIRST_RELEASE, FIRSTPRERELEASE} = require('./definitions/constants');
|
||||||
const {isSameChannel} = require('./utils');
|
const {isSameChannel, getLatestVersion, tagsToVersions, highest} = require('./utils');
|
||||||
|
|
||||||
module.exports = ({branch, nextRelease: {type, channel}, lastRelease, logger}) => {
|
module.exports = ({branch, nextRelease: {type, channel}, lastRelease, logger}) => {
|
||||||
let version;
|
let version;
|
||||||
if (lastRelease.version) {
|
if (lastRelease.version) {
|
||||||
const {major, minor, patch} = semver.parse(lastRelease.version);
|
const {major, minor, patch} = semver.parse(lastRelease.version);
|
||||||
version =
|
|
||||||
branch.type === 'prerelease'
|
if (branch.type === 'prerelease') {
|
||||||
? semver.prerelease(lastRelease.version) &&
|
if (
|
||||||
lastRelease.channels.some(lastReleaseChannel => isSameChannel(lastReleaseChannel, channel))
|
semver.prerelease(lastRelease.version) &&
|
||||||
? semver.inc(lastRelease.version, 'prerelease')
|
lastRelease.channels.some(lastReleaseChannel => isSameChannel(lastReleaseChannel, channel))
|
||||||
: `${semver.inc(`${major}.${minor}.${patch}`, type)}-${branch.prerelease}.${FIRSTPRERELEASE}`
|
) {
|
||||||
: semver.inc(lastRelease.version, type);
|
version = highest(
|
||||||
|
semver.inc(lastRelease.version, 'prerelease'),
|
||||||
|
`${semver.inc(getLatestVersion(tagsToVersions(branch.tags)), type)}-${branch.prerelease}.${FIRSTPRERELEASE}`
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
version = `${semver.inc(`${major}.${minor}.${patch}`, type)}-${branch.prerelease}.${FIRSTPRERELEASE}`;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
version = semver.inc(lastRelease.version, type);
|
||||||
|
}
|
||||||
|
|
||||||
logger.log('The next release version is %s', version);
|
logger.log('The next release version is %s', version);
|
||||||
} else {
|
} else {
|
||||||
version = branch.type === 'prerelease' ? `${FIRST_RELEASE}-${branch.prerelease}.${FIRSTPRERELEASE}` : FIRST_RELEASE;
|
version = branch.type === 'prerelease' ? `${FIRST_RELEASE}-${branch.prerelease}.${FIRSTPRERELEASE}` : FIRST_RELEASE;
|
||||||
|
@ -11,9 +11,9 @@ test.beforeEach(t => {
|
|||||||
test('Increase version for patch release', t => {
|
test('Increase version for patch release', t => {
|
||||||
t.is(
|
t.is(
|
||||||
getNextVersion({
|
getNextVersion({
|
||||||
branch: {name: 'master', type: 'release'},
|
branch: {name: 'master', type: 'release', tags: [{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}]},
|
||||||
nextRelease: {type: 'patch'},
|
nextRelease: {type: 'patch'},
|
||||||
lastRelease: {version: '1.0.0', channels: [undefined]},
|
lastRelease: {version: '1.0.0', channels: [null]},
|
||||||
logger: t.context.logger,
|
logger: t.context.logger,
|
||||||
}),
|
}),
|
||||||
'1.0.1'
|
'1.0.1'
|
||||||
@ -23,9 +23,9 @@ test('Increase version for patch release', t => {
|
|||||||
test('Increase version for minor release', t => {
|
test('Increase version for minor release', t => {
|
||||||
t.is(
|
t.is(
|
||||||
getNextVersion({
|
getNextVersion({
|
||||||
branch: {name: 'master', type: 'release'},
|
branch: {name: 'master', type: 'release', tags: [{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}]},
|
||||||
nextRelease: {type: 'minor'},
|
nextRelease: {type: 'minor'},
|
||||||
lastRelease: {version: '1.0.0', channels: [undefined]},
|
lastRelease: {version: '1.0.0', channels: [null]},
|
||||||
logger: t.context.logger,
|
logger: t.context.logger,
|
||||||
}),
|
}),
|
||||||
'1.1.0'
|
'1.1.0'
|
||||||
@ -35,9 +35,9 @@ test('Increase version for minor release', t => {
|
|||||||
test('Increase version for major release', t => {
|
test('Increase version for major release', t => {
|
||||||
t.is(
|
t.is(
|
||||||
getNextVersion({
|
getNextVersion({
|
||||||
branch: {name: 'master', type: 'release'},
|
branch: {name: 'master', type: 'release', tags: [{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}]},
|
||||||
nextRelease: {type: 'major'},
|
nextRelease: {type: 'major'},
|
||||||
lastRelease: {version: '1.0.0', channels: [undefined]},
|
lastRelease: {version: '1.0.0', channels: [null]},
|
||||||
logger: t.context.logger,
|
logger: t.context.logger,
|
||||||
}),
|
}),
|
||||||
'2.0.0'
|
'2.0.0'
|
||||||
@ -47,7 +47,7 @@ test('Increase version for major release', t => {
|
|||||||
test('Return 1.0.0 if there is no previous release', t => {
|
test('Return 1.0.0 if there is no previous release', t => {
|
||||||
t.is(
|
t.is(
|
||||||
getNextVersion({
|
getNextVersion({
|
||||||
branch: {name: 'master', type: 'release'},
|
branch: {name: 'master', type: 'release', tags: []},
|
||||||
nextRelease: {type: 'minor'},
|
nextRelease: {type: 'minor'},
|
||||||
lastRelease: {},
|
lastRelease: {},
|
||||||
logger: t.context.logger,
|
logger: t.context.logger,
|
||||||
@ -59,9 +59,14 @@ test('Return 1.0.0 if there is no previous release', t => {
|
|||||||
test('Increase version for patch release on prerelease branch', t => {
|
test('Increase version for patch release on prerelease branch', t => {
|
||||||
t.is(
|
t.is(
|
||||||
getNextVersion({
|
getNextVersion({
|
||||||
branch: {name: 'beta', type: 'prerelease', prerelease: 'beta'},
|
branch: {
|
||||||
nextRelease: {type: 'patch'},
|
name: 'beta',
|
||||||
lastRelease: {version: '1.0.0', channels: [undefined]},
|
type: 'prerelease',
|
||||||
|
prerelease: 'beta',
|
||||||
|
tags: [{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}],
|
||||||
|
},
|
||||||
|
nextRelease: {type: 'patch', channel: 'beta'},
|
||||||
|
lastRelease: {version: '1.0.0', channels: [null]},
|
||||||
logger: t.context.logger,
|
logger: t.context.logger,
|
||||||
}),
|
}),
|
||||||
'1.0.1-beta.1'
|
'1.0.1-beta.1'
|
||||||
@ -69,31 +74,49 @@ test('Increase version for patch release on prerelease branch', t => {
|
|||||||
|
|
||||||
t.is(
|
t.is(
|
||||||
getNextVersion({
|
getNextVersion({
|
||||||
branch: {name: 'beta', type: 'prerelease', prerelease: 'beta'},
|
branch: {
|
||||||
nextRelease: {type: 'patch'},
|
name: 'beta',
|
||||||
lastRelease: {version: '1.0.0-beta.1', channels: [undefined]},
|
type: 'prerelease',
|
||||||
|
prerelease: 'beta',
|
||||||
|
tags: [
|
||||||
|
{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]},
|
||||||
|
{gitTag: 'v1.0.1-beta.1', version: '1.0.1-beta.1', channels: ['beta']},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
nextRelease: {type: 'patch', channel: 'beta'},
|
||||||
|
lastRelease: {version: '1.0.1-beta.1', channels: ['beta']},
|
||||||
logger: t.context.logger,
|
logger: t.context.logger,
|
||||||
}),
|
}),
|
||||||
'1.0.0-beta.2'
|
'1.0.1-beta.2'
|
||||||
);
|
);
|
||||||
|
|
||||||
t.is(
|
t.is(
|
||||||
getNextVersion({
|
getNextVersion({
|
||||||
branch: {name: 'alpha', type: 'prerelease', prerelease: 'alpha'},
|
branch: {
|
||||||
|
name: 'alpha',
|
||||||
|
type: 'prerelease',
|
||||||
|
prerelease: 'alpha',
|
||||||
|
tags: [{gitTag: 'v1.0.1-beta.1', version: '1.0.1-beta.1', channels: ['beta']}],
|
||||||
|
},
|
||||||
nextRelease: {type: 'patch', channel: 'alpha'},
|
nextRelease: {type: 'patch', channel: 'alpha'},
|
||||||
lastRelease: {version: '1.0.0-beta.1', channels: ['beta']},
|
lastRelease: {version: '1.0.1-beta.1', channels: ['beta']},
|
||||||
logger: t.context.logger,
|
logger: t.context.logger,
|
||||||
}),
|
}),
|
||||||
'1.0.1-alpha.1'
|
'1.0.2-alpha.1'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Increase version for minor release on prerelease branch', t => {
|
test('Increase version for minor release on prerelease branch', t => {
|
||||||
t.is(
|
t.is(
|
||||||
getNextVersion({
|
getNextVersion({
|
||||||
branch: {name: 'beta', type: 'prerelease', prerelease: 'beta'},
|
branch: {
|
||||||
nextRelease: {type: 'minor'},
|
name: 'beta',
|
||||||
lastRelease: {version: '1.0.0', channels: [undefined]},
|
type: 'prerelease',
|
||||||
|
prerelease: 'beta',
|
||||||
|
tags: [{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}],
|
||||||
|
},
|
||||||
|
nextRelease: {type: 'minor', channel: 'beta'},
|
||||||
|
lastRelease: {version: '1.0.0', channels: [null]},
|
||||||
logger: t.context.logger,
|
logger: t.context.logger,
|
||||||
}),
|
}),
|
||||||
'1.1.0-beta.1'
|
'1.1.0-beta.1'
|
||||||
@ -101,31 +124,49 @@ test('Increase version for minor release on prerelease branch', t => {
|
|||||||
|
|
||||||
t.is(
|
t.is(
|
||||||
getNextVersion({
|
getNextVersion({
|
||||||
branch: {name: 'beta', type: 'prerelease', prerelease: 'beta'},
|
branch: {
|
||||||
nextRelease: {type: 'minor'},
|
name: 'beta',
|
||||||
lastRelease: {version: '1.0.0-beta.1', channels: [undefined]},
|
type: 'prerelease',
|
||||||
|
prerelease: 'beta',
|
||||||
|
tags: [
|
||||||
|
{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]},
|
||||||
|
{gitTag: 'v1.1.0-beta.1', version: '1.1.0-beta.1', channels: ['beta']},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
nextRelease: {type: 'minor', channel: 'beta'},
|
||||||
|
lastRelease: {version: '1.1.0-beta.1', channels: ['beta']},
|
||||||
logger: t.context.logger,
|
logger: t.context.logger,
|
||||||
}),
|
}),
|
||||||
'1.0.0-beta.2'
|
'1.1.0-beta.2'
|
||||||
);
|
);
|
||||||
|
|
||||||
t.is(
|
t.is(
|
||||||
getNextVersion({
|
getNextVersion({
|
||||||
branch: {name: 'alpha', type: 'prerelease', prerelease: 'alpha'},
|
branch: {
|
||||||
|
name: 'alpha',
|
||||||
|
type: 'prerelease',
|
||||||
|
prerelease: 'alpha',
|
||||||
|
tags: [{gitTag: 'v1.1.0-beta.1', version: '1.1.0-beta.1', channels: ['beta']}],
|
||||||
|
},
|
||||||
nextRelease: {type: 'minor', channel: 'alpha'},
|
nextRelease: {type: 'minor', channel: 'alpha'},
|
||||||
lastRelease: {version: '1.0.0-beta.1', channels: ['beta']},
|
lastRelease: {version: '1.1.0-beta.1', channels: ['beta']},
|
||||||
logger: t.context.logger,
|
logger: t.context.logger,
|
||||||
}),
|
}),
|
||||||
'1.1.0-alpha.1'
|
'1.2.0-alpha.1'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Increase version for major release on prerelease branch', t => {
|
test('Increase version for major release on prerelease branch', t => {
|
||||||
t.is(
|
t.is(
|
||||||
getNextVersion({
|
getNextVersion({
|
||||||
branch: {name: 'beta', type: 'prerelease', prerelease: 'beta'},
|
branch: {
|
||||||
nextRelease: {type: 'major'},
|
name: 'beta',
|
||||||
lastRelease: {version: '1.0.0', channels: [undefined]},
|
type: 'prerelease',
|
||||||
|
prerelease: 'beta',
|
||||||
|
tags: [{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}],
|
||||||
|
},
|
||||||
|
nextRelease: {type: 'major', channel: 'beta'},
|
||||||
|
lastRelease: {version: '1.0.0', channels: [null]},
|
||||||
logger: t.context.logger,
|
logger: t.context.logger,
|
||||||
}),
|
}),
|
||||||
'2.0.0-beta.1'
|
'2.0.0-beta.1'
|
||||||
@ -133,29 +174,42 @@ test('Increase version for major release on prerelease branch', t => {
|
|||||||
|
|
||||||
t.is(
|
t.is(
|
||||||
getNextVersion({
|
getNextVersion({
|
||||||
branch: {name: 'beta', type: 'prerelease', prerelease: 'beta'},
|
branch: {
|
||||||
nextRelease: {type: 'major'},
|
name: 'beta',
|
||||||
lastRelease: {version: '1.0.0-beta.1', channels: [undefined]},
|
type: 'prerelease',
|
||||||
|
prerelease: 'beta',
|
||||||
|
tags: [
|
||||||
|
{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]},
|
||||||
|
{gitTag: 'v2.0.0-beta.1', version: '2.0.0-beta.1', channels: ['beta']},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
nextRelease: {type: 'major', channel: 'beta'},
|
||||||
|
lastRelease: {version: '2.0.0-beta.1', channels: ['beta']},
|
||||||
logger: t.context.logger,
|
logger: t.context.logger,
|
||||||
}),
|
}),
|
||||||
'1.0.0-beta.2'
|
'2.0.0-beta.2'
|
||||||
);
|
);
|
||||||
|
|
||||||
t.is(
|
t.is(
|
||||||
getNextVersion({
|
getNextVersion({
|
||||||
branch: {name: 'alpha', type: 'prerelease', prerelease: 'alpha'},
|
branch: {
|
||||||
|
name: 'alpha',
|
||||||
|
type: 'prerelease',
|
||||||
|
prerelease: 'alpha',
|
||||||
|
tags: [{gitTag: 'v2.0.0-beta.1', version: '2.0.0-beta.1', channels: ['beta']}],
|
||||||
|
},
|
||||||
nextRelease: {type: 'major', channel: 'alpha'},
|
nextRelease: {type: 'major', channel: 'alpha'},
|
||||||
lastRelease: {version: '1.0.0-beta.1', channels: ['beta']},
|
lastRelease: {version: '2.0.0-beta.1', channels: ['beta']},
|
||||||
logger: t.context.logger,
|
logger: t.context.logger,
|
||||||
}),
|
}),
|
||||||
'2.0.0-alpha.1'
|
'3.0.0-alpha.1'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Return 1.0.0 if there is no previous release on prerelease branch', t => {
|
test('Return 1.0.0 if there is no previous release on prerelease branch', t => {
|
||||||
t.is(
|
t.is(
|
||||||
getNextVersion({
|
getNextVersion({
|
||||||
branch: {name: 'beta', type: 'prerelease', prerelease: 'beta'},
|
branch: {name: 'beta', type: 'prerelease', prerelease: 'beta', tags: []},
|
||||||
nextRelease: {type: 'minor'},
|
nextRelease: {type: 'minor'},
|
||||||
lastRelease: {},
|
lastRelease: {},
|
||||||
logger: t.context.logger,
|
logger: t.context.logger,
|
||||||
@ -163,3 +217,44 @@ test('Return 1.0.0 if there is no previous release on prerelease branch', t => {
|
|||||||
'1.0.0-beta.1'
|
'1.0.0-beta.1'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('Increase version for release on prerelease branch after previous commits were merged to release branch', t => {
|
||||||
|
t.is(
|
||||||
|
getNextVersion({
|
||||||
|
branch: {
|
||||||
|
name: 'beta',
|
||||||
|
type: 'prerelease',
|
||||||
|
prerelease: 'beta',
|
||||||
|
tags: [
|
||||||
|
{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]},
|
||||||
|
{gitTag: 'v1.1.0', version: '1.1.0', channels: [null]}, // Version v1.1.0 released on default branch after beta was merged into master
|
||||||
|
{gitTag: 'v1.1.0-beta.1', version: '1.1.0-beta.1', channels: [null, 'beta']},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
nextRelease: {type: 'minor'},
|
||||||
|
lastRelease: {version: '1.1.0', channels: [null]},
|
||||||
|
logger: t.context.logger,
|
||||||
|
}),
|
||||||
|
'1.2.0-beta.1'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Increase version for release on prerelease branch based on highest commit type since last regular release', t => {
|
||||||
|
t.is(
|
||||||
|
getNextVersion({
|
||||||
|
branch: {
|
||||||
|
name: 'beta',
|
||||||
|
type: 'prerelease',
|
||||||
|
prerelease: 'beta',
|
||||||
|
tags: [
|
||||||
|
{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]},
|
||||||
|
{gitTag: 'v1.1.0-beta.1', version: '1.1.0-beta.1', channels: [null, 'beta']},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
nextRelease: {type: 'major'},
|
||||||
|
lastRelease: {version: 'v1.1.0-beta.1', channels: [null]},
|
||||||
|
logger: t.context.logger,
|
||||||
|
}),
|
||||||
|
'2.0.0-beta.1'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user