Skip to content

Commit

Permalink
Merge cc6fc53 into f19b3f9
Browse files Browse the repository at this point in the history
  • Loading branch information
christophwitzko committed Nov 14, 2016
2 parents f19b3f9 + cc6fc53 commit cf11d73
Show file tree
Hide file tree
Showing 13 changed files with 389 additions and 516 deletions.
3 changes: 0 additions & 3 deletions .cz.json

This file was deleted.

40 changes: 13 additions & 27 deletions .travis.yml
@@ -1,35 +1,21 @@
sudo: false
language: node_js
cache:
directories:
- node_modules
- node_modules
notifications:
email: false
addons:
apt:
packages:
- xvfb
- gnome-keyring
- libgnome-keyring-dev
node_js:
- iojs-v2
- iojs-v1
- '0.12'
- '0.10'
before_install: |
case ${TRAVIS_NODE_VERSION} in
iojs*)
echo "Not upgrading npm for iojs."
;;
*)
npm update -g npm
;;
esac
- '4'
- '6'
- '7'
before_script:
- npm prune
- npm prune
after_success:
- curl -Lo travis_after_all.py https://git.io/travis_after_all
- python travis_after_all.py
- export $(cat .to_export_back) &> /dev/null
- npm run coverage:upload
- npm run semantic-release
- 'curl -Lo travis_after_all.py https://git.io/vXXtr'
- python travis_after_all.py
- export $(cat .to_export_back) &> /dev/null
- npm run coverage:upload
- npm run semantic-release
branches:
except:
- /^v\d+\.\d+\.\d+$/
2 changes: 1 addition & 1 deletion bin/semantic-release.js
Expand Up @@ -5,7 +5,7 @@ try {
require('../dist')(process.argv)
} catch (err) {
if (err.code === 'MODULE_NOT_FOUND') {
require('babel/register')
require('babel-register')
require('../src')(process.argv)
} else {
console.log(err)
Expand Down
57 changes: 36 additions & 21 deletions package.json
Expand Up @@ -2,45 +2,57 @@
"name": "semantic-release-cli",
"description": "setup automated semver compliant package publishing",
"author": "Christoph Witzko <npm@christophwitzko.com> (http://christophwitzko.com)",
"babel": {
"presets": [
"es2015-node4"
],
"plugins": [
"transform-async-to-generator"
]
},
"bin": {
"semantic-release-cli": "./bin/semantic-release.js"
},
"bugs": {
"url": "https://github.com/semantic-release/cli/issues"
},
"dependencies": {
"async": "^1.2.1",
"base32": "0.0.6",
"bluebird": "^3.4.6",
"github-url-from-git": "^1.4.0",
"ini": "^1.3.4",
"inquirer": "^0.9.0",
"inquirer": "^1.2.2",
"js-yaml": "^3.3.1",
"keytar": "^3.0.0",
"lodash": "^3.10.1",
"lodash": "^4.16.4",
"nopt": "^3.0.2",
"npm-registry-client": "^6.4.0",
"npmconf": "^2.1.2",
"npmlog": "^2.0.0",
"npm": "^3.10.9",
"npm-registry-client": "^7.3.0",
"npmlog": "^4.0.0",
"parse-github-repo-url": "^1.0.0",
"request": "^2.58.0",
"travis-ci": "https://github.com/mykmelez/node-travis-ci/tarball/e35375de8b06bbe7209b5dfe94f816737002e928",
"update-notifier": "^0.5.0",
"request-promise": "^4.1.1",
"travis-ci": "^2.1.1",
"update-notifier": "^1.0.2",
"user-home": "^2.0.0",
"validator": "^3.40.1"
"validator": "^6.1.0"
},
"optionalDependencies": {
"keytar": "^3.0.0"
},
"devDependencies": {
"babel": "^5.5.8",
"cz-conventional-changelog": "^1.1.0",
"babel-cli": "^6.18.0",
"babel-plugin-transform-async-to-generator": "^6.16.0",
"babel-preset-es2015-node4": "^2.1.0",
"mkdirp": "^0.5.1",
"nyc": "^3.0.0",
"nyc": "^8.3.2",
"rimraf": "^2.4.2",
"semantic-release": "^4.0.0",
"standard": "^5.4.1",
"tap": "^2.1.1"
"semantic-release": "^4.3.5",
"standard": "^8.5.0",
"tap": "^8.0.0"
},
"engines": {
"node": ">=0.10",
"npm": ">=2"
"node": ">=4",
"npm": ">=3"
},
"homepage": "https://github.com/semantic-release/cli",
"keywords": [
Expand All @@ -56,6 +68,11 @@
],
"license": "MIT",
"main": "dist/index.js",
"nyc": {
"require": [
"babel-register"
]
},
"preferGlobal": true,
"repository": {
"type": "git",
Expand All @@ -66,11 +83,9 @@
"coverage": "nyc report",
"coverage:upload": "npm run coverage -- --reporter=lcovonly && coveralls < coverage/lcov.info",
"prepublish": "npm run build",
"pretest:unit": "npm run build && npm run test:build",
"semantic-release": "semantic-release pre && npm publish && semantic-release post",
"test": "npm run test:style && npm run test:unit",
"test:build": "rimraf .test && mkdirp .test && babel test --out-dir .test",
"test:style": "standard",
"test:unit": "nyc tap --no-cov .test/specs/*.js"
"test:unit": "nyc tap --no-cov test/specs/*.js"
}
}
94 changes: 46 additions & 48 deletions src/index.js
@@ -1,10 +1,10 @@
const { readFileSync, writeFileSync } = require('fs')
const {readFileSync, writeFileSync} = require('fs')

const _ = require('lodash')
const async = require('async')
const {promisify} = require('bluebird')
const nopt = require('nopt')
const npmconf = require('npmconf')
const request = require('request')
const npm = require('npm')
const request = require('request-promise').defaults({json: true})

const getLog = require('./lib/log')

Expand Down Expand Up @@ -33,7 +33,7 @@ const shortHands = {
h: ['--help']
}

module.exports = function (argv) {
module.exports = async function (argv) {
let info = {
options: _.defaults(
nopt(knownOptions, shortHands, argv, 2),
Expand Down Expand Up @@ -70,51 +70,49 @@ Aliases:
process.exit(0)
}

npmconf.load((err, conf) => {
if (err) {
log.error('Failed to load npm config.', err)
process.exit(1)
}

info.loglevel = conf.get('loglevel') || 'warn'
const log = info.log = getLog(info.loglevel)

async.applyEachSeries([
require('./lib/repository'),
require('./lib/npm'),
require('./lib/github'),
require('./lib/ci')
], pkg, info, (err) => {
if (err) {
log.error(err)
process.exit(1)
}
try {
var config = (await promisify(npm.load.bind(npm))({progress: false})).config
} catch (e) {
console.log('Failed to load npm config.', e)
process.exit(1)
}

delete pkg.version
info.loglevel = config.get('loglevel') || 'warn'
const log = info.log = getLog(info.loglevel)

try {
await require('./lib/repository')(pkg, info)
await require('./lib/npm')(pkg, info)
await require('./lib/github')(pkg, info)
await require('./lib/ci')(pkg, info)
} catch (err) {
log.error(err)
process.exit(1)
}

pkg.scripts = pkg.scripts || {}
pkg.scripts['semantic-release'] = 'semantic-release pre && npm publish && semantic-release post'
delete pkg.version

pkg.repository = pkg.repository || {
type: 'git',
url: info.giturl
}
pkg.scripts = pkg.scripts || {}
pkg.scripts['semantic-release'] = 'semantic-release pre && npm publish && semantic-release post'

pkg.repository = pkg.repository || {
type: 'git',
url: info.giturl
}

if (info.ghrepo.private && !pkg.publishConfig) {
pkg.publishConfig = {access: 'restricted'}
}

try {
const seRePkg = await request('https://registry.npmjs.org/semantic-release')
pkg.devDependencies = pkg.devDependencies || {}
pkg.devDependencies['semantic-release'] = `^${seRePkg['dist-tags'][info.options.tag]}`
} catch (e) {
log.error('Could not get latest `semantic-release` version.', e)
}

request({
url: 'https://registry.npmjs.org/semantic-release',
json: true
}, (err, res, body) => {
if (err) {
log.error('Could not get latest `semantic-release` version.', err)
} else {
pkg.devDependencies = pkg.devDependencies || {}
pkg.devDependencies['semantic-release'] = `^${body['dist-tags'][info.options.tag]}`
}

log.verbose('Writing `package.json`.')
writeFileSync('package.json', `${JSON.stringify(pkg, null, 2)}\n`)
log.info('Done.')
})
})
})
log.verbose('Writing `package.json`.')
writeFileSync('package.json', `${JSON.stringify(pkg, null, 2)}\n`)
log.info('Done.')
}
19 changes: 7 additions & 12 deletions src/lib/ci.js
Expand Up @@ -8,22 +8,21 @@ const cis = {
'Travis CI': travis.bind(null, 'https://api.travis-ci.org'),
'Travis CI Pro': travis.bind(null, 'https://api.travis-ci.com'),
'Travis CI Enterprise': travis,
'Other (prints tokens)': (pkg, info, cb) => {
'Other (prints tokens)': (pkg, info) => {
const message = `
${_.repeat('-', 46)}
GH_TOKEN=${info.github.token}
NPM_TOKEN=${info.npm.token}
${_.repeat('-', 46)}
`
console.log(message)
cb(null)
}
}

module.exports = function (pkg, info, cb) {
const choices = Object.keys(cis)
module.exports = async function (pkg, info) {
const choices = _.keys(cis)

inquirer.prompt([{
const answers = await inquirer.prompt([{
type: 'list',
name: 'ci',
message: 'What CI are you using?',
Expand All @@ -37,12 +36,8 @@ module.exports = function (pkg, info, cb) {
protocols: [ 'http', 'https' ],
require_protocol: true
}),
when: (ans) => ans.ci === choices[2]
}], (answers) => {
if (answers.endpoint) {
return cis[answers.ci](answers.endpoint, pkg, info, cb)
}
when: answers => answers.ci === choices[2]
}])

cis[answers.ci](pkg, info, cb)
})
await cis[answers.ci].apply(null, _.compact([answers.endpoint, pkg, info]))
}

0 comments on commit cf11d73

Please sign in to comment.