fix: Accept undefined
values for the getLastRelease
and generateNotes
plugins
Adapt tests and default value to the plugin definitions (`definitions.js`)
This commit is contained in:
parent
a7359bffb6
commit
d7b323dd00
@ -18,6 +18,7 @@ const getVersionHead = require('./get-version-head');
|
|||||||
* @typedef {Object} LastRelease
|
* @typedef {Object} LastRelease
|
||||||
* @property {string} version The version number of the last release.
|
* @property {string} version The version number of the last release.
|
||||||
* @property {string} [gitHead] The commit sha used to make the last release.
|
* @property {string} [gitHead] The commit sha used to make the last release.
|
||||||
|
* @property {string} [gitTag] The tag used to make the last release.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -45,7 +46,7 @@ const getVersionHead = require('./get-version-head');
|
|||||||
* @throws {SemanticReleaseError} with code `ENOTINHISTORY` if `lastRelease.gitHead` or the commit sha derived from `config.lastRelease.version` is not in the direct history of `branch`.
|
* @throws {SemanticReleaseError} with code `ENOTINHISTORY` if `lastRelease.gitHead` or the commit sha derived from `config.lastRelease.version` is not in the direct history of `branch`.
|
||||||
* @throws {SemanticReleaseError} with code `ENOGITHEAD` if `lastRelease.gitHead` is undefined and no commit sha can be found for the `config.lastRelease.version`.
|
* @throws {SemanticReleaseError} with code `ENOGITHEAD` if `lastRelease.gitHead` is undefined and no commit sha can be found for the `config.lastRelease.version`.
|
||||||
*/
|
*/
|
||||||
module.exports = async ({version, gitHead}, branch, logger) => {
|
module.exports = async ({version, gitHead} = {}, branch, logger) => {
|
||||||
let gitTag;
|
let gitTag;
|
||||||
if (gitHead || version) {
|
if (gitHead || version) {
|
||||||
try {
|
try {
|
||||||
|
@ -57,8 +57,8 @@ module.exports = {
|
|||||||
'The "generateNotes" plugin, if defined, must be a single plugin definition. A plugin definition is either a string or an object with a path property.',
|
'The "generateNotes" plugin, if defined, must be a single plugin definition. A plugin definition is either a string or an object with a path property.',
|
||||||
},
|
},
|
||||||
output: {
|
output: {
|
||||||
validator: output => isString(output),
|
validator: output => !output || isString(output),
|
||||||
message: 'The "generateNotes" plugin output must be a string.',
|
message: 'The "generateNotes" plugin output, if defined, must be a string.',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
publish: {
|
publish: {
|
||||||
|
@ -193,6 +193,54 @@ test.serial('Dry-run skips verifyConditions and publish', async t => {
|
|||||||
t.true(publish.notCalled);
|
t.true(publish.notCalled);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test.serial('Accept "undefined" values for the "getLastRelease" and "generateNotes" plugins', async t => {
|
||||||
|
// Create a git repository, set the current working directory at the root of the repo
|
||||||
|
await gitRepo();
|
||||||
|
// Add commits to the master branch
|
||||||
|
await gitCommits(['First']);
|
||||||
|
// Create the tag corresponding to version 1.0.0
|
||||||
|
await gitTagVersion('v1.0.0');
|
||||||
|
// Add new commits to the master branch
|
||||||
|
await gitCommits(['Second']);
|
||||||
|
|
||||||
|
const lastRelease = {gitHead: undefined, gitTag: undefined, version: undefined};
|
||||||
|
const nextRelease = {type: 'major', version: '2.0.0', gitHead: await getGitHead(), gitTag: 'v2.0.0'};
|
||||||
|
const verifyConditions = stub().resolves();
|
||||||
|
const getLastRelease = stub().resolves();
|
||||||
|
const analyzeCommits = stub().resolves(nextRelease.type);
|
||||||
|
const verifyRelease = stub().resolves();
|
||||||
|
const generateNotes = stub().resolves();
|
||||||
|
const publish = stub().resolves();
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
branch: 'master',
|
||||||
|
repositoryUrl: 'git@hostname.com:owner/module.git',
|
||||||
|
verifyConditions: [verifyConditions],
|
||||||
|
getLastRelease,
|
||||||
|
analyzeCommits,
|
||||||
|
verifyRelease,
|
||||||
|
generateNotes,
|
||||||
|
publish,
|
||||||
|
};
|
||||||
|
|
||||||
|
await t.context.semanticRelease(options);
|
||||||
|
|
||||||
|
t.true(getLastRelease.calledOnce);
|
||||||
|
|
||||||
|
t.true(analyzeCommits.calledOnce);
|
||||||
|
t.deepEqual(analyzeCommits.firstCall.args[1].lastRelease, lastRelease);
|
||||||
|
|
||||||
|
t.true(verifyRelease.calledOnce);
|
||||||
|
t.deepEqual(verifyRelease.firstCall.args[1].lastRelease, lastRelease);
|
||||||
|
|
||||||
|
t.true(generateNotes.calledOnce);
|
||||||
|
t.deepEqual(generateNotes.firstCall.args[1].lastRelease, lastRelease);
|
||||||
|
|
||||||
|
t.true(publish.calledOnce);
|
||||||
|
t.deepEqual(publish.firstCall.args[1].lastRelease, lastRelease);
|
||||||
|
t.falsy(publish.firstCall.args[1].nextRelease.notes);
|
||||||
|
});
|
||||||
|
|
||||||
test.serial('Throw SemanticReleaseError if not running from a git repository', async t => {
|
test.serial('Throw SemanticReleaseError if not running from a git repository', async t => {
|
||||||
// Set the current working directory to a temp directory
|
// Set the current working directory to a temp directory
|
||||||
process.chdir(tempy.directory());
|
process.chdir(tempy.directory());
|
||||||
|
@ -89,12 +89,12 @@ test('The "analyzeCommits" plugin output must be either undefined or a valid sem
|
|||||||
t.true(definitions.analyzeCommits.output.validator('major'));
|
t.true(definitions.analyzeCommits.output.validator('major'));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('The "generateNotes" plugin output must be a string', t => {
|
test('The "generateNotes" plugin output, if defined, must be a string', t => {
|
||||||
t.false(definitions.generateNotes.output.validator());
|
|
||||||
t.false(definitions.generateNotes.output.validator(null));
|
|
||||||
t.false(definitions.generateNotes.output.validator(1));
|
t.false(definitions.generateNotes.output.validator(1));
|
||||||
t.false(definitions.generateNotes.output.validator({}));
|
t.false(definitions.generateNotes.output.validator({}));
|
||||||
|
|
||||||
|
t.true(definitions.generateNotes.output.validator());
|
||||||
|
t.true(definitions.generateNotes.output.validator(null));
|
||||||
t.true(definitions.generateNotes.output.validator(''));
|
t.true(definitions.generateNotes.output.validator(''));
|
||||||
t.true(definitions.generateNotes.output.validator('string'));
|
t.true(definitions.generateNotes.output.validator('string'));
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user