feat: allow addChannel plugins to return false in order to signify no release was done

This commit is contained in:
Pierre Vanduynslager 2018-12-14 18:24:59 -05:00
parent aa48514f85
commit e1c7269cb3
2 changed files with 19 additions and 33 deletions

View File

@ -86,7 +86,7 @@ module.exports = {
transform: (release, step, {nextRelease}) => ({ transform: (release, step, {nextRelease}) => ({
...nextRelease, ...nextRelease,
...(release || {}), ...(release || {}),
...step, ...(release === false ? {} : step),
}), }),
}), }),
}, },

View File

@ -1139,30 +1139,23 @@ test('Allow local releases with "noCi" option', async t => {
t.is(success.callCount, 1); t.is(success.callCount, 1);
}); });
test('Accept "undefined" value returned by "generateNotes" and "false" by "publish"', async t => { test('Accept "undefined" value returned by "generateNotes" and "false" by "publish" and "addChannel"', async t => {
// Create a git repository, set the current working directory at the root of the repo
const {cwd, repositoryUrl} = await gitRepo(true); const {cwd, repositoryUrl} = await gitRepo(true);
// Add commits to the master branch await gitCommits(['First'], {cwd});
let commits = await gitCommits(['First'], {cwd});
// Create the tag corresponding to version 1.0.0
await gitTagVersion('v1.0.0', undefined, {cwd}); await gitTagVersion('v1.0.0', undefined, {cwd});
// Add new commits to the master branch await gitTagVersion('v1.0.0@next', undefined, {cwd});
commits = (await gitCommits(['Second'], {cwd})).concat(commits); await gitTagVersion('v1.1.0@next', undefined, {cwd});
await gitPush(repositoryUrl, 'master', {cwd}); await gitPush(repositoryUrl, 'master', {cwd});
await gitCheckout('next', true, {cwd});
await gitPush('origin', 'next', {cwd});
await gitCheckout('master', false, {cwd});
const lastRelease = {
name: 'v1.0.0',
version: '1.0.0',
gitHead: commits[commits.length - 1].hash,
gitTag: 'v1.0.0',
channel: undefined,
};
const nextRelease = { const nextRelease = {
name: 'v2.0.0', name: 'v1.2.0',
type: 'major', type: 'minor',
version: '2.0.0', version: '1.2.0',
gitHead: await getGitHead({cwd}), gitHead: await getGitHead({cwd}),
gitTag: 'v2.0.0', gitTag: 'v1.2.0',
channel: undefined, channel: undefined,
}; };
const analyzeCommits = stub().resolves(nextRelease.type); const analyzeCommits = stub().resolves(nextRelease.type);
@ -1171,15 +1164,16 @@ test('Accept "undefined" value returned by "generateNotes" and "false" by "publi
const notes2 = 'Release notes 2'; const notes2 = 'Release notes 2';
const generateNotes2 = stub().resolves(notes2); const generateNotes2 = stub().resolves(notes2);
const publish = stub().resolves(false); const publish = stub().resolves(false);
const addChannel = stub().resolves(false);
const options = { const options = {
branches: ['master'], branches: ['master', 'next'],
repositoryUrl, repositoryUrl,
verifyConditions: stub().resolves(), verifyConditions: stub().resolves(),
analyzeCommits, analyzeCommits,
verifyRelease, verifyRelease,
generateNotes: [generateNotes1, generateNotes2], generateNotes: [generateNotes1, generateNotes2],
addChannel: stub().resolves(), addChannel,
prepare: stub().resolves(), prepare: stub().resolves(),
publish, publish,
success: stub().resolves(), success: stub().resolves(),
@ -1200,20 +1194,12 @@ test('Accept "undefined" value returned by "generateNotes" and "false" by "publi
); );
t.is(analyzeCommits.callCount, 1); t.is(analyzeCommits.callCount, 1);
t.deepEqual(analyzeCommits.args[0][1].lastRelease, lastRelease);
t.is(verifyRelease.callCount, 1); t.is(verifyRelease.callCount, 1);
t.deepEqual(verifyRelease.args[0][1].lastRelease, lastRelease); t.is(generateNotes1.callCount, 2);
t.is(generateNotes2.callCount, 2);
t.is(generateNotes1.callCount, 1); t.is(addChannel.callCount, 1);
t.deepEqual(generateNotes1.args[0][1].lastRelease, lastRelease);
t.is(generateNotes2.callCount, 1);
t.deepEqual(generateNotes2.args[0][1].lastRelease, lastRelease);
t.is(publish.callCount, 1); t.is(publish.callCount, 1);
t.deepEqual(publish.args[0][1].lastRelease, lastRelease); t.deepEqual(publish.args[0][1].nextRelease, {...nextRelease, notes: notes2});
t.is(publish.args[0][1].nextRelease.notes, notes2);
}); });
test('Returns false if triggered by a PR', async t => { test('Returns false if triggered by a PR', async t => {