feat(plugins): run verifications in series
With this new feature you can pass an array of plugin locations/names to both "verifyConditions" and "verifyRelease" in your `package.json`'s "release" field. This will run multiple verification plugins in series.
This commit is contained in:
parent
7b8f632396
commit
700ec9d4ca
@ -36,6 +36,7 @@
|
||||
"parse-github-repo-url": "^1.0.0",
|
||||
"require-relative": "^0.8.7",
|
||||
"run-auto": "^1.1.2",
|
||||
"run-series": "^1.1.2",
|
||||
"semver": "^5.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
@ -1,13 +1,34 @@
|
||||
const relative = require('require-relative')
|
||||
const series = require('run-series')
|
||||
|
||||
let exports = module.exports = function (options) {
|
||||
return {
|
||||
var plugins = {
|
||||
analyzeCommits: exports.normalize(options.analyzeCommits, '@semantic-release/commit-analyzer'),
|
||||
generateNotes: exports.normalize(options.generateNotes, '@semantic-release/release-notes-generator'),
|
||||
verifyConditions: exports.normalize(options.verifyConditions, '@semantic-release/condition-travis'),
|
||||
verifyRelease: exports.normalize(options.verifyRelease, './plugin-noop'),
|
||||
getLastRelease: exports.normalize(options.getLastRelease, '@semantic-release/last-release-npm')
|
||||
}
|
||||
|
||||
;['verifyConditions', 'verifyRelease'].forEach((plugin) => {
|
||||
if (!Array.isArray(options[plugin])) {
|
||||
plugins[plugin] = exports.normalize(
|
||||
options[plugin],
|
||||
plugin === 'verifyConditions' ?
|
||||
'@semantic-release/condition-travis' :
|
||||
'./plugin-noop'
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
plugins[plugin] = function (pluginOptions, cb) {
|
||||
var tasks = options[plugin].map((step) => {
|
||||
return exports.normalize(step, './plugin-noop').bind(null, pluginOptions)
|
||||
})
|
||||
|
||||
series(tasks, cb)
|
||||
}
|
||||
})
|
||||
|
||||
return plugins
|
||||
}
|
||||
|
||||
exports.normalize = function (pluginConfig, fallback) {
|
||||
|
3
test/mocks/plugin-error-a.js
Normal file
3
test/mocks/plugin-error-a.js
Normal file
@ -0,0 +1,3 @@
|
||||
module.exports = function (config, options, cb) {
|
||||
cb(new Error('a'))
|
||||
}
|
3
test/mocks/plugin-error-b.js
Normal file
3
test/mocks/plugin-error-b.js
Normal file
@ -0,0 +1,3 @@
|
||||
module.exports = function (config, options, cb) {
|
||||
cb(new Error('b'))
|
||||
}
|
3
test/mocks/plugin-result-a.js
Normal file
3
test/mocks/plugin-result-a.js
Normal file
@ -0,0 +1,3 @@
|
||||
module.exports = function (config, options, cb) {
|
||||
cb(null, 'a')
|
||||
}
|
3
test/mocks/plugin-result-b.js
Normal file
3
test/mocks/plugin-result-b.js
Normal file
@ -0,0 +1,3 @@
|
||||
module.exports = function (config, options, cb) {
|
||||
cb(null, 'b')
|
||||
}
|
@ -3,7 +3,7 @@ const test = require('tap').test
|
||||
const plugins = require('../../dist/lib/plugins')
|
||||
|
||||
test('export plugins', (t) => {
|
||||
t.plan(4)
|
||||
t.plan(5)
|
||||
|
||||
const defaultPlugins = plugins({})
|
||||
|
||||
@ -11,6 +11,59 @@ test('export plugins', (t) => {
|
||||
t.is(typeof defaultPlugins.generateNotes, 'function')
|
||||
t.is(typeof defaultPlugins.verifyConditions, 'function')
|
||||
t.is(typeof defaultPlugins.verifyRelease, 'function')
|
||||
t.is(typeof defaultPlugins.getLastRelease, 'function')
|
||||
})
|
||||
|
||||
test('plugin pipelines', (t) => {
|
||||
t.plan(3)
|
||||
|
||||
t.test('get all results', (tt) => {
|
||||
const pipelinePlugins = plugins({
|
||||
verifyRelease: [
|
||||
'./dist/lib/plugin-noop',
|
||||
'./.test/mocks/plugin-result-a',
|
||||
'./.test/mocks/plugin-result-b'
|
||||
]
|
||||
})
|
||||
|
||||
pipelinePlugins.verifyRelease({}, (err, results) => {
|
||||
tt.error(err)
|
||||
tt.same(results, [undefined, 'a', 'b'])
|
||||
tt.end()
|
||||
})
|
||||
})
|
||||
|
||||
t.test('get first error', (tt) => {
|
||||
const pipelinePlugins = plugins({
|
||||
verifyConditions: [
|
||||
'./dist/lib/plugin-noop',
|
||||
'./.test/mocks/plugin-error-a',
|
||||
'./.test/mocks/plugin-error-b'
|
||||
]
|
||||
})
|
||||
|
||||
pipelinePlugins.verifyConditions({}, (err) => {
|
||||
tt.is(err.message, 'a')
|
||||
tt.end()
|
||||
})
|
||||
})
|
||||
|
||||
t.test('get error and only results before', (tt) => {
|
||||
const pipelinePlugins = plugins({
|
||||
verifyRelease: [
|
||||
'./dist/lib/plugin-noop',
|
||||
'./.test/mocks/plugin-result-a',
|
||||
'./.test/mocks/plugin-error-b',
|
||||
'./.test/mocks/plugin-result-b'
|
||||
]
|
||||
})
|
||||
|
||||
pipelinePlugins.verifyRelease({}, (err, results) => {
|
||||
tt.is(err.message, 'b')
|
||||
tt.same(results, [undefined, 'a', undefined])
|
||||
tt.end()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
test('normalize and load plugin', (t) => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user