for #2543 BREAKING CHANGE: semantic-release is now ESM-only. since it is used through its own executable, the impact on consuming projects should be minimal BREAKING CHANGE: references to plugin files in configs need to include the file extension because of executing in an ESM context
278 lines
7.6 KiB
JavaScript
278 lines
7.6 KiB
JavaScript
import test from 'ava';
|
|
import {stub} from 'sinon';
|
|
import getNextVersion from '../lib/get-next-version.js';
|
|
|
|
test.beforeEach((t) => {
|
|
// Stub the logger functions
|
|
t.context.log = stub();
|
|
t.context.logger = {log: t.context.log};
|
|
});
|
|
|
|
test('Increase version for patch release', (t) => {
|
|
t.is(
|
|
getNextVersion({
|
|
branch: {name: 'master', type: 'release', tags: [{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}]},
|
|
nextRelease: {type: 'patch'},
|
|
lastRelease: {version: '1.0.0', channels: [null]},
|
|
logger: t.context.logger,
|
|
}),
|
|
'1.0.1'
|
|
);
|
|
});
|
|
|
|
test('Increase version for minor release', (t) => {
|
|
t.is(
|
|
getNextVersion({
|
|
branch: {name: 'master', type: 'release', tags: [{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}]},
|
|
nextRelease: {type: 'minor'},
|
|
lastRelease: {version: '1.0.0', channels: [null]},
|
|
logger: t.context.logger,
|
|
}),
|
|
'1.1.0'
|
|
);
|
|
});
|
|
|
|
test('Increase version for major release', (t) => {
|
|
t.is(
|
|
getNextVersion({
|
|
branch: {name: 'master', type: 'release', tags: [{gitTag: 'v1.0.0', version: '1.0.0', channels: [null]}]},
|
|
nextRelease: {type: 'major'},
|
|
lastRelease: {version: '1.0.0', channels: [null]},
|
|
logger: t.context.logger,
|
|
}),
|
|
'2.0.0'
|
|
);
|
|
});
|
|
|
|
test('Return 1.0.0 if there is no previous release', (t) => {
|
|
t.is(
|
|
getNextVersion({
|
|
branch: {name: 'master', type: 'release', tags: []},
|
|
nextRelease: {type: 'minor'},
|
|
lastRelease: {},
|
|
logger: t.context.logger,
|
|
}),
|
|
'1.0.0'
|
|
);
|
|
});
|
|
|
|
test('Increase version for patch release on prerelease branch', (t) => {
|
|
t.is(
|
|
getNextVersion({
|
|
branch: {
|
|
name: 'beta',
|
|
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,
|
|
}),
|
|
'1.0.1-beta.1'
|
|
);
|
|
|
|
t.is(
|
|
getNextVersion({
|
|
branch: {
|
|
name: 'beta',
|
|
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,
|
|
}),
|
|
'1.0.1-beta.2'
|
|
);
|
|
|
|
t.is(
|
|
getNextVersion({
|
|
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'},
|
|
lastRelease: {version: '1.0.1-beta.1', channels: ['beta']},
|
|
logger: t.context.logger,
|
|
}),
|
|
'1.0.2-alpha.1'
|
|
);
|
|
});
|
|
|
|
test('Increase version for minor release on prerelease branch', (t) => {
|
|
t.is(
|
|
getNextVersion({
|
|
branch: {
|
|
name: 'beta',
|
|
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,
|
|
}),
|
|
'1.1.0-beta.1'
|
|
);
|
|
|
|
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: ['beta']},
|
|
],
|
|
},
|
|
nextRelease: {type: 'minor', channel: 'beta'},
|
|
lastRelease: {version: '1.1.0-beta.1', channels: ['beta']},
|
|
logger: t.context.logger,
|
|
}),
|
|
'1.1.0-beta.2'
|
|
);
|
|
|
|
t.is(
|
|
getNextVersion({
|
|
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'},
|
|
lastRelease: {version: '1.1.0-beta.1', channels: ['beta']},
|
|
logger: t.context.logger,
|
|
}),
|
|
'1.2.0-alpha.1'
|
|
);
|
|
});
|
|
|
|
test('Increase version for major release on prerelease branch', (t) => {
|
|
t.is(
|
|
getNextVersion({
|
|
branch: {
|
|
name: 'beta',
|
|
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,
|
|
}),
|
|
'2.0.0-beta.1'
|
|
);
|
|
|
|
t.is(
|
|
getNextVersion({
|
|
branch: {
|
|
name: 'beta',
|
|
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,
|
|
}),
|
|
'2.0.0-beta.2'
|
|
);
|
|
|
|
t.is(
|
|
getNextVersion({
|
|
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'},
|
|
lastRelease: {version: '2.0.0-beta.1', channels: ['beta']},
|
|
logger: t.context.logger,
|
|
}),
|
|
'3.0.0-alpha.1'
|
|
);
|
|
});
|
|
|
|
test('Return 1.0.0 if there is no previous release on prerelease branch', (t) => {
|
|
t.is(
|
|
getNextVersion({
|
|
branch: {name: 'beta', type: 'prerelease', prerelease: 'beta', tags: []},
|
|
nextRelease: {type: 'minor'},
|
|
lastRelease: {},
|
|
logger: t.context.logger,
|
|
}),
|
|
'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'
|
|
);
|
|
});
|
|
|
|
test('Increase version for release on prerelease branch when there is no regular releases on other branches', (t) => {
|
|
t.is(
|
|
getNextVersion({
|
|
branch: {
|
|
name: 'beta',
|
|
type: 'prerelease',
|
|
prerelease: 'beta',
|
|
tags: [{gitTag: 'v1.0.0-beta.1', version: '1.0.0-beta.1', channels: ['beta']}],
|
|
},
|
|
nextRelease: {type: 'minor', channel: 'beta'},
|
|
lastRelease: {version: 'v1.0.0-beta.1', channels: ['beta']},
|
|
logger: t.context.logger,
|
|
}),
|
|
'1.0.0-beta.2'
|
|
);
|
|
});
|