- Allow to configure multiple branches to release from - Allow to define a distribution channel associated with each branch - Manage the availability on distribution channels based on git merges - Support regular releases, maintenance releases and pre-releases - Add the `addChannel` plugin step to make an existing release available on a different distribution channel BREAKING CHANGE: the `branch` option has been removed in favor of `branches` The new `branches` option expect either an Array or a single branch definition. To migrate your configuration: - If you want to publish package from multiple branches, please the configuration documentation - If you use the default configuration and want to publish only from `master`: nothing to change - If you use the `branch` configuration and want to publish only from one branch: replace `branch` by `branches` (`"branch": "my-release-branch"` => `"branches": "my-release-branch"`)
259 lines
7.1 KiB
JavaScript
259 lines
7.1 KiB
JavaScript
import test from 'ava';
|
|
import {stub} from 'sinon';
|
|
import getReleasesToAdd from '../lib/get-releases-to-add';
|
|
|
|
test.beforeEach(t => {
|
|
// Stub the logger functions
|
|
t.context.log = stub();
|
|
t.context.logger = {log: t.context.log};
|
|
});
|
|
|
|
test('Return versions merged from release to maintenance branch', t => {
|
|
const result = getReleasesToAdd({
|
|
branch: {
|
|
name: '1.x',
|
|
channel: '1.x',
|
|
tags: [
|
|
{gitTag: 'v1.0.0@1.x', version: '1.0.0', channel: '1.x', gitHead: '111'},
|
|
{gitTag: 'v1.0.0', version: '1.0.0', gitHead: '111'},
|
|
{gitTag: 'v1.1.0', version: '1.1.0', gitHead: '222'},
|
|
{gitTag: 'v1.1.1', version: '1.1.1', gitHead: '333'},
|
|
],
|
|
},
|
|
branches: [{name: '1.x', channel: '1.x'}, {name: 'master'}],
|
|
options: {tagFormat: `v\${version}`},
|
|
logger: t.context.logger,
|
|
});
|
|
|
|
t.deepEqual(result, [
|
|
{
|
|
lastRelease: {version: '1.0.0', channel: '1.x', gitTag: 'v1.0.0@1.x', name: 'v1.0.0', gitHead: '111'},
|
|
currentRelease: {
|
|
type: 'minor',
|
|
version: '1.1.0',
|
|
channel: undefined,
|
|
gitTag: 'v1.1.0',
|
|
name: 'v1.1.0',
|
|
gitHead: '222',
|
|
},
|
|
nextRelease: {
|
|
type: 'minor',
|
|
version: '1.1.0',
|
|
channel: '1.x',
|
|
gitTag: 'v1.1.0@1.x',
|
|
name: 'v1.1.0',
|
|
gitHead: '222',
|
|
},
|
|
},
|
|
{
|
|
lastRelease: {version: '1.1.0', channel: undefined, gitTag: 'v1.1.0', name: 'v1.1.0', gitHead: '222'},
|
|
currentRelease: {
|
|
type: 'patch',
|
|
version: '1.1.1',
|
|
channel: undefined,
|
|
gitTag: 'v1.1.1',
|
|
name: 'v1.1.1',
|
|
gitHead: '333',
|
|
},
|
|
nextRelease: {
|
|
type: 'patch',
|
|
version: '1.1.1',
|
|
channel: '1.x',
|
|
gitTag: 'v1.1.1@1.x',
|
|
name: 'v1.1.1',
|
|
gitHead: '333',
|
|
},
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('Return versions merged from future branch to release branch', t => {
|
|
const result = getReleasesToAdd({
|
|
branch: {
|
|
name: 'master',
|
|
tags: [
|
|
{gitTag: 'v1.0.0', version: '1.0.0', gitHead: '111'},
|
|
{gitTag: 'v1.0.0@next', version: '1.0.0', channel: 'next', gitHead: '111'},
|
|
{gitTag: 'v1.1.0@next', version: '1.1.0', channel: 'next', gitHead: '222'},
|
|
{gitTag: 'v2.0.0@next-major', version: '2.0.0', channel: 'next-major', gitHead: '333'},
|
|
],
|
|
},
|
|
branches: [{name: 'master'}, {name: 'next', channel: 'next'}, {name: 'next-major', channel: 'next-major'}],
|
|
options: {tagFormat: `v\${version}`},
|
|
logger: t.context.logger,
|
|
});
|
|
|
|
t.deepEqual(result, [
|
|
{
|
|
lastRelease: {version: '1.0.0', channel: undefined, gitTag: 'v1.0.0', name: 'v1.0.0', gitHead: '111'},
|
|
currentRelease: {
|
|
type: 'minor',
|
|
version: '1.1.0',
|
|
channel: 'next',
|
|
gitTag: 'v1.1.0@next',
|
|
name: 'v1.1.0',
|
|
gitHead: '222',
|
|
},
|
|
nextRelease: {
|
|
type: 'minor',
|
|
version: '1.1.0',
|
|
channel: undefined,
|
|
gitTag: 'v1.1.0',
|
|
name: 'v1.1.0',
|
|
gitHead: '222',
|
|
},
|
|
},
|
|
{
|
|
lastRelease: {version: '1.1.0', gitTag: 'v1.1.0@next', name: 'v1.1.0', gitHead: '222', channel: 'next'},
|
|
currentRelease: {
|
|
type: 'major',
|
|
version: '2.0.0',
|
|
channel: 'next-major',
|
|
gitTag: 'v2.0.0@next-major',
|
|
name: 'v2.0.0',
|
|
gitHead: '333',
|
|
},
|
|
nextRelease: {
|
|
type: 'major',
|
|
version: '2.0.0',
|
|
channel: undefined,
|
|
gitTag: 'v2.0.0',
|
|
name: 'v2.0.0',
|
|
gitHead: '333',
|
|
},
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('Return releases sorted by ascending order', t => {
|
|
const result = getReleasesToAdd({
|
|
branch: {
|
|
name: 'master',
|
|
tags: [
|
|
{gitTag: 'v2.0.0@next-major', version: '2.0.0', channel: 'next-major', gitHead: '333'},
|
|
{gitTag: 'v1.1.0@next', version: '1.1.0', channel: 'next', gitHead: '222'},
|
|
{gitTag: 'v1.0.0', version: '1.0.0', gitHead: '111'},
|
|
{gitTag: 'v1.0.0@next', version: '1.0.0', channel: 'next', gitHead: '111'},
|
|
],
|
|
},
|
|
branches: [{name: 'master'}, {name: 'next', channel: 'next'}, {name: 'next-major', channel: 'next-major'}],
|
|
options: {tagFormat: `v\${version}`},
|
|
logger: t.context.logger,
|
|
});
|
|
|
|
t.deepEqual(result, [
|
|
{
|
|
lastRelease: {version: '1.0.0', channel: undefined, gitTag: 'v1.0.0', name: 'v1.0.0', gitHead: '111'},
|
|
currentRelease: {
|
|
type: 'minor',
|
|
version: '1.1.0',
|
|
channel: 'next',
|
|
gitTag: 'v1.1.0@next',
|
|
name: 'v1.1.0',
|
|
gitHead: '222',
|
|
},
|
|
nextRelease: {
|
|
type: 'minor',
|
|
version: '1.1.0',
|
|
channel: undefined,
|
|
gitTag: 'v1.1.0',
|
|
name: 'v1.1.0',
|
|
gitHead: '222',
|
|
},
|
|
},
|
|
{
|
|
lastRelease: {version: '1.1.0', gitTag: 'v1.1.0@next', name: 'v1.1.0', gitHead: '222', channel: 'next'},
|
|
currentRelease: {
|
|
type: 'major',
|
|
version: '2.0.0',
|
|
channel: 'next-major',
|
|
gitTag: 'v2.0.0@next-major',
|
|
name: 'v2.0.0',
|
|
gitHead: '333',
|
|
},
|
|
nextRelease: {
|
|
type: 'major',
|
|
version: '2.0.0',
|
|
channel: undefined,
|
|
gitTag: 'v2.0.0',
|
|
name: 'v2.0.0',
|
|
gitHead: '333',
|
|
},
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('no lastRelease', t => {
|
|
const result = getReleasesToAdd({
|
|
branch: {name: 'master', tags: [{gitTag: 'v1.0.0@next', version: '1.0.0', channel: 'next', gitHead: '111'}]},
|
|
branches: [{name: 'master'}, {name: 'next', channel: 'next'}],
|
|
options: {tagFormat: `v\${version}`},
|
|
logger: t.context.logger,
|
|
});
|
|
|
|
t.deepEqual(result, [
|
|
{
|
|
lastRelease: {},
|
|
currentRelease: {
|
|
type: 'major',
|
|
version: '1.0.0',
|
|
channel: 'next',
|
|
gitTag: 'v1.0.0@next',
|
|
name: 'v1.0.0',
|
|
gitHead: '111',
|
|
},
|
|
nextRelease: {
|
|
type: 'major',
|
|
version: '1.0.0',
|
|
channel: undefined,
|
|
gitTag: 'v1.0.0',
|
|
name: 'v1.0.0',
|
|
gitHead: '111',
|
|
},
|
|
},
|
|
]);
|
|
});
|
|
|
|
test('Ignore pre-release versions', t => {
|
|
const result = getReleasesToAdd({
|
|
branch: {
|
|
name: 'master',
|
|
tags: [
|
|
{gitTag: 'v1.0.0', version: '1.0.0', gitHead: '111'},
|
|
{gitTag: 'v1.0.0@next', version: '1.0.0', channel: 'next', gitHead: '111'},
|
|
{gitTag: 'v1.1.0@next', version: '1.1.0', channel: 'next', gitHead: '222'},
|
|
{gitTag: 'v2.0.0-alpha.1@alpha', version: '2.0.0', channel: 'alpha', gitHead: '333'},
|
|
],
|
|
},
|
|
branches: [
|
|
{name: 'master'},
|
|
{name: 'next', channel: 'next'},
|
|
{name: 'alpha', type: 'prerelease', channel: 'alpha'},
|
|
],
|
|
options: {tagFormat: `v\${version}`},
|
|
logger: t.context.logger,
|
|
});
|
|
|
|
t.deepEqual(result, [
|
|
{
|
|
lastRelease: {version: '1.0.0', channel: undefined, gitTag: 'v1.0.0', name: 'v1.0.0', gitHead: '111'},
|
|
currentRelease: {
|
|
type: 'minor',
|
|
version: '1.1.0',
|
|
channel: 'next',
|
|
gitTag: 'v1.1.0@next',
|
|
name: 'v1.1.0',
|
|
gitHead: '222',
|
|
},
|
|
nextRelease: {
|
|
type: 'minor',
|
|
version: '1.1.0',
|
|
channel: undefined,
|
|
gitTag: 'v1.1.0',
|
|
name: 'v1.1.0',
|
|
gitHead: '222',
|
|
},
|
|
},
|
|
]);
|
|
});
|