chore: remove babel, fix integration tests
This commit removes babel/es6 from all source and test files, because it was introducing a lot of overhead and only little gain. This commit fixes and enables integration tests on Travis. This commit fixes #153 and #151 along the way. _Originally this commit should have only removed babel, but without working tests that's a bit too hairy._ _I only realized that half way into removing babel/es6, so things are all over the place now._ Closes #153, Closes #151
This commit is contained in:
		
							parent
							
								
									88334523e4
								
							
						
					
					
						commit
						5cdc732b68
					
				
							
								
								
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,14 +1,9 @@ | ||||
| # common | ||||
| coverage | ||||
| node_modules | ||||
| test/registry/couch | ||||
| test/registry/data | ||||
| test/tmp | ||||
| *.log | ||||
| *.dump | ||||
| .DS_Store | ||||
| .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: | ||||
|   email: false | ||||
| node_js: | ||||
| - v5 | ||||
| - v4 | ||||
| - iojs-v2 | ||||
| - iojs-v1 | ||||
| - 5 | ||||
| - 4 | ||||
| - iojs | ||||
| - '0.12' | ||||
| - '0.10' | ||||
| before_install: | ||||
| @ -19,3 +18,5 @@ before_script: | ||||
| after_success: | ||||
| - npm run coverage:upload | ||||
| - 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? | ||||
| 
 | ||||
| `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. | ||||
| 
 | ||||
| Note: Currently integration-tests don’t run on Travis CI. If you know stuff about npm/Travis/Couch: Please help! | ||||
| `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. | ||||
| 
 | ||||
| ## Badge | ||||
| 
 | ||||
|  | ||||
| @ -1,13 +1,163 @@ | ||||
| #!/usr/bin/env node
 | ||||
| 
 | ||||
| /* istanbul ignore next */ | ||||
| try { | ||||
|   require('../dist') | ||||
| } catch (err) { | ||||
|   if (err.code === 'MODULE_NOT_FOUND') { | ||||
|     require('babel/register') | ||||
|     require('../src') | ||||
|   } else { | ||||
|     console.log(err) | ||||
|   } | ||||
| 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 { | ||||
|             var shrinkwrap = JSON.parse(fs.readFileSync('./npm-shrinkwrap.json')) | ||||
|             shrinkwrap.version = release.version | ||||
|             fs.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.') | ||||
|           } | ||||
| 
 | ||||
|           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 { | ||||
|     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", | ||||
|   "description": "automated semver compliant package publishing", | ||||
|   "version": "0.0.0-placeholder", | ||||
|   "author": "Stephan Bönnemann <stephan@boennemann.me> (http://boennemann.me)", | ||||
|   "bin": { | ||||
|     "semantic-release": "./bin/semantic-release.js" | ||||
|     "semantic-release": "bin/semantic-release.js" | ||||
|   }, | ||||
|   "bugs": { | ||||
|     "url": "https://github.com/semantic-release/semantic-release/issues" | ||||
|   }, | ||||
|   "config": { | ||||
|     "nyc": { | ||||
|       "exclude": [ | ||||
|         ".test", | ||||
|         "node_modules" | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   "czConfig": { | ||||
|     "path": "node_modules/cz-conventional-changelog/" | ||||
|   }, | ||||
| @ -40,7 +33,6 @@ | ||||
|     "semver": "^5.0.3" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "babel": "^5.8.21", | ||||
|     "coveralls": "^2.11.4", | ||||
|     "cz-conventional-changelog": "^1.1.4", | ||||
|     "mkdirp": "^0.5.1", | ||||
| @ -49,7 +41,7 @@ | ||||
|     "npm-registry-couchapp": "^2.6.11", | ||||
|     "nyc": "^5.0.0", | ||||
|     "proxyquire": "^1.7.3", | ||||
|     "rimraf": "^2.4.3", | ||||
|     "rimraf": "^2.5.0", | ||||
|     "standard": "^5.3.0", | ||||
|     "tap": "^2.1.1" | ||||
|   }, | ||||
| @ -70,7 +62,11 @@ | ||||
|     "version" | ||||
|   ], | ||||
|   "license": "MIT", | ||||
|   "main": "dist/index.js", | ||||
|   "main": "bin/semantic-release.js", | ||||
|   "files": [ | ||||
|     "bin", | ||||
|     "src" | ||||
|   ], | ||||
|   "publishConfig": { | ||||
|     "tag": "next" | ||||
|   }, | ||||
| @ -82,17 +78,12 @@ | ||||
|     "url": "git+https://github.com/semantic-release/semantic-release.git" | ||||
|   }, | ||||
|   "scripts": { | ||||
|     "build": "rimraf dist && mkdirp dist && babel src --out-dir dist", | ||||
|     "coverage": "nyc report", | ||||
|     "coverage:upload": "npm run coverage -- --reporter=lcovonly && coveralls < coverage/lcov.info", | ||||
|     "prepublish": "npm run build", | ||||
|     "pretest:integration": "npm run build && npm run test:build", | ||||
|     "pretest:unit": "npm run build && npm run test:build", | ||||
|     "semantic-release": "./bin/semantic-release.js pre && npm dedupe && npm publish && ./bin/semantic-release.js post", | ||||
|     "test": "npm run test:style && npm run test:unit", | ||||
|     "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" | ||||
|     "coverage:upload": "npm run coverage -s -- --reporter=text-lcov | coveralls", | ||||
|     "pretest": "standard", | ||||
|     "semantic-release": "./bin/semantic-release.js pre && npm publish && ./bin/semantic-release.js post", | ||||
|     "test": "npm run test:unit && npm run test:integration", | ||||
|     "test:integration": "tap --no-cov test/scenarios/*.js", | ||||
|     "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) { | ||||
|   const branch = options.branch | ||||
|   const from = lastRelease.gitHead | ||||
|   const range = (from ? from + '..' : '') + 'HEAD' | ||||
| module.exports = function (config, cb) { | ||||
|   var lastRelease = config.lastRelease | ||||
|   var options = config.options | ||||
|   var branch = options.branch | ||||
|   var from = lastRelease.gitHead | ||||
|   var range = (from ? from + '..' : '') + 'HEAD' | ||||
| 
 | ||||
|   if (!from) return extract() | ||||
| 
 | ||||
|   exec(`git branch --contains ${from}`, (err, stdout) => { | ||||
|     let inHistory = false | ||||
|     let branches | ||||
|   exec('git branch --contains ' + from, function (err, stdout) { | ||||
|     var inHistory = false | ||||
|     var branches | ||||
| 
 | ||||
|     if (!err && stdout) { | ||||
|       branches = stdout.split('\n') | ||||
|       .map((result) => { | ||||
|       .map(function (result) { | ||||
|         if (branch === result.replace('*', '').trim()) { | ||||
|           inHistory = true | ||||
|           return null | ||||
|         } | ||||
|         return result.trim() | ||||
|       }) | ||||
|       .filter(branch => !!branch) | ||||
|       .filter(function (branch) { | ||||
|         return !!branch | ||||
|       }) | ||||
|     } | ||||
| 
 | ||||
|     if (!inHistory) { | ||||
|       log.error('commits', | ||||
| `The commit the last release of this package was derived from is not in the direct history of the "${branch}" branch.
 | ||||
| This means semantic-release can not extract the commits between now and then. | ||||
| This is usually caused by force pushing, releasing from an unrelated branch, or using an already existing package name. | ||||
| 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 * ')}` | ||||
|         '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.\n' + | ||||
|         '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 | ||||
|         ? '\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')) | ||||
| @ -44,16 +48,18 @@ You can recover from this error by publishing manually or restoring the commit " | ||||
| 
 | ||||
|   function extract () { | ||||
|     exec( | ||||
|       `git log -E --format=%H==SPLIT==%B==END== ${range}`, | ||||
|       (err, stdout) => { | ||||
|       'git log -E --format=%H==SPLIT==%B==END== ' + range, | ||||
|       function (err, stdout) { | ||||
|         if (err) return cb(err) | ||||
| 
 | ||||
|         cb(null, String(stdout).split('==END==\n') | ||||
| 
 | ||||
|         .filter((raw) => !!raw.trim()) | ||||
|         .filter(function (raw) { | ||||
|           return !!raw.trim() | ||||
|         }) | ||||
| 
 | ||||
|         .map((raw) => { | ||||
|           const data = raw.split('==SPLIT==') | ||||
|         .map(function (raw) { | ||||
|           var data = raw.split('==SPLIT==') | ||||
|           return { | ||||
|             hash: data[0], | ||||
|             message: data[1] | ||||
|  | ||||
| @ -3,8 +3,8 @@ module.exports = function (pkg, conf) { | ||||
| 
 | ||||
|   if (pkg.name[0] !== '@') return conf.get('registry') || 'https://registry.npmjs.org/' | ||||
| 
 | ||||
|   const scope = pkg.name.split('/')[0] | ||||
|   const scopedRegistry = conf.get(`${scope}/registry`) | ||||
|   var scope = pkg.name.split('/')[0] | ||||
|   var scopedRegistry = conf.get(scope + '/registry') | ||||
| 
 | ||||
|   if (scopedRegistry) return scopedRegistry | ||||
| 
 | ||||
|  | ||||
| @ -1,14 +1,14 @@ | ||||
| const relative = require('require-relative') | ||||
| const series = require('run-series') | ||||
| var relative = require('require-relative') | ||||
| var series = require('run-series') | ||||
| 
 | ||||
| let exports = module.exports = function (options) { | ||||
| var exports = module.exports = function (options) { | ||||
|   var plugins = { | ||||
|     analyzeCommits: exports.normalize(options.analyzeCommits, '@semantic-release/commit-analyzer'), | ||||
|     generateNotes: exports.normalize(options.generateNotes, '@semantic-release/release-notes-generator'), | ||||
|     getLastRelease: exports.normalize(options.getLastRelease, '@semantic-release/last-release-npm') | ||||
|   } | ||||
| 
 | ||||
|   ;['verifyConditions', 'verifyRelease'].forEach((plugin) => { | ||||
|   ;['verifyConditions', 'verifyRelease'].forEach(function (plugin) { | ||||
|     if (!Array.isArray(options[plugin])) { | ||||
|       plugins[plugin] = exports.normalize( | ||||
|         options[plugin], | ||||
| @ -20,7 +20,7 @@ let exports = module.exports = function (options) { | ||||
|     } | ||||
| 
 | ||||
|     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) | ||||
|       }) | ||||
| 
 | ||||
|  | ||||
| @ -1,9 +1,10 @@ | ||||
| const SemanticReleaseError = require('@semantic-release/error') | ||||
| var SemanticReleaseError = require('@semantic-release/error') | ||||
| 
 | ||||
| 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 (!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}) { | ||||
|   let errors = [] | ||||
| module.exports = function (config) { | ||||
|   var pkg = config.pkg | ||||
|   var options = config.options | ||||
|   var env = config.env | ||||
|   var errors = [] | ||||
| 
 | ||||
|   if (!pkg.name) { | ||||
|     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') | ||||
| const GitHubApi = require('github') | ||||
| const parseSlug = require('parse-github-repo-url') | ||||
| var gitHead = require('git-head') | ||||
| var GitHubApi = require('github') | ||||
| var parseSlug = require('parse-github-repo-url') | ||||
| 
 | ||||
| module.exports = function (config, cb) { | ||||
|   const { pkg, options, plugins } = config | ||||
|   const ghConfig = options.githubUrl ? url.parse(options.githubUrl) : {} | ||||
|   var pkg = config.pkg | ||||
|   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', | ||||
|     port: ghConfig.port, | ||||
|     protocol: (ghConfig.protocol || '').split(':')[0] || null, | ||||
|     host: ghConfig.hostname | ||||
|   }) | ||||
| 
 | ||||
|   plugins.generateNotes(config, (err, log) => { | ||||
|   plugins.generateNotes(config, function (err, log) { | ||||
|     if (err) return cb(err) | ||||
| 
 | ||||
|     gitHead((err, hash) => { | ||||
|     gitHead(function (err, hash) { | ||||
|       if (err) return cb(err) | ||||
| 
 | ||||
|       const ghRepo = parseSlug(pkg.repository.url) | ||||
|       const release = { | ||||
|       var ghRepo = parseSlug(pkg.repository.url) | ||||
|       var release = { | ||||
|         owner: ghRepo[0], | ||||
|         repo: ghRepo[1], | ||||
|         name: `v${pkg.version}`, | ||||
|         tag_name: `v${pkg.version}`, | ||||
|         name: 'v' + pkg.version, | ||||
|         tag_name: 'v' + pkg.version, | ||||
|         target_commitish: hash, | ||||
|         draft: !!options.debug, | ||||
|         body: log | ||||
| @ -41,7 +43,7 @@ module.exports = function (config, cb) { | ||||
|         token: options.githubToken | ||||
|       }) | ||||
| 
 | ||||
|       github.releases.createRelease(release, (err) => { | ||||
|       github.releases.createRelease(release, function (err) { | ||||
|         if (err) return cb(err) | ||||
| 
 | ||||
|         cb(null, true, release) | ||||
|  | ||||
							
								
								
									
										24
									
								
								src/pre.js
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								src/pre.js
									
									
									
									
									
								
							| @ -1,32 +1,32 @@ | ||||
| const _ = require('lodash') | ||||
| const auto = require('run-auto') | ||||
| const semver = require('semver') | ||||
| var _ = require('lodash') | ||||
| var auto = require('run-auto') | ||||
| var semver = require('semver') | ||||
| 
 | ||||
| const getCommits = require('./lib/commits') | ||||
| const getType = require('./lib/type') | ||||
| var getCommits = require('./lib/commits') | ||||
| var getType = require('./lib/type') | ||||
| 
 | ||||
| module.exports = function (config, cb) { | ||||
|   const { plugins } = config | ||||
|   var plugins = config.plugins | ||||
| 
 | ||||
|   auto({ | ||||
|     lastRelease: plugins.getLastRelease.bind(null, config), | ||||
|     commits: ['lastRelease', (cb, results) => { | ||||
|     commits: ['lastRelease', function (cb, results) { | ||||
|       getCommits(_.assign({ | ||||
|         lastRelease: results.lastRelease | ||||
|       }, config), | ||||
|       cb) | ||||
|     }], | ||||
|     type: ['commits', 'lastRelease', (cb, results) => { | ||||
|     type: ['commits', 'lastRelease', function (cb, results) { | ||||
|       getType(_.assign({ | ||||
|         commits: results.commits, | ||||
|         lastRelease: results.lastRelease | ||||
|       }, config), | ||||
|       cb) | ||||
|     }] | ||||
|   }, (err, results) => { | ||||
|   }, function (err, results) { | ||||
|     if (err) return cb(err) | ||||
| 
 | ||||
|     const nextRelease = { | ||||
|     var nextRelease = { | ||||
|       type: results.type, | ||||
|       version: results.type === 'initial' | ||||
|         ? '1.0.0' | ||||
| @ -36,8 +36,8 @@ module.exports = function (config, cb) { | ||||
|     plugins.verifyRelease(_.assign({ | ||||
|       commits: results.commits, | ||||
|       lastRelease: results.lastRelease, | ||||
|       nextRelease | ||||
|     }, config), (err) => { | ||||
|       nextRelease: nextRelease | ||||
|     }, config), function (err) { | ||||
|       if (err) return cb(err) | ||||
|       cb(null, nextRelease) | ||||
|     }) | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| const nixt = require('nixt') | ||||
| var nixt = require('nixt') | ||||
| 
 | ||||
| module.exports = function (cwd, uri) { | ||||
|   return nixt() | ||||
| @ -7,8 +7,6 @@ module.exports = function (cwd, uri) { | ||||
| 		.env('NPM_EMAIL', 'integration@test.com') | ||||
|     .env('GH_TOKEN', 'ghtoken') | ||||
|     .env('CI', 'true') | ||||
|     .env('TRAVIS', 'true') | ||||
|     .env('TRAVIS_BRANCH', 'master') | ||||
|     .env('npm_config_registry', uri) | ||||
|     .clone() | ||||
| } | ||||
|  | ||||
| @ -1,40 +1,31 @@ | ||||
| const { exec } = require('child_process') | ||||
| const { join } = require('path') | ||||
| const { writeFileSync } = require('fs') | ||||
| var exec = require('child_process').exec | ||||
| var join = require('path').join | ||||
| var writeFileSync = require('fs').writeFileSync | ||||
| 
 | ||||
| const mkdirp = require('mkdirp') | ||||
| var mkdirp = require('mkdirp') | ||||
| 
 | ||||
| module.exports = function (name, cb) { | ||||
|   const cwd = join(__dirname, '../tmp', name) | ||||
| module.exports = function (name, registry, cb) { | ||||
|   var cwd = join(__dirname, '../tmp', name) | ||||
| 
 | ||||
|   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({ | ||||
|     name, | ||||
|     name: name, | ||||
|     repository: { | ||||
|       url: 'git+https://github.com/semantic-release/test' | ||||
|     }, | ||||
|     _npmUser: { | ||||
|       name: 'integration', | ||||
|       email: 'integration@test.com' | ||||
|     }, | ||||
|     maintainers: [{ | ||||
|       name: 'integration', | ||||
|       email: 'integration@test.com' | ||||
|     }] | ||||
|     release: { | ||||
|       verifyConditions: '../../../src/lib/plugin-noop' | ||||
|     } | ||||
|   }, null, 2)) | ||||
| 
 | ||||
|   exec(` | ||||
|     git init && | ||||
|     git config user.email "integration@test" && | ||||
|     git config user.name "Integration Test" && | ||||
|     git add . && | ||||
|     git commit -m "chore: root"` | ||||
|   , {cwd}, (err, stdout, stderr) => { | ||||
|   exec( | ||||
|   'git init && ' + | ||||
|   'git config user.email "integration@test" && ' + | ||||
|   'git config user.name "Integration Test" && ' + | ||||
|   'git add . && ' + | ||||
|   'git commit -m "chore: root"' | ||||
|   , {cwd: cwd}, function (err, stdout, stderr) { | ||||
|     if (err) { | ||||
|       console.log(stdout, stderr) | ||||
|       return cb(err) | ||||
|  | ||||
| @ -4,10 +4,10 @@ const rawCommits = [ | ||||
| ] | ||||
| 
 | ||||
| module.exports = { | ||||
|   exec: (command, cb) => { | ||||
|   exec: function (command, cb) { | ||||
|     if (/contains/.test(command)) { | ||||
|       if (/notinhistory/.test(command)) return cb(new Error()) | ||||
|       return cb(null, `whatever\nmaster\n`) | ||||
|       return cb(null, 'whatever\nmaster\n') | ||||
|     } | ||||
| 
 | ||||
|     cb( | ||||
|  | ||||
| @ -1,6 +1,12 @@ | ||||
| module.exports = () => ({ | ||||
|   authenticate: () => true, | ||||
|   releases: { | ||||
|     createRelease: (release, cb) => cb(null) | ||||
| module.exports = function () { | ||||
|   return { | ||||
|     authenticate: function () { | ||||
|       return true | ||||
|     }, | ||||
|     releases: { | ||||
|       createRelease: function (release, cb) { | ||||
|         cb(null) | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| }) | ||||
| } | ||||
|  | ||||
| @ -1,12 +1,11 @@ | ||||
| const { exec } = require('child_process') | ||||
| const { join } = require('path') | ||||
| var exec = require('child_process').exec | ||||
| 
 | ||||
| const opts = { | ||||
|   cwd: join(__dirname, '../../test/registry') | ||||
| var opts = { | ||||
|   cwd: __dirname | ||||
| } | ||||
| 
 | ||||
| module.exports = { | ||||
|   start: exec.bind(null, './start.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,25 +7,29 @@ cd $(dirname $0) | ||||
| 
 | ||||
| mkdir -p couch | ||||
| 
 | ||||
| # start couchdb as a background process, load local config, specify writable logfiles | ||||
| if [[ $TRAVIS = true ]] | ||||
| then | ||||
|   echo 'starting couch with sudo' | ||||
|   sudo couchdb -b -a local.ini -p couch/pid -o couch/stdout.log -e couch/stderr.log | ||||
|   COUCH=http://admin:password@127.0.0.1:5984 | ||||
| 
 | ||||
|   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 | ||||
|   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 | ||||
| 
 | ||||
| # wait for couch to start | ||||
| sleep 5 | ||||
| 
 | ||||
| COUCH=http://admin:password@127.0.0.1:15986 | ||||
| 
 | ||||
| # create "registry" database | ||||
| curl -X PUT $COUCH/registry | ||||
| 
 | ||||
| # create sample npm user | ||||
| curl -X PUT $COUCH/_users/org.couchdb.user:integration -H Content-Type:application/json --data-binary '{"_id": "org.couchdb.user:integration","name": "integration","roles": [],"type": "user","password": "suchsecure","email": "integration@test.com"}' | ||||
| curl -X PUT $COUCH/_users/org.couchdb.user:integration -H Content-Type:application/json --data-binary '{"_id": "org.couchdb.user:integration", "name": "integration", "roles": [], "type": "user", "password": "suchsecure", "email": "integration@test.com"}' | ||||
| 
 | ||||
| # npm-registry-couchpp needs this variable set to run | ||||
| export DEPLOY_VERSION=nope | ||||
|  | ||||
| @ -8,5 +8,6 @@ cd $(dirname $0) | ||||
| 
 | ||||
| cat couch/{couch,stdout,stderr}.log | ||||
| 
 | ||||
| cat couch/pid | xargs kill | ||||
| rm -rf couch | ||||
| rm -rf data | ||||
|  | ||||
| @ -1,30 +1,27 @@ | ||||
| const { join } = require('path') | ||||
| var join = require('path').join | ||||
| 
 | ||||
| const { test, tearDown } = require('tap') | ||||
| const rimraf = require('rimraf') | ||||
| var tap = require('tap') | ||||
| var rimraf = require('rimraf') | ||||
| 
 | ||||
| const registry = require('../registry') | ||||
| const testModule = require('../lib/test-module') | ||||
| const baseScenario = require('../lib/base-scenario') | ||||
| var registry = require('../registry') | ||||
| var testModule = require('../lib/test-module') | ||||
| 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) | ||||
| 
 | ||||
|   registry.start((err) => { | ||||
|   registry.start(function (err, stdout, stderr) { | ||||
|     t.error(err, 'registry started') | ||||
|     if (err) { | ||||
|       t.end() | ||||
|       t.bailout('registry not started') | ||||
|     } | ||||
|     if (err) return t.end() | ||||
| 
 | ||||
|     testModule('change-version', (err, cwd) => { | ||||
|     testModule('change-version', registry.uri, function (err, cwd) { | ||||
|       t.error(err, 'test-module created') | ||||
|       if (err) { | ||||
|         t.end() | ||||
|         t.bailout('test-module not created') | ||||
|       } | ||||
|       if (err) return t.end() | ||||
| 
 | ||||
|       t.test('no version', (tt) => { | ||||
|       t.test('no version', function (tt) { | ||||
|         tt.plan(1) | ||||
| 
 | ||||
|         baseScenario(cwd, registry.uri) | ||||
| @ -35,7 +32,7 @@ test('change version', (t) => { | ||||
|           .end(tt.error) | ||||
|       }) | ||||
| 
 | ||||
|       t.test('initial version', (tt) => { | ||||
|       t.test('initial version', function (tt) { | ||||
|         tt.plan(1) | ||||
| 
 | ||||
|         baseScenario(cwd, registry.uri) | ||||
| @ -47,7 +44,7 @@ test('change version', (t) => { | ||||
|           .end(tt.error) | ||||
|       }) | ||||
| 
 | ||||
|       t.test('patch version', (tt) => { | ||||
|       t.test('patch version', function (tt) { | ||||
|         tt.plan(1) | ||||
| 
 | ||||
|         baseScenario(cwd, registry.uri) | ||||
| @ -59,7 +56,7 @@ test('change version', (t) => { | ||||
|           .end(tt.error) | ||||
|       }) | ||||
| 
 | ||||
|       t.test('feature version', (tt) => { | ||||
|       t.test('feature version', function (tt) { | ||||
|         tt.plan(1) | ||||
| 
 | ||||
|         baseScenario(cwd, registry.uri) | ||||
| @ -71,7 +68,7 @@ test('change version', (t) => { | ||||
|           .end(tt.error) | ||||
|       }) | ||||
| 
 | ||||
|       t.test('breaking version', (tt) => { | ||||
|       t.test('breaking version', function (tt) { | ||||
|         tt.plan(1) | ||||
| 
 | ||||
|         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) { | ||||
|     if (err) console.log(err) | ||||
|     if (stdout) console.log(stdout) | ||||
|     if (stderr) console.log(stderr) | ||||
|   } | ||||
| 
 | ||||
|  | ||||
| @ -1,13 +1,16 @@ | ||||
| const test = require('tap').test | ||||
| const proxyquire = require('proxyquire') | ||||
| var test = require('tap').test | ||||
| 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') | ||||
| }) | ||||
| 
 | ||||
| test('commits since last release', (t) => { | ||||
|   t.test('get all commits', (tt) => { | ||||
|     commits({lastRelease: {}, options: {branch: 'master'}}, (err, commits) => { | ||||
| test('commits since last release', function (t) { | ||||
|   t.test('get all commits', function (tt) { | ||||
|     commits({lastRelease: {}, options: {branch: 'master'}}, function (err, commits) { | ||||
|       tt.error(err) | ||||
|       tt.is(commits.length, 2, 'all commits') | ||||
|       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) => { | ||||
|     commits({lastRelease: {gitHead: 'hash'}, options: {branch: 'master'}}, (err, commits) => { | ||||
|   t.test('get commits since hash', function (tt) { | ||||
|     commits({lastRelease: {gitHead: 'hash'}, options: {branch: 'master'}}, function (err, commits) { | ||||
|       tt.error(err) | ||||
|       tt.is(commits.length, 1, 'specified commits') | ||||
|       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) => { | ||||
|     commits({lastRelease: {gitHead: 'notinhistory'}, options: {branch: 'notmaster'}}, (err, commits) => { | ||||
|   t.test('get commits since hash', function (tt) { | ||||
|     commits({lastRelease: {gitHead: 'notinhistory'}, options: {branch: 'notmaster'}}, function (err, commits) { | ||||
|       tt.ok(err) | ||||
|       tt.is(err.code, 'ENOTINHISTORY') | ||||
|       tt.end() | ||||
|  | ||||
| @ -1,8 +1,8 @@ | ||||
| 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({ | ||||
|     name: 'publish-config', | ||||
|     publishConfig: { | ||||
| @ -10,20 +10,34 @@ test('get correct registry', (t) => { | ||||
|     }}, | ||||
|   {}), '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'}, { | ||||
|     get: (input) => input === '@scoped/registry' ? 'c' : 'd' | ||||
|     get: function (input) { | ||||
|       return input === '@scoped/registry' ? 'c' : 'd' | ||||
|     } | ||||
|   }), 'c') | ||||
| 
 | ||||
|   t.is(getRegistry({name: '@scoped/bar'}, { | ||||
|     get: () => 'e' | ||||
|     get: function () { | ||||
|       return 'e' | ||||
|     } | ||||
|   }), 'e') | ||||
| 
 | ||||
|   t.is(getRegistry({name: '@scoped/baz'}, { | ||||
|     get: () => null | ||||
|     get: function () { | ||||
|       return null | ||||
|     } | ||||
|   }), 'https://registry.npmjs.org/') | ||||
| 
 | ||||
|   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) | ||||
| 
 | ||||
|   const defaultPlugins = plugins({}) | ||||
|   var defaultPlugins = plugins({}) | ||||
| 
 | ||||
|   t.is(typeof defaultPlugins.analyzeCommits, 'function') | ||||
|   t.is(typeof defaultPlugins.generateNotes, 'function') | ||||
| @ -14,51 +14,51 @@ test('export plugins', (t) => { | ||||
|   t.is(typeof defaultPlugins.getLastRelease, 'function') | ||||
| }) | ||||
| 
 | ||||
| test('plugin pipelines', (t) => { | ||||
| test('plugin pipelines', function (t) { | ||||
|   t.plan(3) | ||||
| 
 | ||||
|   t.test('get all results', (tt) => { | ||||
|     const pipelinePlugins = plugins({ | ||||
|   t.test('get all results', function (tt) { | ||||
|     var pipelinePlugins = plugins({ | ||||
|       verifyRelease: [ | ||||
|         './dist/lib/plugin-noop', | ||||
|         './.test/mocks/plugin-result-a', | ||||
|         './.test/mocks/plugin-result-b' | ||||
|         './src/lib/plugin-noop', | ||||
|         './test/mocks/plugin-result-a', | ||||
|         './test/mocks/plugin-result-b' | ||||
|       ] | ||||
|     }) | ||||
| 
 | ||||
|     pipelinePlugins.verifyRelease({}, (err, results) => { | ||||
|     pipelinePlugins.verifyRelease({}, function (err, results) { | ||||
|       tt.error(err) | ||||
|       tt.same(results, [undefined, 'a', 'b']) | ||||
|       tt.end() | ||||
|     }) | ||||
|   }) | ||||
| 
 | ||||
|   t.test('get first error', (tt) => { | ||||
|     const pipelinePlugins = plugins({ | ||||
|   t.test('get first error', function (tt) { | ||||
|     var pipelinePlugins = plugins({ | ||||
|       verifyConditions: [ | ||||
|         './dist/lib/plugin-noop', | ||||
|         './.test/mocks/plugin-error-a', | ||||
|         './.test/mocks/plugin-error-b' | ||||
|         './src/lib/plugin-noop', | ||||
|         './test/mocks/plugin-error-a', | ||||
|         './test/mocks/plugin-error-b' | ||||
|       ] | ||||
|     }) | ||||
| 
 | ||||
|     pipelinePlugins.verifyConditions({}, (err) => { | ||||
|     pipelinePlugins.verifyConditions({}, function (err) { | ||||
|       tt.is(err.message, 'a') | ||||
|       tt.end() | ||||
|     }) | ||||
|   }) | ||||
| 
 | ||||
|   t.test('get error and only results before', (tt) => { | ||||
|     const pipelinePlugins = plugins({ | ||||
|   t.test('get error and only results before', function (tt) { | ||||
|     var pipelinePlugins = plugins({ | ||||
|       verifyRelease: [ | ||||
|         './dist/lib/plugin-noop', | ||||
|         './.test/mocks/plugin-result-a', | ||||
|         './.test/mocks/plugin-error-b', | ||||
|         './.test/mocks/plugin-result-b' | ||||
|         './src/lib/plugin-noop', | ||||
|         './test/mocks/plugin-result-a', | ||||
|         './test/mocks/plugin-error-b', | ||||
|         './test/mocks/plugin-result-b' | ||||
|       ] | ||||
|     }) | ||||
| 
 | ||||
|     pipelinePlugins.verifyRelease({}, (err, results) => { | ||||
|     pipelinePlugins.verifyRelease({}, function (err, results) { | ||||
|       tt.is(err.message, 'b') | ||||
|       tt.same(results, [undefined, 'a', undefined]) | ||||
|       tt.end() | ||||
| @ -66,18 +66,18 @@ test('plugin pipelines', (t) => { | ||||
|   }) | ||||
| }) | ||||
| 
 | ||||
| test('normalize and load plugin', (t) => { | ||||
|   t.test('load from string', (tt) => { | ||||
|     const plugin = plugins.normalize('./dist/lib/plugin-noop') | ||||
| test('normalize and load plugin', function (t) { | ||||
|   t.test('load from string', function (tt) { | ||||
|     var plugin = plugins.normalize('./src/lib/plugin-noop') | ||||
| 
 | ||||
|     tt.is(typeof plugin, 'function') | ||||
| 
 | ||||
|     tt.end() | ||||
|   }) | ||||
| 
 | ||||
|   t.test('load from object', (tt) => { | ||||
|     const plugin = plugins.normalize({ | ||||
|       path: './dist/lib/plugin-noop' | ||||
|   t.test('load from object', function (tt) { | ||||
|     var plugin = plugins.normalize({ | ||||
|       path: './src/lib/plugin-noop' | ||||
|     }) | ||||
| 
 | ||||
|     tt.is(typeof plugin, 'function') | ||||
| @ -85,8 +85,8 @@ test('normalize and load plugin', (t) => { | ||||
|     tt.end() | ||||
|   }) | ||||
| 
 | ||||
|   t.test('load from object', (tt) => { | ||||
|     const plugin = plugins.normalize(null, '../../dist/lib/plugin-noop') | ||||
|   t.test('load from fallback', function (tt) { | ||||
|     var plugin = plugins.normalize(null, '../../src/lib/plugin-noop') | ||||
| 
 | ||||
|     tt.is(typeof plugin, 'function') | ||||
| 
 | ||||
|  | ||||
| @ -1,20 +1,24 @@ | ||||
| const { defaults } = require('lodash') | ||||
| const test = require('tap').test | ||||
| const proxyquire = require('proxyquire') | ||||
| var defaults = require('lodash').defaults | ||||
| var test = require('tap').test | ||||
| var proxyquire = require('proxyquire') | ||||
| 
 | ||||
| const post = proxyquire('../../dist/post', { | ||||
| var post = proxyquire('../../src/post', { | ||||
|   'git-head': require('../mocks/git-head'), | ||||
|   github: require('../mocks/github') | ||||
| }) | ||||
| 
 | ||||
| const pkg = { | ||||
| var pkg = { | ||||
|   version: '1.0.0', | ||||
|   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', | ||||
|   repo: 'up', | ||||
|   name: 'v1.0.0', | ||||
| @ -23,13 +27,13 @@ const defaultRelease = { | ||||
|   body: 'the log' | ||||
| } | ||||
| 
 | ||||
| test('full post run', (t) => { | ||||
|   t.test('in debug mode w/o token', (tt) => { | ||||
| test('full post run', function (t) { | ||||
|   t.test('in debug mode w/o token', function (tt) { | ||||
|     post({ | ||||
|       options: {debug: true}, | ||||
|       pkg, | ||||
|       plugins | ||||
|     }, (err, published, release) => { | ||||
|       pkg: pkg, | ||||
|       plugins: plugins | ||||
|     }, function (err, published, release) { | ||||
|       tt.error(err) | ||||
|       tt.is(published, false) | ||||
|       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({ | ||||
|       options: {debug: true, githubToken: 'yo'}, | ||||
|       pkg, | ||||
|       plugins | ||||
|     }, (err, published, release) => { | ||||
|       pkg: pkg, | ||||
|       plugins: plugins | ||||
|     }, function (err, published, release) { | ||||
|       tt.error(err) | ||||
|       tt.is(published, true) | ||||
|       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({ | ||||
|       options: {githubToken: 'yo'}, | ||||
|       pkg, | ||||
|       plugins | ||||
|     }, (err, published, release) => { | ||||
|       pkg: pkg, | ||||
|       plugins: plugins | ||||
|     }, function (err, published, release) { | ||||
|       tt.error(err) | ||||
|       tt.is(published, true) | ||||
|       tt.match(release, defaultRelease) | ||||
|  | ||||
| @ -1,55 +1,59 @@ | ||||
| const test = require('tap').test | ||||
| const proxyquire = require('proxyquire') | ||||
| var test = require('tap').test | ||||
| var proxyquire = require('proxyquire') | ||||
| 
 | ||||
| require('../mocks/registry') | ||||
| const pre = proxyquire('../../dist/pre', { | ||||
|   './lib/commits': proxyquire('../../dist/lib/commits', { | ||||
| var pre = proxyquire('../../src/pre', { | ||||
|   './lib/commits': proxyquire('../../src/lib/commits', { | ||||
|     'child_process': require('../mocks/child-process') | ||||
|   }) | ||||
| }) | ||||
| 
 | ||||
| const versions = { | ||||
| var versions = { | ||||
|   available: '1.0.0' | ||||
| } | ||||
| 
 | ||||
| const plugins = { | ||||
|   verifyRelease: (release, cb) => cb(null, release), | ||||
|   analyzeCommits: (commits, cb) => cb(null, 'major'), | ||||
|   getLastRelease: ({ pkg }, cb) => { | ||||
|     cb(null, {version: versions[pkg.name] || null, gitHead: 'HEAD'}) | ||||
| var plugins = { | ||||
|   verifyRelease: function (release, cb) { | ||||
|     cb(null, release) | ||||
|   }, | ||||
|   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/', | ||||
|   tag: 'latest' | ||||
| } | ||||
| 
 | ||||
| test('full pre run', (t) => { | ||||
|   t.test('increase version', (tt) => { | ||||
| test('full pre run', function (t) { | ||||
|   t.test('increase version', function (tt) { | ||||
|     tt.plan(3) | ||||
| 
 | ||||
|     pre({ | ||||
|       options: {branch: 'master'}, | ||||
|       npm, | ||||
|       npm: npm, | ||||
|       pkg: {name: 'available'}, | ||||
|       plugins | ||||
|     }, (err, release) => { | ||||
|       plugins: plugins | ||||
|     }, function (err, release) { | ||||
|       tt.error(err) | ||||
|       tt.is(release.type, 'major') | ||||
|       tt.is(release.version, '2.0.0') | ||||
|     }) | ||||
|   }) | ||||
| 
 | ||||
|   t.test('increase version', (tt) => { | ||||
|   t.test('increase version', function (tt) { | ||||
|     tt.plan(3) | ||||
| 
 | ||||
|     pre({ | ||||
|       options: {branch: 'master'}, | ||||
|       npm, | ||||
|       npm: npm, | ||||
|       pkg: {name: 'unavailable'}, | ||||
|       plugins | ||||
|     }, (err, release) => { | ||||
|       plugins: plugins | ||||
|     }, function (err, release) { | ||||
|       tt.error(err) | ||||
|       tt.is(release.type, 'initial') | ||||
|       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) => { | ||||
|   t.test('get type from plugin', (tt) => { | ||||
| test('get type from commits', function (t) { | ||||
|   t.test('get type from plugin', function (tt) { | ||||
|     tt.plan(2) | ||||
| 
 | ||||
|     type({ | ||||
| @ -12,33 +12,45 @@ test('get type from commits', (t) => { | ||||
|         message: 'a' | ||||
|       }], | ||||
|       lastRelease: {version: '1.0.0'}, | ||||
|       plugins: {analyzeCommits: (config, cb) => cb(null, 'major')} | ||||
|     }, (err, type) => { | ||||
|       plugins: { | ||||
|         analyzeCommits: function (config, cb) { | ||||
|           cb(null, 'major') | ||||
|         } | ||||
|       } | ||||
|     }, function (err, type) { | ||||
|       tt.error(err) | ||||
|       tt.is(type, 'major') | ||||
|     }) | ||||
|   }) | ||||
| 
 | ||||
|   t.test('error when no changes', (tt) => { | ||||
|   t.test('error when no changes', function (tt) { | ||||
|     tt.plan(1) | ||||
| 
 | ||||
|     type({ | ||||
|       commits: [], | ||||
|       lastRelease: {}, | ||||
|       plugins: {analyzeCommits: (config, cb) => cb(null, null)} | ||||
|     }, (err) => { | ||||
|       plugins: { | ||||
|         analyzeCommits: function (config, cb) { | ||||
|           cb(null, null) | ||||
|         } | ||||
|       } | ||||
|     }, function (err) { | ||||
|       tt.is(err.code, 'ENOCHANGE') | ||||
|     }) | ||||
|   }) | ||||
| 
 | ||||
|   t.test('initial version', (tt) => { | ||||
|   t.test('initial version', function (tt) { | ||||
|     tt.plan(2) | ||||
| 
 | ||||
|     type({ | ||||
|       commits: [], | ||||
|       lastRelease: {}, | ||||
|       plugins: {analyzeCommits: (config, cb) => cb(null, 'major')} | ||||
|     }, (err, type) => { | ||||
|       plugins: { | ||||
|         analyzeCommits: function (config, cb) { | ||||
|           cb(null, 'major') | ||||
|         } | ||||
|       } | ||||
|     }, function (err, type) { | ||||
|       tt.error(err) | ||||
|       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) => { | ||||
|   t.test('dry run verification', (tt) => { | ||||
|     const noErrors = verify({ | ||||
| test('verify pkg, options and env', function (t) { | ||||
|   t.test('dry run verification', function (tt) { | ||||
|     var noErrors = verify({ | ||||
|       options: {debug: true}, | ||||
|       pkg: { | ||||
|         name: 'package', | ||||
| @ -16,7 +16,7 @@ test('verify pkg, options and env', (t) => { | ||||
| 
 | ||||
|     tt.is(noErrors.length, 0) | ||||
| 
 | ||||
|     const errors = verify({ | ||||
|     var errors = verify({ | ||||
|       options: {debug: true}, | ||||
|       pkg: {} | ||||
|     }) | ||||
| @ -25,7 +25,7 @@ test('verify pkg, options and env', (t) => { | ||||
|     tt.is(errors[0].code, 'ENOPKGNAME') | ||||
|     tt.is(errors[1].code, 'ENOPKGREPO') | ||||
| 
 | ||||
|     const errors2 = verify({ | ||||
|     var errors2 = verify({ | ||||
|       options: {debug: true}, | ||||
|       pkg: { | ||||
|         name: 'package', | ||||
| @ -41,8 +41,8 @@ test('verify pkg, options and env', (t) => { | ||||
|     tt.end() | ||||
|   }) | ||||
| 
 | ||||
|   t.test('publish verification', (tt) => { | ||||
|     const noErrors = verify({ | ||||
|   t.test('publish verification', function (tt) { | ||||
|     var noErrors = verify({ | ||||
|       env: {NPM_TOKEN: 'yo'}, | ||||
|       options: {githubToken: 'sup'}, | ||||
|       pkg: { | ||||
| @ -55,7 +55,7 @@ test('verify pkg, options and env', (t) => { | ||||
| 
 | ||||
|     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[0].code, 'ENOPKGNAME') | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user