Merge branch 'caribou' into greenkeeper-tap-4.0.0
This commit is contained in:
		
						commit
						bb63f9de41
					
				
							
								
								
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,14 +1,9 @@
 | 
				
			|||||||
# common
 | 
					 | 
				
			||||||
coverage
 | 
					coverage
 | 
				
			||||||
node_modules
 | 
					node_modules
 | 
				
			||||||
test/registry/couch
 | 
					test/registry/couch
 | 
				
			||||||
test/registry/data
 | 
					test/registry/data
 | 
				
			||||||
 | 
					test/tmp
 | 
				
			||||||
*.log
 | 
					*.log
 | 
				
			||||||
*.dump
 | 
					*.dump
 | 
				
			||||||
.DS_Store
 | 
					.DS_Store
 | 
				
			||||||
.nyc_output
 | 
					.nyc_output
 | 
				
			||||||
.test
 | 
					 | 
				
			||||||
.tmp
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# build-artifacts
 | 
					 | 
				
			||||||
dist
 | 
					 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										18
									
								
								.npmignore
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								.npmignore
									
									
									
									
									
								
							@ -1,18 +0,0 @@
 | 
				
			|||||||
# common
 | 
					 | 
				
			||||||
coverage
 | 
					 | 
				
			||||||
node_modules
 | 
					 | 
				
			||||||
test/registry/couch
 | 
					 | 
				
			||||||
test/registry/data
 | 
					 | 
				
			||||||
*.log
 | 
					 | 
				
			||||||
*.dump
 | 
					 | 
				
			||||||
.DS_Store
 | 
					 | 
				
			||||||
.nyc_output
 | 
					 | 
				
			||||||
.test
 | 
					 | 
				
			||||||
.tmp
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# source/config
 | 
					 | 
				
			||||||
src
 | 
					 | 
				
			||||||
*.yml
 | 
					 | 
				
			||||||
.gitignore
 | 
					 | 
				
			||||||
.editorconfig
 | 
					 | 
				
			||||||
.npmrc
 | 
					 | 
				
			||||||
@ -6,10 +6,9 @@ cache:
 | 
				
			|||||||
notifications:
 | 
					notifications:
 | 
				
			||||||
  email: false
 | 
					  email: false
 | 
				
			||||||
node_js:
 | 
					node_js:
 | 
				
			||||||
- v5
 | 
					- 5
 | 
				
			||||||
- v4
 | 
					- 4
 | 
				
			||||||
- iojs-v2
 | 
					- iojs
 | 
				
			||||||
- iojs-v1
 | 
					 | 
				
			||||||
- '0.12'
 | 
					- '0.12'
 | 
				
			||||||
- '0.10'
 | 
					- '0.10'
 | 
				
			||||||
before_install:
 | 
					before_install:
 | 
				
			||||||
@ -19,3 +18,5 @@ before_script:
 | 
				
			|||||||
after_success:
 | 
					after_success:
 | 
				
			||||||
- npm run coverage:upload
 | 
					- npm run coverage:upload
 | 
				
			||||||
- npm run semantic-release
 | 
					- npm run semantic-release
 | 
				
			||||||
 | 
					services:
 | 
				
			||||||
 | 
					- couchdb
 | 
				
			||||||
 | 
				
			|||||||
@ -257,9 +257,7 @@ It is indeed a great idea because it _forces_ you to follow best practices. If y
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Why should I trust `semantic-release` with my releases?
 | 
					### Why should I trust `semantic-release` with my releases?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
`semantic-release` has a full unit- and integration-test-suite that tests _actual_ `npm` publishes against the [npm-registry-couchapp](https://github.com/npm/npm-registry-couchapp/) on node.js `^0.10`, `^0.12` and io.js `^1`, `^2`. A new version won’t get published if it doesn’t pass on all these engines.
 | 
					`semantic-release` has a full unit- and integration-test-suite that tests _actual_ `npm` publishes against the [npm-registry-couchapp](https://github.com/npm/npm-registry-couchapp/) on all major node.js versions from `^0.10` on. A new version won’t get published if it doesn’t pass on all these engines.
 | 
				
			||||||
 | 
					 | 
				
			||||||
Note: Currently integration-tests don’t run on Travis CI. If you know stuff about npm/Travis/Couch: Please help!
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Badge
 | 
					## Badge
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,13 +1,163 @@
 | 
				
			|||||||
#!/usr/bin/env node
 | 
					#!/usr/bin/env node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* istanbul ignore next */
 | 
					var fs = require('fs')
 | 
				
			||||||
 | 
					var path = require('path')
 | 
				
			||||||
 | 
					var url = require('url')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var _ = require('lodash')
 | 
				
			||||||
 | 
					var log = require('npmlog')
 | 
				
			||||||
 | 
					var nopt = require('nopt')
 | 
				
			||||||
 | 
					var npmconf = require('npmconf')
 | 
				
			||||||
 | 
					var normalizeData = require('normalize-package-data')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					log.heading = 'semantic-release'
 | 
				
			||||||
 | 
					var env = process.env
 | 
				
			||||||
 | 
					var pkg = JSON.parse(fs.readFileSync('./package.json'))
 | 
				
			||||||
 | 
					normalizeData(pkg)
 | 
				
			||||||
 | 
					var knownOptions = {
 | 
				
			||||||
 | 
					  branch: String,
 | 
				
			||||||
 | 
					  debug: Boolean,
 | 
				
			||||||
 | 
					  'github-token': String,
 | 
				
			||||||
 | 
					  'github-url': String,
 | 
				
			||||||
 | 
					  'analyze-commits': [path, String],
 | 
				
			||||||
 | 
					  'generate-notes': [path, String],
 | 
				
			||||||
 | 
					  'verify-conditions': [path, String],
 | 
				
			||||||
 | 
					  'verify-release': [path, String]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					var options = _.defaults(
 | 
				
			||||||
 | 
					  _.mapKeys(nopt(knownOptions), function (value, key) {
 | 
				
			||||||
 | 
					    return _.camelCase(key)
 | 
				
			||||||
 | 
					  }),
 | 
				
			||||||
 | 
					  pkg.release,
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    branch: 'master',
 | 
				
			||||||
 | 
					    fallbackTags: {
 | 
				
			||||||
 | 
					      next: 'latest'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    debug: !env.CI,
 | 
				
			||||||
 | 
					    githubToken: env.GH_TOKEN || env.GITHUB_TOKEN,
 | 
				
			||||||
 | 
					    githubUrl: env.GH_URL
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					var plugins = require('../src/lib/plugins')(options)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					npmconf.load({}, function (err, conf) {
 | 
				
			||||||
 | 
					  if (err) {
 | 
				
			||||||
 | 
					    log.error('init', 'Failed to load npm config.', err)
 | 
				
			||||||
 | 
					    process.exit(1)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var npm = {
 | 
				
			||||||
 | 
					    auth: {
 | 
				
			||||||
 | 
					      token: env.NPM_TOKEN
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    loglevel: conf.get('loglevel'),
 | 
				
			||||||
 | 
					    registry: require('../src/lib/get-registry')(pkg, conf),
 | 
				
			||||||
 | 
					    tag: (pkg.publishConfig || {}).tag || conf.get('tag') || 'latest'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // normalize trailing slash
 | 
				
			||||||
 | 
					  npm.registry = url.format(url.parse(npm.registry))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  log.level = npm.loglevel
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var config = {
 | 
				
			||||||
 | 
					    env: env,
 | 
				
			||||||
 | 
					    pkg: pkg,
 | 
				
			||||||
 | 
					    options: options,
 | 
				
			||||||
 | 
					    plugins: plugins,
 | 
				
			||||||
 | 
					    npm: npm
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var hide = {}
 | 
				
			||||||
 | 
					  if (options.githubToken) hide.githubToken = '***'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  log.verbose('init', 'options:', _.assign({}, options, hide))
 | 
				
			||||||
 | 
					  log.verbose('init', 'Verifying config.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var errors = require('../src/lib/verify')(config)
 | 
				
			||||||
 | 
					  errors.forEach(function (err) {
 | 
				
			||||||
 | 
					    log.error('init', err.message + ' ' + err.code)
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					  if (errors.length) process.exit(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (options.argv.remain[0] === 'pre') {
 | 
				
			||||||
 | 
					    log.verbose('pre', 'Running pre-script.')
 | 
				
			||||||
 | 
					    log.verbose('pre', 'Veriying conditions.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    plugins.verifyConditions(config, function (err) {
 | 
				
			||||||
 | 
					      if (err) {
 | 
				
			||||||
 | 
					        log[options.debug ? 'warn' : 'error']('pre', err.message)
 | 
				
			||||||
 | 
					        if (!options.debug) process.exit(1)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var nerfDart = require('nerf-dart')(npm.registry)
 | 
				
			||||||
 | 
					      var wroteNpmRc = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      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
 | 
				
			||||||
 | 
					      } else if (env.NPM_TOKEN) {
 | 
				
			||||||
 | 
					        conf.set(nerfDart + ':_authToken', '${NPM_TOKEN}', 'project')
 | 
				
			||||||
 | 
					        wroteNpmRc = true
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      conf.save('project', function (err) {
 | 
				
			||||||
 | 
					        if (err) return log.error('pre', 'Failed to save npm config.', err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (wroteNpmRc) log.verbose('pre', 'Wrote authToken to .npmrc.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        require('../src/pre')(config, function (err, release) {
 | 
				
			||||||
 | 
					          if (err) {
 | 
				
			||||||
 | 
					            log.error('pre', 'Failed to determine new version.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var args = ['pre', (err.code ? err.code + ' ' : '') + err.message]
 | 
				
			||||||
 | 
					            if (err.stack) args.push(err.stack)
 | 
				
			||||||
 | 
					            log.error.apply(log, args)
 | 
				
			||||||
 | 
					            process.exit(1)
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          var message = 'Determined version ' + release.version + ' as "' + npm.tag + '".'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          log.verbose('pre', message)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          if (options.debug) {
 | 
				
			||||||
 | 
					            log.error('pre', message + ' Not publishing in debug mode.', release)
 | 
				
			||||||
 | 
					            process.exit(1)
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          try {
 | 
					          try {
 | 
				
			||||||
  require('../dist')
 | 
					            var shrinkwrap = JSON.parse(fs.readFileSync('./npm-shrinkwrap.json'))
 | 
				
			||||||
} catch (err) {
 | 
					            shrinkwrap.version = release.version
 | 
				
			||||||
  if (err.code === 'MODULE_NOT_FOUND') {
 | 
					            fs.writeFileSync('./npm-shrinkwrap.json', JSON.stringify(shrinkwrap, null, 2))
 | 
				
			||||||
    require('babel/register')
 | 
					            log.verbose('pre', 'Wrote version ' + release.version + 'to npm-shrinkwrap.json.')
 | 
				
			||||||
    require('../src')
 | 
					          } catch (e) {
 | 
				
			||||||
 | 
					            log.silly('pre', 'Couldn\'t find npm-shrinkwrap.json.')
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          fs.writeFileSync('./package.json', JSON.stringify(_.assign(pkg, {
 | 
				
			||||||
 | 
					            version: release.version
 | 
				
			||||||
 | 
					          }), null, 2))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          log.verbose('pre', 'Wrote version ' + release.version + ' to package.json.')
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  } else if (options.argv.remain[0] === 'post') {
 | 
				
			||||||
 | 
					    log.verbose('post', 'Running post-script.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    require('../src/post')(config, function (err, published, release) {
 | 
				
			||||||
 | 
					      if (err) {
 | 
				
			||||||
 | 
					        log.error('post', 'Failed to publish release notes.', err)
 | 
				
			||||||
 | 
					        process.exit(1)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      log.verbose('post', (published ? 'Published' : 'Generated') + ' release notes.', release)
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    console.log(err)
 | 
					    log.error('post', 'Command "' + options.argv.remain[0] + '" not recognized. User either "pre" or "post"')
 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										37
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								package.json
									
									
									
									
									
								
							@ -1,21 +1,14 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "semantic-release",
 | 
					  "name": "semantic-release",
 | 
				
			||||||
  "description": "automated semver compliant package publishing",
 | 
					  "description": "automated semver compliant package publishing",
 | 
				
			||||||
 | 
					  "version": "0.0.0-placeholder",
 | 
				
			||||||
  "author": "Stephan Bönnemann <stephan@boennemann.me> (http://boennemann.me)",
 | 
					  "author": "Stephan Bönnemann <stephan@boennemann.me> (http://boennemann.me)",
 | 
				
			||||||
  "bin": {
 | 
					  "bin": {
 | 
				
			||||||
    "semantic-release": "./bin/semantic-release.js"
 | 
					    "semantic-release": "bin/semantic-release.js"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "bugs": {
 | 
					  "bugs": {
 | 
				
			||||||
    "url": "https://github.com/semantic-release/semantic-release/issues"
 | 
					    "url": "https://github.com/semantic-release/semantic-release/issues"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "config": {
 | 
					 | 
				
			||||||
    "nyc": {
 | 
					 | 
				
			||||||
      "exclude": [
 | 
					 | 
				
			||||||
        ".test",
 | 
					 | 
				
			||||||
        "node_modules"
 | 
					 | 
				
			||||||
      ]
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "czConfig": {
 | 
					  "czConfig": {
 | 
				
			||||||
    "path": "node_modules/cz-conventional-changelog/"
 | 
					    "path": "node_modules/cz-conventional-changelog/"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
@ -40,7 +33,6 @@
 | 
				
			|||||||
    "semver": "^5.0.3"
 | 
					    "semver": "^5.0.3"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "babel": "^5.8.21",
 | 
					 | 
				
			||||||
    "coveralls": "^2.11.4",
 | 
					    "coveralls": "^2.11.4",
 | 
				
			||||||
    "cz-conventional-changelog": "^1.1.4",
 | 
					    "cz-conventional-changelog": "^1.1.4",
 | 
				
			||||||
    "mkdirp": "^0.5.1",
 | 
					    "mkdirp": "^0.5.1",
 | 
				
			||||||
@ -49,7 +41,7 @@
 | 
				
			|||||||
    "npm-registry-couchapp": "^2.6.11",
 | 
					    "npm-registry-couchapp": "^2.6.11",
 | 
				
			||||||
    "nyc": "^5.0.0",
 | 
					    "nyc": "^5.0.0",
 | 
				
			||||||
    "proxyquire": "^1.7.3",
 | 
					    "proxyquire": "^1.7.3",
 | 
				
			||||||
    "rimraf": "^2.4.3",
 | 
					    "rimraf": "^2.5.0",
 | 
				
			||||||
    "standard": "^5.3.0",
 | 
					    "standard": "^5.3.0",
 | 
				
			||||||
    "tap": "^4.0.0"
 | 
					    "tap": "^4.0.0"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
@ -70,7 +62,11 @@
 | 
				
			|||||||
    "version"
 | 
					    "version"
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "license": "MIT",
 | 
					  "license": "MIT",
 | 
				
			||||||
  "main": "dist/index.js",
 | 
					  "main": "bin/semantic-release.js",
 | 
				
			||||||
 | 
					  "files": [
 | 
				
			||||||
 | 
					    "bin",
 | 
				
			||||||
 | 
					    "src"
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
  "publishConfig": {
 | 
					  "publishConfig": {
 | 
				
			||||||
    "tag": "next"
 | 
					    "tag": "next"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
@ -82,17 +78,12 @@
 | 
				
			|||||||
    "url": "git+https://github.com/semantic-release/semantic-release.git"
 | 
					    "url": "git+https://github.com/semantic-release/semantic-release.git"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "build": "rimraf dist && mkdirp dist && babel src --out-dir dist",
 | 
					 | 
				
			||||||
    "coverage": "nyc report",
 | 
					    "coverage": "nyc report",
 | 
				
			||||||
    "coverage:upload": "npm run coverage -- --reporter=lcovonly && coveralls < coverage/lcov.info",
 | 
					    "coverage:upload": "npm run coverage -s -- --reporter=text-lcov | coveralls",
 | 
				
			||||||
    "prepublish": "npm run build",
 | 
					    "pretest": "standard",
 | 
				
			||||||
    "pretest:integration": "npm run build && npm run test:build",
 | 
					    "semantic-release": "./bin/semantic-release.js pre && npm publish && ./bin/semantic-release.js post",
 | 
				
			||||||
    "pretest:unit": "npm run build && npm run test:build",
 | 
					    "test": "npm run test:unit && npm run test:integration",
 | 
				
			||||||
    "semantic-release": "./bin/semantic-release.js pre && npm dedupe && npm publish && ./bin/semantic-release.js post",
 | 
					    "test:integration": "tap --no-cov test/scenarios/*.js",
 | 
				
			||||||
    "test": "npm run test:style && npm run test:unit",
 | 
					    "test:unit": "nyc tap --no-cov test/specs/*.js"
 | 
				
			||||||
    "test:build": "rimraf .test && mkdirp .test && babel test --out-dir .test",
 | 
					 | 
				
			||||||
    "test:integration": "tap --no-cov .test/scenarios/*.js",
 | 
					 | 
				
			||||||
    "test:style": "standard",
 | 
					 | 
				
			||||||
    "test:unit": "nyc tap --no-cov .test/specs/*.js"
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										150
									
								
								src/index.js
									
									
									
									
									
								
							
							
						
						
									
										150
									
								
								src/index.js
									
									
									
									
									
								
							@ -1,150 +0,0 @@
 | 
				
			|||||||
const { readFileSync, writeFileSync } = require('fs')
 | 
					 | 
				
			||||||
const path = require('path')
 | 
					 | 
				
			||||||
const url = require('url')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const _ = require('lodash')
 | 
					 | 
				
			||||||
const log = require('npmlog')
 | 
					 | 
				
			||||||
const nopt = require('nopt')
 | 
					 | 
				
			||||||
const npmconf = require('npmconf')
 | 
					 | 
				
			||||||
const normalizeData = require('normalize-package-data')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
log.heading = 'semantic-release'
 | 
					 | 
				
			||||||
const env = process.env
 | 
					 | 
				
			||||||
const pkg = normalizeData(readFileSync('./package.json'))
 | 
					 | 
				
			||||||
const knownOptions = {
 | 
					 | 
				
			||||||
  branch: String,
 | 
					 | 
				
			||||||
  debug: Boolean,
 | 
					 | 
				
			||||||
  'github-token': String,
 | 
					 | 
				
			||||||
  'github-url': String,
 | 
					 | 
				
			||||||
  'analyze-commits': [path, String],
 | 
					 | 
				
			||||||
  'generate-notes': [path, String],
 | 
					 | 
				
			||||||
  'verify-conditions': [path, String],
 | 
					 | 
				
			||||||
  'verify-release': [path, String]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
const options = _.defaults(
 | 
					 | 
				
			||||||
  _.mapKeys(nopt(knownOptions), (value, key) => _.camelCase(key)),
 | 
					 | 
				
			||||||
  pkg.release,
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    branch: 'master',
 | 
					 | 
				
			||||||
    fallbackTags: {
 | 
					 | 
				
			||||||
      next: 'latest'
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    debug: !env.CI,
 | 
					 | 
				
			||||||
    githubToken: env.GH_TOKEN || env.GITHUB_TOKEN,
 | 
					 | 
				
			||||||
    githubUrl: env.GH_URL
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
const plugins = require('./lib/plugins')(options)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
npmconf.load({}, (err, conf) => {
 | 
					 | 
				
			||||||
  if (err) {
 | 
					 | 
				
			||||||
    log.error('init', 'Failed to load npm config.', err)
 | 
					 | 
				
			||||||
    process.exit(1)
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  let npm = {
 | 
					 | 
				
			||||||
    auth: {
 | 
					 | 
				
			||||||
      token: env.NPM_TOKEN
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    loglevel: conf.get('loglevel'),
 | 
					 | 
				
			||||||
    registry: require('./lib/get-registry')(pkg, conf),
 | 
					 | 
				
			||||||
    tag: (pkg.publishConfig || {}).tag || conf.get('tag') || 'latest'
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // normalize trailing slash
 | 
					 | 
				
			||||||
  npm.registry = url.format(url.parse(npm.registry))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  log.level = npm.loglevel
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const config = {env, pkg, options, plugins, npm}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  let hide = {}
 | 
					 | 
				
			||||||
  if (options.githubToken) hide.githubToken = '***'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  log.verbose('init', 'options:', _.assign({}, options, hide))
 | 
					 | 
				
			||||||
  log.verbose('init', 'Verifying config.')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const errors = require('./lib/verify')(config)
 | 
					 | 
				
			||||||
  errors.forEach((err) => log.error('init', `${err.message} ${err.code}`))
 | 
					 | 
				
			||||||
  if (errors.length) process.exit(1)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (options.argv.remain[0] === 'pre') {
 | 
					 | 
				
			||||||
    log.verbose('pre', 'Running pre-script.')
 | 
					 | 
				
			||||||
    log.verbose('pre', 'Veriying conditions.')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    plugins.verifyConditions(config, (err) => {
 | 
					 | 
				
			||||||
      if (err) {
 | 
					 | 
				
			||||||
        log[options.debug ? 'warn' : 'error']('pre', err.message)
 | 
					 | 
				
			||||||
        if (!options.debug) process.exit(1)
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      const nerfDart = require('nerf-dart')(npm.registry)
 | 
					 | 
				
			||||||
      let wroteNpmRc = false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      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
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      conf.save('project', (err) => {
 | 
					 | 
				
			||||||
        if (err) return log.error('pre', 'Failed to save npm config.', err)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (wroteNpmRc) log.verbose('pre', 'Wrote authToken to .npmrc.')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        require('./pre')(config, (err, release) => {
 | 
					 | 
				
			||||||
          if (err) {
 | 
					 | 
				
			||||||
            log.error('pre', 'Failed to determine new version.')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            const args = ['pre', (err.code ? `${err.code} ` : '') + err.message]
 | 
					 | 
				
			||||||
            if (err.stack) args.push(err.stack)
 | 
					 | 
				
			||||||
            log.error(...args)
 | 
					 | 
				
			||||||
            process.exit(1)
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          const message = `Determined version ${release.version} as "${npm.tag}".`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          log.verbose('pre', message)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          if (options.debug) {
 | 
					 | 
				
			||||||
            log.error('pre', `${message} Not publishing in debug mode.`, release)
 | 
					 | 
				
			||||||
            process.exit(1)
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          try {
 | 
					 | 
				
			||||||
            let shrinkwrap = JSON.parse(readFileSync('./npm-shrinkwrap.json'))
 | 
					 | 
				
			||||||
            shrinkwrap.version = release.version
 | 
					 | 
				
			||||||
            writeFileSync('./npm-shrinkwrap.json', JSON.stringify(shrinkwrap, null, 2))
 | 
					 | 
				
			||||||
            log.verbose('pre', `Wrote version ${release.version} to npm-shrinkwrap.json.`)
 | 
					 | 
				
			||||||
          } catch (e) {
 | 
					 | 
				
			||||||
            log.silly('pre', `Couldn't find npm-shrinkwrap.json.`)
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          writeFileSync('./package.json', JSON.stringify(_.assign(pkg, {
 | 
					 | 
				
			||||||
            version: release.version
 | 
					 | 
				
			||||||
          }), null, 2))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          log.verbose('pre', `Wrote version ${release.version} to package.json.`)
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
  } else if (options.argv.remain[0] === 'post') {
 | 
					 | 
				
			||||||
    log.verbose('post', 'Running post-script.')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    require('./post')(config, (err, published, release) => {
 | 
					 | 
				
			||||||
      if (err) {
 | 
					 | 
				
			||||||
        log.error('post', 'Failed to publish release notes.', err)
 | 
					 | 
				
			||||||
        process.exit(1)
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      log.verbose('post', `${published ? 'Published' : 'Generated'} release notes.`, release)
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
  } else {
 | 
					 | 
				
			||||||
    log.error('post', `Command "${options.argv.remain[0]}" not recognized. User either "pre" or "post"`)
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
@ -1,39 +1,43 @@
 | 
				
			|||||||
const { exec } = require('child_process')
 | 
					var exec = require('child_process').exec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const log = require('npmlog')
 | 
					var log = require('npmlog')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const SemanticReleaseError = require('@semantic-release/error')
 | 
					var SemanticReleaseError = require('@semantic-release/error')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = function ({lastRelease, options}, cb) {
 | 
					module.exports = function (config, cb) {
 | 
				
			||||||
  const branch = options.branch
 | 
					  var lastRelease = config.lastRelease
 | 
				
			||||||
  const from = lastRelease.gitHead
 | 
					  var options = config.options
 | 
				
			||||||
  const range = (from ? from + '..' : '') + 'HEAD'
 | 
					  var branch = options.branch
 | 
				
			||||||
 | 
					  var from = lastRelease.gitHead
 | 
				
			||||||
 | 
					  var range = (from ? from + '..' : '') + 'HEAD'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!from) return extract()
 | 
					  if (!from) return extract()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  exec(`git branch --contains ${from}`, (err, stdout) => {
 | 
					  exec('git branch --contains ' + from, function (err, stdout) {
 | 
				
			||||||
    let inHistory = false
 | 
					    var inHistory = false
 | 
				
			||||||
    let branches
 | 
					    var branches
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!err && stdout) {
 | 
					    if (!err && stdout) {
 | 
				
			||||||
      branches = stdout.split('\n')
 | 
					      branches = stdout.split('\n')
 | 
				
			||||||
      .map((result) => {
 | 
					      .map(function (result) {
 | 
				
			||||||
        if (branch === result.replace('*', '').trim()) {
 | 
					        if (branch === result.replace('*', '').trim()) {
 | 
				
			||||||
          inHistory = true
 | 
					          inHistory = true
 | 
				
			||||||
          return null
 | 
					          return null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return result.trim()
 | 
					        return result.trim()
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      .filter(branch => !!branch)
 | 
					      .filter(function (branch) {
 | 
				
			||||||
 | 
					        return !!branch
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!inHistory) {
 | 
					    if (!inHistory) {
 | 
				
			||||||
      log.error('commits',
 | 
					      log.error('commits',
 | 
				
			||||||
`The commit the last release of this package was derived from is not in the direct history of the "${branch}" branch.
 | 
					        'The commit the last release of this package was derived from is not in the direct history of the "' + branch + '" branch.\n' +
 | 
				
			||||||
This means semantic-release can not extract the commits between now and then.
 | 
					        'This means semantic-release can not extract the commits between now and then.\n' +
 | 
				
			||||||
This is usually caused by force pushing, releasing from an unrelated branch, or using an already existing package name.
 | 
					        'This is usually caused by force pushing, releasing from an unrelated branch, or using an already existing package name.\n' +
 | 
				
			||||||
You can recover from this error by publishing manually or restoring the commit "${from}".` + (branches && branches.length
 | 
					        'You can recover from this error by publishing manually or restoring the commit "' + from + '".' + (branches && branches.length
 | 
				
			||||||
        ? `\nHere is a list of branches that still contain the commit in question: \n * ${branches.join('\n * ')}`
 | 
					        ? '\nHere is a list of branches that still contain the commit in question: \n * ' + branches.join('\n * ')
 | 
				
			||||||
        : ''
 | 
					        : ''
 | 
				
			||||||
      ))
 | 
					      ))
 | 
				
			||||||
      return cb(new SemanticReleaseError('Commit not in history', 'ENOTINHISTORY'))
 | 
					      return cb(new SemanticReleaseError('Commit not in history', 'ENOTINHISTORY'))
 | 
				
			||||||
@ -44,16 +48,18 @@ You can recover from this error by publishing manually or restoring the commit "
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  function extract () {
 | 
					  function extract () {
 | 
				
			||||||
    exec(
 | 
					    exec(
 | 
				
			||||||
      `git log -E --format=%H==SPLIT==%B==END== ${range}`,
 | 
					      'git log -E --format=%H==SPLIT==%B==END== ' + range,
 | 
				
			||||||
      (err, stdout) => {
 | 
					      function (err, stdout) {
 | 
				
			||||||
        if (err) return cb(err)
 | 
					        if (err) return cb(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cb(null, String(stdout).split('==END==\n')
 | 
					        cb(null, String(stdout).split('==END==\n')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        .filter((raw) => !!raw.trim())
 | 
					        .filter(function (raw) {
 | 
				
			||||||
 | 
					          return !!raw.trim()
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        .map((raw) => {
 | 
					        .map(function (raw) {
 | 
				
			||||||
          const data = raw.split('==SPLIT==')
 | 
					          var data = raw.split('==SPLIT==')
 | 
				
			||||||
          return {
 | 
					          return {
 | 
				
			||||||
            hash: data[0],
 | 
					            hash: data[0],
 | 
				
			||||||
            message: data[1]
 | 
					            message: data[1]
 | 
				
			||||||
 | 
				
			|||||||
@ -3,8 +3,8 @@ module.exports = function (pkg, conf) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  if (pkg.name[0] !== '@') return conf.get('registry') || 'https://registry.npmjs.org/'
 | 
					  if (pkg.name[0] !== '@') return conf.get('registry') || 'https://registry.npmjs.org/'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const scope = pkg.name.split('/')[0]
 | 
					  var scope = pkg.name.split('/')[0]
 | 
				
			||||||
  const scopedRegistry = conf.get(`${scope}/registry`)
 | 
					  var scopedRegistry = conf.get(scope + '/registry')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (scopedRegistry) return scopedRegistry
 | 
					  if (scopedRegistry) return scopedRegistry
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,14 +1,14 @@
 | 
				
			|||||||
const relative = require('require-relative')
 | 
					var relative = require('require-relative')
 | 
				
			||||||
const series = require('run-series')
 | 
					var series = require('run-series')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let exports = module.exports = function (options) {
 | 
					var exports = module.exports = function (options) {
 | 
				
			||||||
  var plugins = {
 | 
					  var plugins = {
 | 
				
			||||||
    analyzeCommits: exports.normalize(options.analyzeCommits, '@semantic-release/commit-analyzer'),
 | 
					    analyzeCommits: exports.normalize(options.analyzeCommits, '@semantic-release/commit-analyzer'),
 | 
				
			||||||
    generateNotes: exports.normalize(options.generateNotes, '@semantic-release/release-notes-generator'),
 | 
					    generateNotes: exports.normalize(options.generateNotes, '@semantic-release/release-notes-generator'),
 | 
				
			||||||
    getLastRelease: exports.normalize(options.getLastRelease, '@semantic-release/last-release-npm')
 | 
					    getLastRelease: exports.normalize(options.getLastRelease, '@semantic-release/last-release-npm')
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ;['verifyConditions', 'verifyRelease'].forEach((plugin) => {
 | 
					  ;['verifyConditions', 'verifyRelease'].forEach(function (plugin) {
 | 
				
			||||||
    if (!Array.isArray(options[plugin])) {
 | 
					    if (!Array.isArray(options[plugin])) {
 | 
				
			||||||
      plugins[plugin] = exports.normalize(
 | 
					      plugins[plugin] = exports.normalize(
 | 
				
			||||||
        options[plugin],
 | 
					        options[plugin],
 | 
				
			||||||
@ -20,7 +20,7 @@ let exports = module.exports = function (options) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    plugins[plugin] = function (pluginOptions, cb) {
 | 
					    plugins[plugin] = function (pluginOptions, cb) {
 | 
				
			||||||
      var tasks = options[plugin].map((step) => {
 | 
					      var tasks = options[plugin].map(function (step) {
 | 
				
			||||||
        return exports.normalize(step, './plugin-noop').bind(null, pluginOptions)
 | 
					        return exports.normalize(step, './plugin-noop').bind(null, pluginOptions)
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,9 +1,10 @@
 | 
				
			|||||||
const SemanticReleaseError = require('@semantic-release/error')
 | 
					var SemanticReleaseError = require('@semantic-release/error')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = function (config, cb) {
 | 
					module.exports = function (config, cb) {
 | 
				
			||||||
  const { plugins, lastRelease } = config
 | 
					  var plugins = config.plugins
 | 
				
			||||||
 | 
					  var lastRelease = config.lastRelease
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  plugins.analyzeCommits(config, (err, type) => {
 | 
					  plugins.analyzeCommits(config, function (err, type) {
 | 
				
			||||||
    if (err) return cb(err)
 | 
					    if (err) return cb(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!type) {
 | 
					    if (!type) {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,9 +1,12 @@
 | 
				
			|||||||
const parseSlug = require('parse-github-repo-url')
 | 
					var parseSlug = require('parse-github-repo-url')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const SemanticReleaseError = require('@semantic-release/error')
 | 
					var SemanticReleaseError = require('@semantic-release/error')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = function ({pkg, options, env}) {
 | 
					module.exports = function (config) {
 | 
				
			||||||
  let errors = []
 | 
					  var pkg = config.pkg
 | 
				
			||||||
 | 
					  var options = config.options
 | 
				
			||||||
 | 
					  var env = config.env
 | 
				
			||||||
 | 
					  var errors = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!pkg.name) {
 | 
					  if (!pkg.name) {
 | 
				
			||||||
    errors.push(new SemanticReleaseError(
 | 
					    errors.push(new SemanticReleaseError(
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										30
									
								
								src/post.js
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								src/post.js
									
									
									
									
									
								
							@ -1,32 +1,34 @@
 | 
				
			|||||||
const url = require('url')
 | 
					var url = require('url')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const gitHead = require('git-head')
 | 
					var gitHead = require('git-head')
 | 
				
			||||||
const GitHubApi = require('github')
 | 
					var GitHubApi = require('github')
 | 
				
			||||||
const parseSlug = require('parse-github-repo-url')
 | 
					var parseSlug = require('parse-github-repo-url')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = function (config, cb) {
 | 
					module.exports = function (config, cb) {
 | 
				
			||||||
  const { pkg, options, plugins } = config
 | 
					  var pkg = config.pkg
 | 
				
			||||||
  const ghConfig = options.githubUrl ? url.parse(options.githubUrl) : {}
 | 
					  var options = config.options
 | 
				
			||||||
 | 
					  var plugins = config.plugins
 | 
				
			||||||
 | 
					  var ghConfig = options.githubUrl ? url.parse(options.githubUrl) : {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const github = new GitHubApi({
 | 
					  var github = new GitHubApi({
 | 
				
			||||||
    version: '3.0.0',
 | 
					    version: '3.0.0',
 | 
				
			||||||
    port: ghConfig.port,
 | 
					    port: ghConfig.port,
 | 
				
			||||||
    protocol: (ghConfig.protocol || '').split(':')[0] || null,
 | 
					    protocol: (ghConfig.protocol || '').split(':')[0] || null,
 | 
				
			||||||
    host: ghConfig.hostname
 | 
					    host: ghConfig.hostname
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  plugins.generateNotes(config, (err, log) => {
 | 
					  plugins.generateNotes(config, function (err, log) {
 | 
				
			||||||
    if (err) return cb(err)
 | 
					    if (err) return cb(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    gitHead((err, hash) => {
 | 
					    gitHead(function (err, hash) {
 | 
				
			||||||
      if (err) return cb(err)
 | 
					      if (err) return cb(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      const ghRepo = parseSlug(pkg.repository.url)
 | 
					      var ghRepo = parseSlug(pkg.repository.url)
 | 
				
			||||||
      const release = {
 | 
					      var release = {
 | 
				
			||||||
        owner: ghRepo[0],
 | 
					        owner: ghRepo[0],
 | 
				
			||||||
        repo: ghRepo[1],
 | 
					        repo: ghRepo[1],
 | 
				
			||||||
        name: `v${pkg.version}`,
 | 
					        name: 'v' + pkg.version,
 | 
				
			||||||
        tag_name: `v${pkg.version}`,
 | 
					        tag_name: 'v' + pkg.version,
 | 
				
			||||||
        target_commitish: hash,
 | 
					        target_commitish: hash,
 | 
				
			||||||
        draft: !!options.debug,
 | 
					        draft: !!options.debug,
 | 
				
			||||||
        body: log
 | 
					        body: log
 | 
				
			||||||
@ -41,7 +43,7 @@ module.exports = function (config, cb) {
 | 
				
			|||||||
        token: options.githubToken
 | 
					        token: options.githubToken
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      github.releases.createRelease(release, (err) => {
 | 
					      github.releases.createRelease(release, function (err) {
 | 
				
			||||||
        if (err) return cb(err)
 | 
					        if (err) return cb(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cb(null, true, release)
 | 
					        cb(null, true, release)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										24
									
								
								src/pre.js
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								src/pre.js
									
									
									
									
									
								
							@ -1,32 +1,32 @@
 | 
				
			|||||||
const _ = require('lodash')
 | 
					var _ = require('lodash')
 | 
				
			||||||
const auto = require('run-auto')
 | 
					var auto = require('run-auto')
 | 
				
			||||||
const semver = require('semver')
 | 
					var semver = require('semver')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const getCommits = require('./lib/commits')
 | 
					var getCommits = require('./lib/commits')
 | 
				
			||||||
const getType = require('./lib/type')
 | 
					var getType = require('./lib/type')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = function (config, cb) {
 | 
					module.exports = function (config, cb) {
 | 
				
			||||||
  const { plugins } = config
 | 
					  var plugins = config.plugins
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto({
 | 
					  auto({
 | 
				
			||||||
    lastRelease: plugins.getLastRelease.bind(null, config),
 | 
					    lastRelease: plugins.getLastRelease.bind(null, config),
 | 
				
			||||||
    commits: ['lastRelease', (cb, results) => {
 | 
					    commits: ['lastRelease', function (cb, results) {
 | 
				
			||||||
      getCommits(_.assign({
 | 
					      getCommits(_.assign({
 | 
				
			||||||
        lastRelease: results.lastRelease
 | 
					        lastRelease: results.lastRelease
 | 
				
			||||||
      }, config),
 | 
					      }, config),
 | 
				
			||||||
      cb)
 | 
					      cb)
 | 
				
			||||||
    }],
 | 
					    }],
 | 
				
			||||||
    type: ['commits', 'lastRelease', (cb, results) => {
 | 
					    type: ['commits', 'lastRelease', function (cb, results) {
 | 
				
			||||||
      getType(_.assign({
 | 
					      getType(_.assign({
 | 
				
			||||||
        commits: results.commits,
 | 
					        commits: results.commits,
 | 
				
			||||||
        lastRelease: results.lastRelease
 | 
					        lastRelease: results.lastRelease
 | 
				
			||||||
      }, config),
 | 
					      }, config),
 | 
				
			||||||
      cb)
 | 
					      cb)
 | 
				
			||||||
    }]
 | 
					    }]
 | 
				
			||||||
  }, (err, results) => {
 | 
					  }, function (err, results) {
 | 
				
			||||||
    if (err) return cb(err)
 | 
					    if (err) return cb(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const nextRelease = {
 | 
					    var nextRelease = {
 | 
				
			||||||
      type: results.type,
 | 
					      type: results.type,
 | 
				
			||||||
      version: results.type === 'initial'
 | 
					      version: results.type === 'initial'
 | 
				
			||||||
        ? '1.0.0'
 | 
					        ? '1.0.0'
 | 
				
			||||||
@ -36,8 +36,8 @@ module.exports = function (config, cb) {
 | 
				
			|||||||
    plugins.verifyRelease(_.assign({
 | 
					    plugins.verifyRelease(_.assign({
 | 
				
			||||||
      commits: results.commits,
 | 
					      commits: results.commits,
 | 
				
			||||||
      lastRelease: results.lastRelease,
 | 
					      lastRelease: results.lastRelease,
 | 
				
			||||||
      nextRelease
 | 
					      nextRelease: nextRelease
 | 
				
			||||||
    }, config), (err) => {
 | 
					    }, config), function (err) {
 | 
				
			||||||
      if (err) return cb(err)
 | 
					      if (err) return cb(err)
 | 
				
			||||||
      cb(null, nextRelease)
 | 
					      cb(null, nextRelease)
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
const nixt = require('nixt')
 | 
					var nixt = require('nixt')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = function (cwd, uri) {
 | 
					module.exports = function (cwd, uri) {
 | 
				
			||||||
  return nixt()
 | 
					  return nixt()
 | 
				
			||||||
@ -7,8 +7,6 @@ module.exports = function (cwd, uri) {
 | 
				
			|||||||
		.env('NPM_EMAIL', 'integration@test.com')
 | 
							.env('NPM_EMAIL', 'integration@test.com')
 | 
				
			||||||
    .env('GH_TOKEN', 'ghtoken')
 | 
					    .env('GH_TOKEN', 'ghtoken')
 | 
				
			||||||
    .env('CI', 'true')
 | 
					    .env('CI', 'true')
 | 
				
			||||||
    .env('TRAVIS', 'true')
 | 
					 | 
				
			||||||
    .env('TRAVIS_BRANCH', 'master')
 | 
					 | 
				
			||||||
    .env('npm_config_registry', uri)
 | 
					    .env('npm_config_registry', uri)
 | 
				
			||||||
    .clone()
 | 
					    .clone()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,40 +1,31 @@
 | 
				
			|||||||
const { exec } = require('child_process')
 | 
					var exec = require('child_process').exec
 | 
				
			||||||
const { join } = require('path')
 | 
					var join = require('path').join
 | 
				
			||||||
const { writeFileSync } = require('fs')
 | 
					var writeFileSync = require('fs').writeFileSync
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mkdirp = require('mkdirp')
 | 
					var mkdirp = require('mkdirp')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = function (name, cb) {
 | 
					module.exports = function (name, registry, cb) {
 | 
				
			||||||
  const cwd = join(__dirname, '../tmp', name)
 | 
					  var cwd = join(__dirname, '../tmp', name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  mkdirp.sync(cwd)
 | 
					  mkdirp.sync(cwd)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  writeFileSync(join(cwd, '.npmrc'), `
 | 
					 | 
				
			||||||
//localhost:1337/registry/_design/app/_rewrite/:username=integration
 | 
					 | 
				
			||||||
//localhost:1337/registry/_design/app/_rewrite/:email=integration@test.com`, null, 2)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  writeFileSync(join(cwd, 'package.json'), JSON.stringify({
 | 
					  writeFileSync(join(cwd, 'package.json'), JSON.stringify({
 | 
				
			||||||
    name,
 | 
					    name: name,
 | 
				
			||||||
    repository: {
 | 
					    repository: {
 | 
				
			||||||
      url: 'git+https://github.com/semantic-release/test'
 | 
					      url: 'git+https://github.com/semantic-release/test'
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    _npmUser: {
 | 
					    release: {
 | 
				
			||||||
      name: 'integration',
 | 
					      verifyConditions: '../../../src/lib/plugin-noop'
 | 
				
			||||||
      email: 'integration@test.com'
 | 
					    }
 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    maintainers: [{
 | 
					 | 
				
			||||||
      name: 'integration',
 | 
					 | 
				
			||||||
      email: 'integration@test.com'
 | 
					 | 
				
			||||||
    }]
 | 
					 | 
				
			||||||
  }, null, 2))
 | 
					  }, null, 2))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  exec(`
 | 
					  exec(
 | 
				
			||||||
    git init &&
 | 
					  'git init && ' +
 | 
				
			||||||
    git config user.email "integration@test" &&
 | 
					  'git config user.email "integration@test" && ' +
 | 
				
			||||||
    git config user.name "Integration Test" &&
 | 
					  'git config user.name "Integration Test" && ' +
 | 
				
			||||||
    git add . &&
 | 
					  'git add . && ' +
 | 
				
			||||||
    git commit -m "chore: root"`
 | 
					  'git commit -m "chore: root"'
 | 
				
			||||||
  , {cwd}, (err, stdout, stderr) => {
 | 
					  , {cwd: cwd}, function (err, stdout, stderr) {
 | 
				
			||||||
    if (err) {
 | 
					    if (err) {
 | 
				
			||||||
      console.log(stdout, stderr)
 | 
					      console.log(stdout, stderr)
 | 
				
			||||||
      return cb(err)
 | 
					      return cb(err)
 | 
				
			||||||
 | 
				
			|||||||
@ -4,10 +4,10 @@ const rawCommits = [
 | 
				
			|||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {
 | 
					module.exports = {
 | 
				
			||||||
  exec: (command, cb) => {
 | 
					  exec: function (command, cb) {
 | 
				
			||||||
    if (/contains/.test(command)) {
 | 
					    if (/contains/.test(command)) {
 | 
				
			||||||
      if (/notinhistory/.test(command)) return cb(new Error())
 | 
					      if (/notinhistory/.test(command)) return cb(new Error())
 | 
				
			||||||
      return cb(null, `whatever\nmaster\n`)
 | 
					      return cb(null, 'whatever\nmaster\n')
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cb(
 | 
					    cb(
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,12 @@
 | 
				
			|||||||
module.exports = () => ({
 | 
					module.exports = function () {
 | 
				
			||||||
  authenticate: () => true,
 | 
					  return {
 | 
				
			||||||
 | 
					    authenticate: function () {
 | 
				
			||||||
 | 
					      return true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    releases: {
 | 
					    releases: {
 | 
				
			||||||
    createRelease: (release, cb) => cb(null)
 | 
					      createRelease: function (release, cb) {
 | 
				
			||||||
 | 
					        cb(null)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,12 +1,11 @@
 | 
				
			|||||||
const { exec } = require('child_process')
 | 
					var exec = require('child_process').exec
 | 
				
			||||||
const { join } = require('path')
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
const opts = {
 | 
					var opts = {
 | 
				
			||||||
  cwd: join(__dirname, '../../test/registry')
 | 
					  cwd: __dirname
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {
 | 
					module.exports = {
 | 
				
			||||||
  start: exec.bind(null, './start.sh', opts),
 | 
					  start: exec.bind(null, './start.sh', opts),
 | 
				
			||||||
  stop: exec.bind(null, './stop.sh', opts),
 | 
					  stop: exec.bind(null, './stop.sh', opts),
 | 
				
			||||||
  uri: 'http://localhost:15986/registry/_design/app/_rewrite/'
 | 
					  uri: 'http://localhost:' + (process.env.TRAVIS === 'true' ? 5984 : 15986) + '/registry/_design/app/_rewrite/'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -7,19 +7,23 @@ cd $(dirname $0)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
mkdir -p couch
 | 
					mkdir -p couch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# start couchdb as a background process, load local config, specify writable logfiles
 | 
					 | 
				
			||||||
if [[ $TRAVIS = true ]]
 | 
					if [[ $TRAVIS = true ]]
 | 
				
			||||||
then
 | 
					then
 | 
				
			||||||
  echo 'starting couch with sudo'
 | 
					  COUCH=http://admin:password@127.0.0.1:5984
 | 
				
			||||||
  sudo couchdb -b -a local.ini -p couch/pid -o couch/stdout.log -e couch/stderr.log
 | 
					
 | 
				
			||||||
 | 
					  curl -X PUT http://127.0.0.1:5984/_config/admins/admin -d '"password"'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  curl -X PUT $COUCH/_config/couchdb/delayed_commits -d '"false"'
 | 
				
			||||||
 | 
					  curl -X PUT $COUCH/_config/couch_httpd_auth/users_db_public -d '"true"'
 | 
				
			||||||
 | 
					  curl -X PUT $COUCH/_config/couch_httpd_auth/public_fields -d '"appdotnet, avatar, avatarMedium, avatarLarge, date, email, fields, freenode, fullname, github, homepage, name, roles, twitter, type, _id, _rev"'
 | 
				
			||||||
 | 
					  curl -X PUT $COUCH/_config/httpd/secure_rewrites -d '"false"'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
  couchdb -b -a local.ini -p couch/pid -o couch/stdout.log -e couch/stderr.log
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# wait for couch to start
 | 
					 | 
				
			||||||
sleep 5
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  COUCH=http://admin:password@127.0.0.1:15986
 | 
					  COUCH=http://admin:password@127.0.0.1:15986
 | 
				
			||||||
 | 
					  couchdb -b -a local.ini -p couch/pid -o couch/stdout.log -e couch/stderr.log
 | 
				
			||||||
 | 
					  # wait for couch to start
 | 
				
			||||||
 | 
					  sleep 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# create "registry" database
 | 
					# create "registry" database
 | 
				
			||||||
curl -X PUT $COUCH/registry
 | 
					curl -X PUT $COUCH/registry
 | 
				
			||||||
 | 
				
			|||||||
@ -8,5 +8,6 @@ cd $(dirname $0)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
cat couch/{couch,stdout,stderr}.log
 | 
					cat couch/{couch,stdout,stderr}.log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cat couch/pid | xargs kill
 | 
				
			||||||
rm -rf couch
 | 
					rm -rf couch
 | 
				
			||||||
rm -rf data
 | 
					rm -rf data
 | 
				
			||||||
 | 
				
			|||||||
@ -1,30 +1,27 @@
 | 
				
			|||||||
const { join } = require('path')
 | 
					var join = require('path').join
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const { test, tearDown } = require('tap')
 | 
					var tap = require('tap')
 | 
				
			||||||
const rimraf = require('rimraf')
 | 
					var rimraf = require('rimraf')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const registry = require('../registry')
 | 
					var registry = require('../registry')
 | 
				
			||||||
const testModule = require('../lib/test-module')
 | 
					var testModule = require('../lib/test-module')
 | 
				
			||||||
const baseScenario = require('../lib/base-scenario')
 | 
					var baseScenario = require('../lib/base-scenario')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test('change version', (t) => {
 | 
					var tearDown = tap.tearDown
 | 
				
			||||||
 | 
					var test = tap.test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test('change version', {bail: process.env.TRAVIS === 'true'}, function (t) {
 | 
				
			||||||
  t.plan(7)
 | 
					  t.plan(7)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  registry.start((err) => {
 | 
					  registry.start(function (err, stdout, stderr) {
 | 
				
			||||||
    t.error(err, 'registry started')
 | 
					    t.error(err, 'registry started')
 | 
				
			||||||
    if (err) {
 | 
					    if (err) return t.end()
 | 
				
			||||||
      t.end()
 | 
					 | 
				
			||||||
      t.bailout('registry not started')
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    testModule('change-version', (err, cwd) => {
 | 
					    testModule('change-version', registry.uri, function (err, cwd) {
 | 
				
			||||||
      t.error(err, 'test-module created')
 | 
					      t.error(err, 'test-module created')
 | 
				
			||||||
      if (err) {
 | 
					      if (err) return t.end()
 | 
				
			||||||
        t.end()
 | 
					 | 
				
			||||||
        t.bailout('test-module not created')
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      t.test('no version', (tt) => {
 | 
					      t.test('no version', function (tt) {
 | 
				
			||||||
        tt.plan(1)
 | 
					        tt.plan(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        baseScenario(cwd, registry.uri)
 | 
					        baseScenario(cwd, registry.uri)
 | 
				
			||||||
@ -35,7 +32,7 @@ test('change version', (t) => {
 | 
				
			|||||||
          .end(tt.error)
 | 
					          .end(tt.error)
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      t.test('initial version', (tt) => {
 | 
					      t.test('initial version', function (tt) {
 | 
				
			||||||
        tt.plan(1)
 | 
					        tt.plan(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        baseScenario(cwd, registry.uri)
 | 
					        baseScenario(cwd, registry.uri)
 | 
				
			||||||
@ -47,7 +44,7 @@ test('change version', (t) => {
 | 
				
			|||||||
          .end(tt.error)
 | 
					          .end(tt.error)
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      t.test('patch version', (tt) => {
 | 
					      t.test('patch version', function (tt) {
 | 
				
			||||||
        tt.plan(1)
 | 
					        tt.plan(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        baseScenario(cwd, registry.uri)
 | 
					        baseScenario(cwd, registry.uri)
 | 
				
			||||||
@ -59,7 +56,7 @@ test('change version', (t) => {
 | 
				
			|||||||
          .end(tt.error)
 | 
					          .end(tt.error)
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      t.test('feature version', (tt) => {
 | 
					      t.test('feature version', function (tt) {
 | 
				
			||||||
        tt.plan(1)
 | 
					        tt.plan(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        baseScenario(cwd, registry.uri)
 | 
					        baseScenario(cwd, registry.uri)
 | 
				
			||||||
@ -71,7 +68,7 @@ test('change version', (t) => {
 | 
				
			|||||||
          .end(tt.error)
 | 
					          .end(tt.error)
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      t.test('breaking version', (tt) => {
 | 
					      t.test('breaking version', function (tt) {
 | 
				
			||||||
        tt.plan(1)
 | 
					        tt.plan(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        baseScenario(cwd, registry.uri)
 | 
					        baseScenario(cwd, registry.uri)
 | 
				
			||||||
@ -86,10 +83,11 @@ test('change version', (t) => {
 | 
				
			|||||||
  })
 | 
					  })
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tearDown(() => {
 | 
					tearDown(function () {
 | 
				
			||||||
 | 
					  if (process.env.TRAVIS === 'true') return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function cb (err, stdout, stderr) {
 | 
					  function cb (err, stdout, stderr) {
 | 
				
			||||||
    if (err) console.log(err)
 | 
					    if (err) console.log(err)
 | 
				
			||||||
    if (stdout) console.log(stdout)
 | 
					 | 
				
			||||||
    if (stderr) console.log(stderr)
 | 
					    if (stderr) console.log(stderr)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,13 +1,16 @@
 | 
				
			|||||||
const test = require('tap').test
 | 
					var test = require('tap').test
 | 
				
			||||||
const proxyquire = require('proxyquire')
 | 
					var proxyquire = require('proxyquire')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const commits = proxyquire('../../dist/lib/commits', {
 | 
					var commits = proxyquire('../../src/lib/commits', {
 | 
				
			||||||
 | 
					  'npmlog': {
 | 
				
			||||||
 | 
					    error: function () {}
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  'child_process': require('../mocks/child-process')
 | 
					  'child_process': require('../mocks/child-process')
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test('commits since last release', (t) => {
 | 
					test('commits since last release', function (t) {
 | 
				
			||||||
  t.test('get all commits', (tt) => {
 | 
					  t.test('get all commits', function (tt) {
 | 
				
			||||||
    commits({lastRelease: {}, options: {branch: 'master'}}, (err, commits) => {
 | 
					    commits({lastRelease: {}, options: {branch: 'master'}}, function (err, commits) {
 | 
				
			||||||
      tt.error(err)
 | 
					      tt.error(err)
 | 
				
			||||||
      tt.is(commits.length, 2, 'all commits')
 | 
					      tt.is(commits.length, 2, 'all commits')
 | 
				
			||||||
      tt.is(commits[0].hash, 'hash-one', 'parsed hash')
 | 
					      tt.is(commits[0].hash, 'hash-one', 'parsed hash')
 | 
				
			||||||
@ -17,8 +20,8 @@ test('commits since last release', (t) => {
 | 
				
			|||||||
    })
 | 
					    })
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.test('get commits since hash', (tt) => {
 | 
					  t.test('get commits since hash', function (tt) {
 | 
				
			||||||
    commits({lastRelease: {gitHead: 'hash'}, options: {branch: 'master'}}, (err, commits) => {
 | 
					    commits({lastRelease: {gitHead: 'hash'}, options: {branch: 'master'}}, function (err, commits) {
 | 
				
			||||||
      tt.error(err)
 | 
					      tt.error(err)
 | 
				
			||||||
      tt.is(commits.length, 1, 'specified commits')
 | 
					      tt.is(commits.length, 1, 'specified commits')
 | 
				
			||||||
      tt.is(commits[0].hash, 'hash-one', 'parsed hash')
 | 
					      tt.is(commits[0].hash, 'hash-one', 'parsed hash')
 | 
				
			||||||
@ -28,8 +31,8 @@ test('commits since last release', (t) => {
 | 
				
			|||||||
    })
 | 
					    })
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.test('get commits since hash', (tt) => {
 | 
					  t.test('get commits since hash', function (tt) {
 | 
				
			||||||
    commits({lastRelease: {gitHead: 'notinhistory'}, options: {branch: 'notmaster'}}, (err, commits) => {
 | 
					    commits({lastRelease: {gitHead: 'notinhistory'}, options: {branch: 'notmaster'}}, function (err, commits) {
 | 
				
			||||||
      tt.ok(err)
 | 
					      tt.ok(err)
 | 
				
			||||||
      tt.is(err.code, 'ENOTINHISTORY')
 | 
					      tt.is(err.code, 'ENOTINHISTORY')
 | 
				
			||||||
      tt.end()
 | 
					      tt.end()
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,8 @@
 | 
				
			|||||||
const test = require('tap').test
 | 
					const test = require('tap').test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const getRegistry = require('../../dist/lib/get-registry')
 | 
					const getRegistry = require('../../src/lib/get-registry')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test('get correct registry', (t) => {
 | 
					test('get correct registry', function (t) {
 | 
				
			||||||
  t.is(getRegistry({
 | 
					  t.is(getRegistry({
 | 
				
			||||||
    name: 'publish-config',
 | 
					    name: 'publish-config',
 | 
				
			||||||
    publishConfig: {
 | 
					    publishConfig: {
 | 
				
			||||||
@ -10,20 +10,34 @@ test('get correct registry', (t) => {
 | 
				
			|||||||
    }},
 | 
					    }},
 | 
				
			||||||
  {}), 'a')
 | 
					  {}), 'a')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.is(getRegistry({name: 'normal'}, {get: () => 'b'}), 'b')
 | 
					  t.is(getRegistry({name: 'normal'}, {
 | 
				
			||||||
 | 
					    get: function () {
 | 
				
			||||||
 | 
					      return 'b'
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }), 'b')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.is(getRegistry({name: 'normal'}, {get: () => null}), 'https://registry.npmjs.org/')
 | 
					  t.is(getRegistry({name: 'normal'}, {
 | 
				
			||||||
 | 
					    get: function () {
 | 
				
			||||||
 | 
					      return null
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }), 'https://registry.npmjs.org/')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.is(getRegistry({name: '@scoped/foo'}, {
 | 
					  t.is(getRegistry({name: '@scoped/foo'}, {
 | 
				
			||||||
    get: (input) => input === '@scoped/registry' ? 'c' : 'd'
 | 
					    get: function (input) {
 | 
				
			||||||
 | 
					      return input === '@scoped/registry' ? 'c' : 'd'
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }), 'c')
 | 
					  }), 'c')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.is(getRegistry({name: '@scoped/bar'}, {
 | 
					  t.is(getRegistry({name: '@scoped/bar'}, {
 | 
				
			||||||
    get: () => 'e'
 | 
					    get: function () {
 | 
				
			||||||
 | 
					      return 'e'
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }), 'e')
 | 
					  }), 'e')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.is(getRegistry({name: '@scoped/baz'}, {
 | 
					  t.is(getRegistry({name: '@scoped/baz'}, {
 | 
				
			||||||
    get: () => null
 | 
					    get: function () {
 | 
				
			||||||
 | 
					      return null
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }), 'https://registry.npmjs.org/')
 | 
					  }), 'https://registry.npmjs.org/')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.end()
 | 
					  t.end()
 | 
				
			||||||
 | 
				
			|||||||
@ -1,11 +1,11 @@
 | 
				
			|||||||
const test = require('tap').test
 | 
					var test = require('tap').test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const plugins = require('../../dist/lib/plugins')
 | 
					var plugins = require('../../src/lib/plugins')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test('export plugins', (t) => {
 | 
					test('export plugins', function (t) {
 | 
				
			||||||
  t.plan(5)
 | 
					  t.plan(5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const defaultPlugins = plugins({})
 | 
					  var defaultPlugins = plugins({})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.is(typeof defaultPlugins.analyzeCommits, 'function')
 | 
					  t.is(typeof defaultPlugins.analyzeCommits, 'function')
 | 
				
			||||||
  t.is(typeof defaultPlugins.generateNotes, 'function')
 | 
					  t.is(typeof defaultPlugins.generateNotes, 'function')
 | 
				
			||||||
@ -14,51 +14,51 @@ test('export plugins', (t) => {
 | 
				
			|||||||
  t.is(typeof defaultPlugins.getLastRelease, 'function')
 | 
					  t.is(typeof defaultPlugins.getLastRelease, 'function')
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test('plugin pipelines', (t) => {
 | 
					test('plugin pipelines', function (t) {
 | 
				
			||||||
  t.plan(3)
 | 
					  t.plan(3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.test('get all results', (tt) => {
 | 
					  t.test('get all results', function (tt) {
 | 
				
			||||||
    const pipelinePlugins = plugins({
 | 
					    var pipelinePlugins = plugins({
 | 
				
			||||||
      verifyRelease: [
 | 
					      verifyRelease: [
 | 
				
			||||||
        './dist/lib/plugin-noop',
 | 
					        './src/lib/plugin-noop',
 | 
				
			||||||
        './.test/mocks/plugin-result-a',
 | 
					        './test/mocks/plugin-result-a',
 | 
				
			||||||
        './.test/mocks/plugin-result-b'
 | 
					        './test/mocks/plugin-result-b'
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pipelinePlugins.verifyRelease({}, (err, results) => {
 | 
					    pipelinePlugins.verifyRelease({}, function (err, results) {
 | 
				
			||||||
      tt.error(err)
 | 
					      tt.error(err)
 | 
				
			||||||
      tt.same(results, [undefined, 'a', 'b'])
 | 
					      tt.same(results, [undefined, 'a', 'b'])
 | 
				
			||||||
      tt.end()
 | 
					      tt.end()
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.test('get first error', (tt) => {
 | 
					  t.test('get first error', function (tt) {
 | 
				
			||||||
    const pipelinePlugins = plugins({
 | 
					    var pipelinePlugins = plugins({
 | 
				
			||||||
      verifyConditions: [
 | 
					      verifyConditions: [
 | 
				
			||||||
        './dist/lib/plugin-noop',
 | 
					        './src/lib/plugin-noop',
 | 
				
			||||||
        './.test/mocks/plugin-error-a',
 | 
					        './test/mocks/plugin-error-a',
 | 
				
			||||||
        './.test/mocks/plugin-error-b'
 | 
					        './test/mocks/plugin-error-b'
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pipelinePlugins.verifyConditions({}, (err) => {
 | 
					    pipelinePlugins.verifyConditions({}, function (err) {
 | 
				
			||||||
      tt.is(err.message, 'a')
 | 
					      tt.is(err.message, 'a')
 | 
				
			||||||
      tt.end()
 | 
					      tt.end()
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.test('get error and only results before', (tt) => {
 | 
					  t.test('get error and only results before', function (tt) {
 | 
				
			||||||
    const pipelinePlugins = plugins({
 | 
					    var pipelinePlugins = plugins({
 | 
				
			||||||
      verifyRelease: [
 | 
					      verifyRelease: [
 | 
				
			||||||
        './dist/lib/plugin-noop',
 | 
					        './src/lib/plugin-noop',
 | 
				
			||||||
        './.test/mocks/plugin-result-a',
 | 
					        './test/mocks/plugin-result-a',
 | 
				
			||||||
        './.test/mocks/plugin-error-b',
 | 
					        './test/mocks/plugin-error-b',
 | 
				
			||||||
        './.test/mocks/plugin-result-b'
 | 
					        './test/mocks/plugin-result-b'
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pipelinePlugins.verifyRelease({}, (err, results) => {
 | 
					    pipelinePlugins.verifyRelease({}, function (err, results) {
 | 
				
			||||||
      tt.is(err.message, 'b')
 | 
					      tt.is(err.message, 'b')
 | 
				
			||||||
      tt.same(results, [undefined, 'a', undefined])
 | 
					      tt.same(results, [undefined, 'a', undefined])
 | 
				
			||||||
      tt.end()
 | 
					      tt.end()
 | 
				
			||||||
@ -66,18 +66,18 @@ test('plugin pipelines', (t) => {
 | 
				
			|||||||
  })
 | 
					  })
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test('normalize and load plugin', (t) => {
 | 
					test('normalize and load plugin', function (t) {
 | 
				
			||||||
  t.test('load from string', (tt) => {
 | 
					  t.test('load from string', function (tt) {
 | 
				
			||||||
    const plugin = plugins.normalize('./dist/lib/plugin-noop')
 | 
					    var plugin = plugins.normalize('./src/lib/plugin-noop')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    tt.is(typeof plugin, 'function')
 | 
					    tt.is(typeof plugin, 'function')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    tt.end()
 | 
					    tt.end()
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.test('load from object', (tt) => {
 | 
					  t.test('load from object', function (tt) {
 | 
				
			||||||
    const plugin = plugins.normalize({
 | 
					    var plugin = plugins.normalize({
 | 
				
			||||||
      path: './dist/lib/plugin-noop'
 | 
					      path: './src/lib/plugin-noop'
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    tt.is(typeof plugin, 'function')
 | 
					    tt.is(typeof plugin, 'function')
 | 
				
			||||||
@ -85,8 +85,8 @@ test('normalize and load plugin', (t) => {
 | 
				
			|||||||
    tt.end()
 | 
					    tt.end()
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.test('load from object', (tt) => {
 | 
					  t.test('load from fallback', function (tt) {
 | 
				
			||||||
    const plugin = plugins.normalize(null, '../../dist/lib/plugin-noop')
 | 
					    var plugin = plugins.normalize(null, '../../src/lib/plugin-noop')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    tt.is(typeof plugin, 'function')
 | 
					    tt.is(typeof plugin, 'function')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,20 +1,24 @@
 | 
				
			|||||||
const { defaults } = require('lodash')
 | 
					var defaults = require('lodash').defaults
 | 
				
			||||||
const test = require('tap').test
 | 
					var test = require('tap').test
 | 
				
			||||||
const proxyquire = require('proxyquire')
 | 
					var proxyquire = require('proxyquire')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const post = proxyquire('../../dist/post', {
 | 
					var post = proxyquire('../../src/post', {
 | 
				
			||||||
  'git-head': require('../mocks/git-head'),
 | 
					  'git-head': require('../mocks/git-head'),
 | 
				
			||||||
  github: require('../mocks/github')
 | 
					  github: require('../mocks/github')
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const pkg = {
 | 
					var pkg = {
 | 
				
			||||||
  version: '1.0.0',
 | 
					  version: '1.0.0',
 | 
				
			||||||
  repository: {url: 'http://github.com/whats/up.git'}
 | 
					  repository: {url: 'http://github.com/whats/up.git'}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const plugins = {generateNotes: (pkg, cb) => cb(null, 'the log')}
 | 
					var plugins = {
 | 
				
			||||||
 | 
					  generateNotes: function (pkg, cb) {
 | 
				
			||||||
 | 
					    cb(null, 'the log')
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const defaultRelease = {
 | 
					var defaultRelease = {
 | 
				
			||||||
  owner: 'whats',
 | 
					  owner: 'whats',
 | 
				
			||||||
  repo: 'up',
 | 
					  repo: 'up',
 | 
				
			||||||
  name: 'v1.0.0',
 | 
					  name: 'v1.0.0',
 | 
				
			||||||
@ -23,13 +27,13 @@ const defaultRelease = {
 | 
				
			|||||||
  body: 'the log'
 | 
					  body: 'the log'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test('full post run', (t) => {
 | 
					test('full post run', function (t) {
 | 
				
			||||||
  t.test('in debug mode w/o token', (tt) => {
 | 
					  t.test('in debug mode w/o token', function (tt) {
 | 
				
			||||||
    post({
 | 
					    post({
 | 
				
			||||||
      options: {debug: true},
 | 
					      options: {debug: true},
 | 
				
			||||||
      pkg,
 | 
					      pkg: pkg,
 | 
				
			||||||
      plugins
 | 
					      plugins: plugins
 | 
				
			||||||
    }, (err, published, release) => {
 | 
					    }, function (err, published, release) {
 | 
				
			||||||
      tt.error(err)
 | 
					      tt.error(err)
 | 
				
			||||||
      tt.is(published, false)
 | 
					      tt.is(published, false)
 | 
				
			||||||
      tt.match(release, defaults({draft: true}, defaultRelease))
 | 
					      tt.match(release, defaults({draft: true}, defaultRelease))
 | 
				
			||||||
@ -38,12 +42,12 @@ test('full post run', (t) => {
 | 
				
			|||||||
    })
 | 
					    })
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.test('in debug mode w/token', (tt) => {
 | 
					  t.test('in debug mode w/token', function (tt) {
 | 
				
			||||||
    post({
 | 
					    post({
 | 
				
			||||||
      options: {debug: true, githubToken: 'yo'},
 | 
					      options: {debug: true, githubToken: 'yo'},
 | 
				
			||||||
      pkg,
 | 
					      pkg: pkg,
 | 
				
			||||||
      plugins
 | 
					      plugins: plugins
 | 
				
			||||||
    }, (err, published, release) => {
 | 
					    }, function (err, published, release) {
 | 
				
			||||||
      tt.error(err)
 | 
					      tt.error(err)
 | 
				
			||||||
      tt.is(published, true)
 | 
					      tt.is(published, true)
 | 
				
			||||||
      tt.match(release, defaults({draft: true}, defaultRelease))
 | 
					      tt.match(release, defaults({draft: true}, defaultRelease))
 | 
				
			||||||
@ -52,12 +56,12 @@ test('full post run', (t) => {
 | 
				
			|||||||
    })
 | 
					    })
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.test('production', (tt) => {
 | 
					  t.test('production', function (tt) {
 | 
				
			||||||
    post({
 | 
					    post({
 | 
				
			||||||
      options: {githubToken: 'yo'},
 | 
					      options: {githubToken: 'yo'},
 | 
				
			||||||
      pkg,
 | 
					      pkg: pkg,
 | 
				
			||||||
      plugins
 | 
					      plugins: plugins
 | 
				
			||||||
    }, (err, published, release) => {
 | 
					    }, function (err, published, release) {
 | 
				
			||||||
      tt.error(err)
 | 
					      tt.error(err)
 | 
				
			||||||
      tt.is(published, true)
 | 
					      tt.is(published, true)
 | 
				
			||||||
      tt.match(release, defaultRelease)
 | 
					      tt.match(release, defaultRelease)
 | 
				
			||||||
 | 
				
			|||||||
@ -1,55 +1,59 @@
 | 
				
			|||||||
const test = require('tap').test
 | 
					var test = require('tap').test
 | 
				
			||||||
const proxyquire = require('proxyquire')
 | 
					var proxyquire = require('proxyquire')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require('../mocks/registry')
 | 
					require('../mocks/registry')
 | 
				
			||||||
const pre = proxyquire('../../dist/pre', {
 | 
					var pre = proxyquire('../../src/pre', {
 | 
				
			||||||
  './lib/commits': proxyquire('../../dist/lib/commits', {
 | 
					  './lib/commits': proxyquire('../../src/lib/commits', {
 | 
				
			||||||
    'child_process': require('../mocks/child-process')
 | 
					    'child_process': require('../mocks/child-process')
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const versions = {
 | 
					var versions = {
 | 
				
			||||||
  available: '1.0.0'
 | 
					  available: '1.0.0'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const plugins = {
 | 
					var plugins = {
 | 
				
			||||||
  verifyRelease: (release, cb) => cb(null, release),
 | 
					  verifyRelease: function (release, cb) {
 | 
				
			||||||
  analyzeCommits: (commits, cb) => cb(null, 'major'),
 | 
					    cb(null, release)
 | 
				
			||||||
  getLastRelease: ({ pkg }, cb) => {
 | 
					  },
 | 
				
			||||||
    cb(null, {version: versions[pkg.name] || null, gitHead: 'HEAD'})
 | 
					  analyzeCommits: function (commits, cb) {
 | 
				
			||||||
 | 
					    cb(null, 'major')
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  getLastRelease: function (config, cb) {
 | 
				
			||||||
 | 
					    cb(null, {version: versions[config.pkg.name] || null, gitHead: 'HEAD'})
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const npm = {
 | 
					var npm = {
 | 
				
			||||||
  registry: 'http://registry.npmjs.org/',
 | 
					  registry: 'http://registry.npmjs.org/',
 | 
				
			||||||
  tag: 'latest'
 | 
					  tag: 'latest'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test('full pre run', (t) => {
 | 
					test('full pre run', function (t) {
 | 
				
			||||||
  t.test('increase version', (tt) => {
 | 
					  t.test('increase version', function (tt) {
 | 
				
			||||||
    tt.plan(3)
 | 
					    tt.plan(3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pre({
 | 
					    pre({
 | 
				
			||||||
      options: {branch: 'master'},
 | 
					      options: {branch: 'master'},
 | 
				
			||||||
      npm,
 | 
					      npm: npm,
 | 
				
			||||||
      pkg: {name: 'available'},
 | 
					      pkg: {name: 'available'},
 | 
				
			||||||
      plugins
 | 
					      plugins: plugins
 | 
				
			||||||
    }, (err, release) => {
 | 
					    }, function (err, release) {
 | 
				
			||||||
      tt.error(err)
 | 
					      tt.error(err)
 | 
				
			||||||
      tt.is(release.type, 'major')
 | 
					      tt.is(release.type, 'major')
 | 
				
			||||||
      tt.is(release.version, '2.0.0')
 | 
					      tt.is(release.version, '2.0.0')
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.test('increase version', (tt) => {
 | 
					  t.test('increase version', function (tt) {
 | 
				
			||||||
    tt.plan(3)
 | 
					    tt.plan(3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pre({
 | 
					    pre({
 | 
				
			||||||
      options: {branch: 'master'},
 | 
					      options: {branch: 'master'},
 | 
				
			||||||
      npm,
 | 
					      npm: npm,
 | 
				
			||||||
      pkg: {name: 'unavailable'},
 | 
					      pkg: {name: 'unavailable'},
 | 
				
			||||||
      plugins
 | 
					      plugins: plugins
 | 
				
			||||||
    }, (err, release) => {
 | 
					    }, function (err, release) {
 | 
				
			||||||
      tt.error(err)
 | 
					      tt.error(err)
 | 
				
			||||||
      tt.is(release.type, 'initial')
 | 
					      tt.is(release.type, 'initial')
 | 
				
			||||||
      tt.is(release.version, '1.0.0')
 | 
					      tt.is(release.version, '1.0.0')
 | 
				
			||||||
 | 
				
			|||||||
@ -1,9 +1,9 @@
 | 
				
			|||||||
const test = require('tap').test
 | 
					var test = require('tap').test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const type = require('../../dist/lib/type')
 | 
					var type = require('../../src/lib/type')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test('get type from commits', (t) => {
 | 
					test('get type from commits', function (t) {
 | 
				
			||||||
  t.test('get type from plugin', (tt) => {
 | 
					  t.test('get type from plugin', function (tt) {
 | 
				
			||||||
    tt.plan(2)
 | 
					    tt.plan(2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    type({
 | 
					    type({
 | 
				
			||||||
@ -12,33 +12,45 @@ test('get type from commits', (t) => {
 | 
				
			|||||||
        message: 'a'
 | 
					        message: 'a'
 | 
				
			||||||
      }],
 | 
					      }],
 | 
				
			||||||
      lastRelease: {version: '1.0.0'},
 | 
					      lastRelease: {version: '1.0.0'},
 | 
				
			||||||
      plugins: {analyzeCommits: (config, cb) => cb(null, 'major')}
 | 
					      plugins: {
 | 
				
			||||||
    }, (err, type) => {
 | 
					        analyzeCommits: function (config, cb) {
 | 
				
			||||||
 | 
					          cb(null, 'major')
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }, function (err, type) {
 | 
				
			||||||
      tt.error(err)
 | 
					      tt.error(err)
 | 
				
			||||||
      tt.is(type, 'major')
 | 
					      tt.is(type, 'major')
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.test('error when no changes', (tt) => {
 | 
					  t.test('error when no changes', function (tt) {
 | 
				
			||||||
    tt.plan(1)
 | 
					    tt.plan(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    type({
 | 
					    type({
 | 
				
			||||||
      commits: [],
 | 
					      commits: [],
 | 
				
			||||||
      lastRelease: {},
 | 
					      lastRelease: {},
 | 
				
			||||||
      plugins: {analyzeCommits: (config, cb) => cb(null, null)}
 | 
					      plugins: {
 | 
				
			||||||
    }, (err) => {
 | 
					        analyzeCommits: function (config, cb) {
 | 
				
			||||||
 | 
					          cb(null, null)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }, function (err) {
 | 
				
			||||||
      tt.is(err.code, 'ENOCHANGE')
 | 
					      tt.is(err.code, 'ENOCHANGE')
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.test('initial version', (tt) => {
 | 
					  t.test('initial version', function (tt) {
 | 
				
			||||||
    tt.plan(2)
 | 
					    tt.plan(2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    type({
 | 
					    type({
 | 
				
			||||||
      commits: [],
 | 
					      commits: [],
 | 
				
			||||||
      lastRelease: {},
 | 
					      lastRelease: {},
 | 
				
			||||||
      plugins: {analyzeCommits: (config, cb) => cb(null, 'major')}
 | 
					      plugins: {
 | 
				
			||||||
    }, (err, type) => {
 | 
					        analyzeCommits: function (config, cb) {
 | 
				
			||||||
 | 
					          cb(null, 'major')
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }, function (err, type) {
 | 
				
			||||||
      tt.error(err)
 | 
					      tt.error(err)
 | 
				
			||||||
      tt.is(type, 'initial')
 | 
					      tt.is(type, 'initial')
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
				
			|||||||
@ -1,10 +1,10 @@
 | 
				
			|||||||
const test = require('tap').test
 | 
					var test = require('tap').test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const verify = require('../../dist/lib/verify')
 | 
					var verify = require('../../src/lib/verify')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test('verify pkg, options and env', (t) => {
 | 
					test('verify pkg, options and env', function (t) {
 | 
				
			||||||
  t.test('dry run verification', (tt) => {
 | 
					  t.test('dry run verification', function (tt) {
 | 
				
			||||||
    const noErrors = verify({
 | 
					    var noErrors = verify({
 | 
				
			||||||
      options: {debug: true},
 | 
					      options: {debug: true},
 | 
				
			||||||
      pkg: {
 | 
					      pkg: {
 | 
				
			||||||
        name: 'package',
 | 
					        name: 'package',
 | 
				
			||||||
@ -16,7 +16,7 @@ test('verify pkg, options and env', (t) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    tt.is(noErrors.length, 0)
 | 
					    tt.is(noErrors.length, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const errors = verify({
 | 
					    var errors = verify({
 | 
				
			||||||
      options: {debug: true},
 | 
					      options: {debug: true},
 | 
				
			||||||
      pkg: {}
 | 
					      pkg: {}
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
@ -25,7 +25,7 @@ test('verify pkg, options and env', (t) => {
 | 
				
			|||||||
    tt.is(errors[0].code, 'ENOPKGNAME')
 | 
					    tt.is(errors[0].code, 'ENOPKGNAME')
 | 
				
			||||||
    tt.is(errors[1].code, 'ENOPKGREPO')
 | 
					    tt.is(errors[1].code, 'ENOPKGREPO')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const errors2 = verify({
 | 
					    var errors2 = verify({
 | 
				
			||||||
      options: {debug: true},
 | 
					      options: {debug: true},
 | 
				
			||||||
      pkg: {
 | 
					      pkg: {
 | 
				
			||||||
        name: 'package',
 | 
					        name: 'package',
 | 
				
			||||||
@ -41,8 +41,8 @@ test('verify pkg, options and env', (t) => {
 | 
				
			|||||||
    tt.end()
 | 
					    tt.end()
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  t.test('publish verification', (tt) => {
 | 
					  t.test('publish verification', function (tt) {
 | 
				
			||||||
    const noErrors = verify({
 | 
					    var noErrors = verify({
 | 
				
			||||||
      env: {NPM_TOKEN: 'yo'},
 | 
					      env: {NPM_TOKEN: 'yo'},
 | 
				
			||||||
      options: {githubToken: 'sup'},
 | 
					      options: {githubToken: 'sup'},
 | 
				
			||||||
      pkg: {
 | 
					      pkg: {
 | 
				
			||||||
@ -55,7 +55,7 @@ test('verify pkg, options and env', (t) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    tt.is(noErrors.length, 0)
 | 
					    tt.is(noErrors.length, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const errors = verify({env: {}, options: {}, pkg: {}})
 | 
					    var errors = verify({env: {}, options: {}, pkg: {}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    tt.is(errors.length, 4)
 | 
					    tt.is(errors.length, 4)
 | 
				
			||||||
    tt.is(errors[0].code, 'ENOPKGNAME')
 | 
					    tt.is(errors[0].code, 'ENOPKGNAME')
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user