feat(cli): add verifyConditions hook

This commit is contained in:
Stephan Bönnemann 2015-07-14 20:30:14 +02:00
parent af15fb4c61
commit 13e2f5ce78
3 changed files with 53 additions and 40 deletions

View File

@ -15,6 +15,7 @@
}, },
"dependencies": { "dependencies": {
"@semantic-release/commit-analyzer": "^1.0.0", "@semantic-release/commit-analyzer": "^1.0.0",
"@semantic-release/condition-travis": "^1.0.0",
"@semantic-release/error": "^1.0.0", "@semantic-release/error": "^1.0.0",
"@semantic-release/release-notes-generator": "^1.0.0", "@semantic-release/release-notes-generator": "^1.0.0",
"lodash": "^3.9.3", "lodash": "^3.9.3",

View File

@ -31,6 +31,8 @@ npmconf.load({}, (err, conf) => {
log.level = conf.get('loglevel') log.level = conf.get('loglevel')
log.verbose(PREFIX, 'argv:', options)
log.verbose(PREFIX, 'options:', pkg.release || 'no options')
log.verbose(PREFIX, 'Verifying pkg, options and env.') log.verbose(PREFIX, 'Verifying pkg, options and env.')
const errors = require('./lib/verify')(pkg, options, env) const errors = require('./lib/verify')(pkg, options, env)
@ -39,56 +41,65 @@ npmconf.load({}, (err, conf) => {
if (!options.argv.cooked.length || options.argv.cooked[0] === 'pre') { if (!options.argv.cooked.length || options.argv.cooked[0] === 'pre') {
log.verbose(PREFIX, 'Running pre-script.') log.verbose(PREFIX, 'Running pre-script.')
log.verbose(PREFIX, 'Veriying conditions.')
const registry = conf.get('registry') plugins.verifyConditions(pkg, options, env, (err) => {
const nerfDart = require('./lib/nerf-dart')(registry) if (err) {
let wroteNpmRc = false log[options.debug ? 'warn' : 'error'](PREFIX, err.message)
if (!options.debug) process.exit(1)
}
if (env.NPM_TOKEN) { const registry = conf.get('registry')
conf.set(`${nerfDart}:_authToken`, '${NPM_TOKEN}', 'project') const nerfDart = require('./lib/nerf-dart')(registry)
wroteNpmRc = true let wroteNpmRc = false
} else if (env.NPM_OLD_TOKEN && env.NPM_EMAIL) {
// Using the old auth token format is not considered part of the public API
// This might go away anytime (i.e. when we have a better testing strategy)
conf.set('_auth', '${NPM_OLD_TOKEN}', 'project')
conf.set('email', '${NPM_EMAIL}', 'project')
wroteNpmRc = true
}
conf.save('project', (err) => { if (env.NPM_TOKEN) {
if (err) return log.error(PREFIX, 'Failed to save npm config.', err) conf.set(`${nerfDart}:_authToken`, '${NPM_TOKEN}', 'project')
wroteNpmRc = true
} else if (env.NPM_OLD_TOKEN && env.NPM_EMAIL) {
// Using the old auth token format is not considered part of the public API
// This might go away anytime (i.e. once we have a better testing strategy)
conf.set('_auth', '${NPM_OLD_TOKEN}', 'project')
conf.set('email', '${NPM_EMAIL}', 'project')
wroteNpmRc = true
}
if (wroteNpmRc) log.verbose(PREFIX, 'Wrote authToken to .npmrc.') conf.save('project', (err) => {
if (err) return log.error(PREFIX, 'Failed to save npm config.', err)
require('./pre')(pkg, { if (wroteNpmRc) log.verbose(PREFIX, 'Wrote authToken to .npmrc.')
auth: {
token: env.NPM_TOKEN require('./pre')(pkg, {
auth: {
token: env.NPM_TOKEN
},
loglevel: log.level,
registry: registry + (registry[registry.length - 1] !== '/' ? '/' : '')
}, },
loglevel: log.level, plugins,
registry: registry + (registry[registry.length - 1] !== '/' ? '/' : '') (err, release) => {
}, if (err) {
plugins, log.error(PREFIX, 'Failed to determine new version.')
(err, release) => {
if (err) {
log.error(PREFIX, 'Failed to determine new version.')
const args = [PREFIX, (err.code ? `${err.code} ` : '') + err.message] const args = [PREFIX, (err.code ? `${err.code} ` : '') + err.message]
if (err.stack) args.push(err.stack) if (err.stack) args.push(err.stack)
log.error(...args) log.error(...args)
process.exit(1) process.exit(1)
} }
log.verbose(PREFIX, `Determined version ${release.version}.`, release) log.verbose(PREFIX, `Determined version ${release.version}.`)
writeFileSync('./package.json', JSON.stringify(_.assign(pkg, { if (options.debug) {
version: release.version log.error(PREFIX, `Determined version ${release.version}, but not publishing in debug mode.`, release)
}), null, 2)) process.exit(1)
}
log.info(PREFIX, `Wrote version ${release.version} to package.json.`) writeFileSync('./package.json', JSON.stringify(_.assign(pkg, {
if (options.debug) { version: release.version
log.error(PREFIX, 'Not publishing in debug mode') }), null, 2))
process.exit(1)
} log.verbose(PREFIX, `Wrote version ${release.version} to package.json.`)
})
}) })
}) })
} else if (options.argv.cooked[0] === 'post') { } else if (options.argv.cooked[0] === 'post') {

View File

@ -4,6 +4,7 @@ let exports = module.exports = function (source) {
return { return {
analyzeCommits: exports.normalize(source.analyzeCommits, '@semantic-release/commit-analyzer'), analyzeCommits: exports.normalize(source.analyzeCommits, '@semantic-release/commit-analyzer'),
generateNotes: exports.normalize(source.generateNotes, '@semantic-release/release-notes-generator'), generateNotes: exports.normalize(source.generateNotes, '@semantic-release/release-notes-generator'),
verifyConditions: exports.normalize(source.verifyCondition, '@semantic-release/condition-travis'),
verifyRelease: exports.normalize(source.verifyRelease, './plugin-noop') verifyRelease: exports.normalize(source.verifyRelease, './plugin-noop')
} }
} }