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": {
"@semantic-release/commit-analyzer": "^1.0.0",
"@semantic-release/condition-travis": "^1.0.0",
"@semantic-release/error": "^1.0.0",
"@semantic-release/release-notes-generator": "^1.0.0",
"lodash": "^3.9.3",

View File

@ -31,6 +31,8 @@ npmconf.load({}, (err, conf) => {
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.')
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') {
log.verbose(PREFIX, 'Running pre-script.')
log.verbose(PREFIX, 'Veriying conditions.')
const registry = conf.get('registry')
const nerfDart = require('./lib/nerf-dart')(registry)
let wroteNpmRc = false
plugins.verifyConditions(pkg, options, env, (err) => {
if (err) {
log[options.debug ? 'warn' : 'error'](PREFIX, err.message)
if (!options.debug) process.exit(1)
}
if (env.NPM_TOKEN) {
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. when we have a better testing strategy)
conf.set('_auth', '${NPM_OLD_TOKEN}', 'project')
conf.set('email', '${NPM_EMAIL}', 'project')
wroteNpmRc = true
}
const registry = conf.get('registry')
const nerfDart = require('./lib/nerf-dart')(registry)
let wroteNpmRc = false
conf.save('project', (err) => {
if (err) return log.error(PREFIX, 'Failed to save npm config.', err)
if (env.NPM_TOKEN) {
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, {
auth: {
token: env.NPM_TOKEN
if (wroteNpmRc) log.verbose(PREFIX, 'Wrote authToken to .npmrc.')
require('./pre')(pkg, {
auth: {
token: env.NPM_TOKEN
},
loglevel: log.level,
registry: registry + (registry[registry.length - 1] !== '/' ? '/' : '')
},
loglevel: log.level,
registry: registry + (registry[registry.length - 1] !== '/' ? '/' : '')
},
plugins,
(err, release) => {
if (err) {
log.error(PREFIX, 'Failed to determine new version.')
plugins,
(err, release) => {
if (err) {
log.error(PREFIX, 'Failed to determine new version.')
const args = [PREFIX, (err.code ? `${err.code} ` : '') + err.message]
if (err.stack) args.push(err.stack)
log.error(...args)
process.exit(1)
}
const args = [PREFIX, (err.code ? `${err.code} ` : '') + err.message]
if (err.stack) args.push(err.stack)
log.error(...args)
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, {
version: release.version
}), null, 2))
if (options.debug) {
log.error(PREFIX, `Determined version ${release.version}, but not publishing in debug mode.`, release)
process.exit(1)
}
log.info(PREFIX, `Wrote version ${release.version} to package.json.`)
if (options.debug) {
log.error(PREFIX, 'Not publishing in debug mode')
process.exit(1)
}
writeFileSync('./package.json', JSON.stringify(_.assign(pkg, {
version: release.version
}), null, 2))
log.verbose(PREFIX, `Wrote version ${release.version} to package.json.`)
})
})
})
} else if (options.argv.cooked[0] === 'post') {

View File

@ -4,6 +4,7 @@ let exports = module.exports = function (source) {
return {
analyzeCommits: exports.normalize(source.analyzeCommits, '@semantic-release/commit-analyzer'),
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')
}
}