fix: do not call addChannel
for 2 merged branches configured with the same channel
This commit is contained in:
parent
390e966341
commit
4aad9cd490
@ -20,12 +20,12 @@ The type of the branch is automatically determined based on naming convention an
|
|||||||
|
|
||||||
## Branches properties
|
## Branches properties
|
||||||
|
|
||||||
| Property | Branch type | Description | Default |
|
| Property | Branch type | Description | Default |
|
||||||
|--------------|-------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------|
|
|--------------|-------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------|
|
||||||
| `name` | All | **Required.** The Git branch holding the commits to analyze and the code to release. See [name](#name). | - The value itself if defined as a `String` or the matching branches name if defined as a glob. |
|
| `name` | All | **Required.** The Git branch holding the commits to analyze and the code to release. See [name](#name). | - The value itself if defined as a `String` or the matching branches name if defined as a glob. |
|
||||||
| `channel` | All | The distribution channel on which to publish releases from this branch. See [channel](#channel). | `undefined` for the first release branch, the value of `name` for subsequent ones. |
|
| `channel` | All | The distribution channel on which to publish releases from this branch. Set to `false` to force the default distribution channel instead of using the default. See [channel](#channel). | `undefined` for the first release branch, the value of `name` for subsequent ones. |
|
||||||
| `range` | [maintenance](#maintenance-branches) only | **Required unless `name` is formatted like `N.N.x` or `N.x` (`N` is a number).** The range of [semantic versions](https://semver.org) to support on this branch. See [range](#range). | The value of `name`. |
|
| `range` | [maintenance](#maintenance-branches) only | **Required unless `name` is formatted like `N.N.x` or `N.x` (`N` is a number).** The range of [semantic versions](https://semver.org) to support on this branch. See [range](#range). | The value of `name`. |
|
||||||
| `prerelease` | [pre-release](#pre-release-branches) only | **Required.** The pre-release detonation to append to [semantic versions](https://semver.org) released from this branch. See [prerelease](#prerelease). | - |
|
| `prerelease` | [pre-release](#pre-release-branches) only | **Required.** The pre-release detonation to append to [semantic versions](https://semver.org) released from this branch. See [prerelease](#prerelease). | - |
|
||||||
|
|
||||||
### name
|
### name
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
const {sortBy} = require('lodash');
|
const {sortBy, isNil} = require('lodash');
|
||||||
const semver = require('semver');
|
const semver = require('semver');
|
||||||
const semverDiff = require('semver-diff');
|
const semverDiff = require('semver-diff');
|
||||||
const {FIRST_RELEASE, RELEASE_TYPE} = require('../definitions/constants');
|
const {FIRST_RELEASE, RELEASE_TYPE} = require('../definitions/constants');
|
||||||
@ -20,7 +20,7 @@ function maintenance({maintenance, release}) {
|
|||||||
...rest,
|
...rest,
|
||||||
name,
|
name,
|
||||||
range: range || name,
|
range: range || name,
|
||||||
channel: channel || name,
|
channel: isNil(channel) ? name : channel,
|
||||||
})),
|
})),
|
||||||
'range'
|
'range'
|
||||||
).map(({name, range, tags, ...rest}, idx, branches) => {
|
).map(({name, range, tags, ...rest}, idx, branches) => {
|
||||||
@ -83,7 +83,7 @@ function release({release}) {
|
|||||||
const diff = bound ? semverDiff(min, bound) : null;
|
const diff = bound ? semverDiff(min, bound) : null;
|
||||||
return {
|
return {
|
||||||
...rest,
|
...rest,
|
||||||
channel: idx === 0 ? channel : channel || name,
|
channel: idx === 0 ? channel : isNil(channel) ? name : channel,
|
||||||
tags,
|
tags,
|
||||||
type: 'release',
|
type: 'release',
|
||||||
name,
|
name,
|
||||||
@ -98,7 +98,7 @@ function prerelease({prerelease}) {
|
|||||||
const preid = prerelease === true ? name : prerelease;
|
const preid = prerelease === true ? name : prerelease;
|
||||||
return {
|
return {
|
||||||
...rest,
|
...rest,
|
||||||
channel: channel || name,
|
channel: isNil(channel) ? name : channel,
|
||||||
type: 'prerelease',
|
type: 'prerelease',
|
||||||
name,
|
name,
|
||||||
prerelease: preid,
|
prerelease: preid,
|
||||||
|
@ -33,6 +33,7 @@ module.exports = context => {
|
|||||||
branch.tags.filter(
|
branch.tags.filter(
|
||||||
({channel, version}) =>
|
({channel, version}) =>
|
||||||
channel === higherBranch.channel &&
|
channel === higherBranch.channel &&
|
||||||
|
channel !== branch.channel &&
|
||||||
(branch.type !== 'maintenance' || semver.gte(version, getLowerBound(branch['merge-range'])))
|
(branch.type !== 'maintenance' || semver.gte(version, getLowerBound(branch['merge-range'])))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -4,7 +4,7 @@ import normalize from '../../lib/branches/normalize';
|
|||||||
const toTags = versions => versions.map(version => ({version}));
|
const toTags = versions => versions.map(version => ({version}));
|
||||||
|
|
||||||
test('Maintenance branches - initial state', t => {
|
test('Maintenance branches - initial state', t => {
|
||||||
const maintenance = [{name: '1.x', tags: []}, {name: '1.1.x', tags: []}, {name: '1.2.x', tags: []}];
|
const maintenance = [{name: '1.x', channel: '1.x', tags: []}, {name: '1.1.x', tags: []}, {name: '1.2.x', tags: []}];
|
||||||
const release = [{name: 'master', tags: []}];
|
const release = [{name: 'master', tags: []}];
|
||||||
t.deepEqual(
|
t.deepEqual(
|
||||||
normalize
|
normalize
|
||||||
@ -148,7 +148,11 @@ test('Maintenance branches - cap range to default branch last release if all rel
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('Release branches - initial state', t => {
|
test('Release branches - initial state', t => {
|
||||||
const release = [{name: 'master', tags: []}, {name: 'next', tags: []}, {name: 'next-major', tags: []}];
|
const release = [
|
||||||
|
{name: 'master', tags: []},
|
||||||
|
{name: 'next', channel: 'next', tags: []},
|
||||||
|
{name: 'next-major', tags: []},
|
||||||
|
];
|
||||||
|
|
||||||
t.deepEqual(
|
t.deepEqual(
|
||||||
normalize.release({release}).map(({type, name, range, accept, channel}) => ({type, name, range, accept, channel})),
|
normalize.release({release}).map(({type, name, range, accept, channel}) => ({type, name, range, accept, channel})),
|
||||||
@ -298,10 +302,29 @@ test('Release branches - limit releases on 2nd and 3rd branche based on 1st bran
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('Prerelease branches', t => {
|
test('Prerelease branches', t => {
|
||||||
const prerelease = [{name: 'beta', prerelease: true, tags: []}, {name: 'alpha', prerelease: 'preview', tags: []}];
|
const prerelease = [
|
||||||
|
{name: 'beta', channel: 'beta', prerelease: true, tags: []},
|
||||||
|
{name: 'alpha', prerelease: 'preview', tags: []},
|
||||||
|
];
|
||||||
|
|
||||||
t.deepEqual(normalize.prerelease({prerelease}).map(({type, name, channel}) => ({type, name, channel})), [
|
t.deepEqual(normalize.prerelease({prerelease}).map(({type, name, channel}) => ({type, name, channel})), [
|
||||||
{type: 'prerelease', name: 'beta', channel: 'beta'},
|
{type: 'prerelease', name: 'beta', channel: 'beta'},
|
||||||
{type: 'prerelease', name: 'alpha', channel: 'alpha'},
|
{type: 'prerelease', name: 'alpha', channel: 'alpha'},
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('Allow to set channel to "false" to prevent default', t => {
|
||||||
|
const maintenance = [{name: '1.x', channel: false, tags: []}];
|
||||||
|
const release = [{name: 'master', channel: false, tags: []}, {name: 'next', channel: false, tags: []}];
|
||||||
|
const prerelease = [{name: 'beta', channel: false, prerelease: true, tags: []}];
|
||||||
|
t.deepEqual(normalize.maintenance({maintenance, release}).map(({name, channel}) => ({name, channel})), [
|
||||||
|
{name: '1.x', channel: false},
|
||||||
|
]);
|
||||||
|
t.deepEqual(normalize.release({release}).map(({name, channel}) => ({name, channel})), [
|
||||||
|
{name: 'master', channel: false},
|
||||||
|
{name: 'next', channel: false},
|
||||||
|
]);
|
||||||
|
t.deepEqual(normalize.prerelease({prerelease}).map(({name, channel}) => ({name, channel})), [
|
||||||
|
{name: 'beta', channel: false},
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
@ -63,7 +63,7 @@ test('Return versions merged from release to maintenance branch, excluding lower
|
|||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Return versions merged from future branch to release branch', t => {
|
test('Return versions merged between release branches', t => {
|
||||||
const result = getReleasesToAdd({
|
const result = getReleasesToAdd({
|
||||||
branch: {
|
branch: {
|
||||||
name: 'master',
|
name: 'master',
|
||||||
@ -177,7 +177,7 @@ test('Return releases sorted by ascending order', t => {
|
|||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('no lastRelease', t => {
|
test('No lastRelease', t => {
|
||||||
const result = getReleasesToAdd({
|
const result = getReleasesToAdd({
|
||||||
branch: {name: 'master', tags: [{gitTag: 'v1.0.0@next', version: '1.0.0', channel: 'next', gitHead: '111'}]},
|
branch: {name: 'master', tags: [{gitTag: 'v1.0.0@next', version: '1.0.0', channel: 'next', gitHead: '111'}]},
|
||||||
branches: [{name: 'master'}, {name: 'next', channel: 'next'}],
|
branches: [{name: 'master'}, {name: 'next', channel: 'next'}],
|
||||||
@ -248,3 +248,66 @@ test('Ignore pre-release versions', t => {
|
|||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('Exclude versions merged from release to maintenance branch if they have the same "channel"', t => {
|
||||||
|
const result = getReleasesToAdd({
|
||||||
|
branch: {
|
||||||
|
name: '2.x',
|
||||||
|
channel: 'latest',
|
||||||
|
type: 'maintenance',
|
||||||
|
'merge-range': '>=2.0.0 <3.0.0',
|
||||||
|
tags: [
|
||||||
|
{gitTag: 'v2.0.0', version: '2.0.0', gitHead: '111'},
|
||||||
|
{gitTag: 'v2.0.0', version: '2.0.0', gitHead: '111'},
|
||||||
|
{gitTag: 'v2.1.0', version: '2.1.0', gitHead: '222'},
|
||||||
|
{gitTag: 'v2.1.1', version: '2.1.1', gitHead: '333'},
|
||||||
|
{gitTag: 'v1.0.0', version: '1.0.0', gitHead: '444'},
|
||||||
|
{gitTag: 'v1.1.0', version: '1.1.0', gitHead: '555'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
branches: [{name: '2.x', channel: 'latest'}, {name: 'master', channel: 'latest'}],
|
||||||
|
options: {tagFormat: `v\${version}`},
|
||||||
|
});
|
||||||
|
|
||||||
|
t.deepEqual(result, []);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Exclude versions merged between release branches if they have the same "channel"', t => {
|
||||||
|
const result = getReleasesToAdd({
|
||||||
|
branch: {
|
||||||
|
name: 'master',
|
||||||
|
channel: 'latest',
|
||||||
|
tags: [
|
||||||
|
{gitTag: 'v1.0.0', channel: 'latest', version: '1.0.0', gitHead: '111'},
|
||||||
|
{gitTag: 'v1.1.0', channel: 'latest', version: '1.1.0', gitHead: '222'},
|
||||||
|
{gitTag: 'v2.0.0', channel: 'latest', version: '2.0.0', gitHead: '333'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
branches: [
|
||||||
|
{name: 'master', channel: 'latest'},
|
||||||
|
{name: 'next', channel: 'latest'},
|
||||||
|
{name: 'next-major', channel: 'latest'},
|
||||||
|
],
|
||||||
|
options: {tagFormat: `v\${version}`},
|
||||||
|
});
|
||||||
|
|
||||||
|
t.deepEqual(result, []);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Exclude versions merged between release branches if they all have "channel" set to "false"', t => {
|
||||||
|
const result = getReleasesToAdd({
|
||||||
|
branch: {
|
||||||
|
name: 'master',
|
||||||
|
channel: false,
|
||||||
|
tags: [
|
||||||
|
{gitTag: 'v1.0.0', version: '1.0.0', gitHead: '111'},
|
||||||
|
{gitTag: 'v1.1.0', version: '1.1.0', gitHead: '222'},
|
||||||
|
{gitTag: 'v2.0.0', version: '2.0.0', gitHead: '333'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
branches: [{name: 'master', channel: false}, {name: 'next', channel: false}, {name: 'next-major', channel: false}],
|
||||||
|
options: {tagFormat: `v\${version}`},
|
||||||
|
});
|
||||||
|
|
||||||
|
t.deepEqual(result, []);
|
||||||
|
});
|
||||||
|
@ -173,6 +173,8 @@ test('getRange', t => {
|
|||||||
|
|
||||||
test('makeTag', t => {
|
test('makeTag', t => {
|
||||||
t.is(makeTag(`v\${version}`, '1.0.0'), 'v1.0.0');
|
t.is(makeTag(`v\${version}`, '1.0.0'), 'v1.0.0');
|
||||||
|
t.is(makeTag(`v\${version}`, '1.0.0', false), 'v1.0.0');
|
||||||
|
t.is(makeTag(`v\${version}`, '1.0.0', null), 'v1.0.0');
|
||||||
t.is(makeTag(`v\${version}`, '1.0.0', 'next'), 'v1.0.0@next');
|
t.is(makeTag(`v\${version}`, '1.0.0', 'next'), 'v1.0.0@next');
|
||||||
t.is(makeTag(`v\${version}@test`, '1.0.0', 'next'), 'v1.0.0@next@test');
|
t.is(makeTag(`v\${version}@test`, '1.0.0', 'next'), 'v1.0.0@next@test');
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user