fix(restart): correctly prevent double npm publish run

This commit is contained in:
Stephan Bönnemann 2015-02-02 17:39:34 +01:00
parent f7faebb175
commit b39fecbdc2
3 changed files with 24 additions and 4 deletions

View File

@ -43,7 +43,14 @@ if (~argv._.indexOf('pre')) {
} }
console.log('Publishing v' + result) console.log('Publishing v' + result)
if (publish) require('../src/restart')() if (publish) require('../src/restart')(function (err) {
if (err) {
console.log('Something went wrong.')
throw err
}
process.exit(1)
})
}) })
}) })
} }
@ -59,7 +66,6 @@ if (~argv._.indexOf('post')) {
// see src/restart.js // see src/restart.js
if (~npmArgv.indexOf('--semantic-release-rerun')) { if (~npmArgv.indexOf('--semantic-release-rerun')) {
console.log('Everything is alright :) npm will now print an error message that you can safely ignore.') console.log('Everything is alright :) npm will now print an error message that you can safely ignore.')
process.exit(1)
} }
}) })
}) })

View File

@ -1,7 +1,7 @@
{ {
"name": "semantic-release", "name": "semantic-release",
"description": "semantic semver compliant package publishing", "description": "semantic semver compliant package publishing",
"version": "0.0.3", "version": "0.0.5",
"author": "Stephan Bönnemann <stephan@boennemann.me>", "author": "Stephan Bönnemann <stephan@boennemann.me>",
"bin": "./bin/semantic-release", "bin": "./bin/semantic-release",
"bugs": { "bugs": {

View File

@ -2,7 +2,7 @@
var spawn = require('child_process').spawn var spawn = require('child_process').spawn
module.exports = function () { var exports = module.exports = function (cb) {
// npm loads package.json data before running the `prepublish` hook // npm loads package.json data before running the `prepublish` hook
// changing the version on `prepublish` has no effect // changing the version on `prepublish` has no effect
// see https://github.com/npm/npm/issues/7118 // see https://github.com/npm/npm/issues/7118
@ -10,7 +10,21 @@ module.exports = function () {
// the package.json is then loaded again and the correct version will be published // the package.json is then loaded again and the correct version will be published
var child = spawn('npm', ['publish', '--semantic-release-rerun']) var child = spawn('npm', ['publish', '--semantic-release-rerun'])
var handler = exports.handleCloseAndExit.bind(null, cb)
child.stdout.pipe(process.stdout) child.stdout.pipe(process.stdout)
child.stderr.pipe(process.stderr) child.stderr.pipe(process.stderr)
child.on('close', handler)
child.on('exit', handler)
child.on('error', cb)
}
exports.handleCloseAndExit = function (cb, code, signal) {
if (code === 0) return cb(null)
cb({
code: code,
signal: signal,
message: 'npm publish failed'
})
} }