Skip to content

Commit

Permalink
Merge pull request #31 from semantic-release/30-token-args
Browse files Browse the repository at this point in the history
feat: add token command line options
  • Loading branch information
christophwitzko committed Sep 24, 2015
2 parents 1b5da7e + 6e9226a commit 26e6357
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 38 deletions.
16 changes: 10 additions & 6 deletions src/index.js
Expand Up @@ -23,7 +23,9 @@ const knownOptions = {
version: Boolean,
help: Boolean,
keychain: Boolean,
'ask-for-passwords': Boolean
'ask-for-passwords': Boolean,
'gh-token': String,
'npm-token': String
}

const shortHands = {
Expand Down Expand Up @@ -55,11 +57,13 @@ Usage:
semantic-release-cli setup [--tag=<String>]
Options:
-h --help Show this screen.
-v --version Show version.
--[no-]keychain Use keychain to get passwords [default: true].
--ask-for-passwords Ask for the passwords even if passwords are stored [default: false].
--tag=<String> npm tag to install [default: 'latest'].`)
-h --help Show this screen.
-v --version Show version.
--[no-]keychain Use keychain to get passwords [default: true].
--ask-for-passwords Ask for the passwords even if passwords are stored [default: false].
--tag=<String> npm tag to install [default: 'latest'].
--gh-token=<String> Github auth token
--npm-token=<String> NPM auth token`)
process.exit(0)
}

Expand Down
75 changes: 46 additions & 29 deletions src/lib/github.js
Expand Up @@ -3,6 +3,7 @@ const crypto = require('crypto')
const _ = require('lodash')
const base32 = require('base32')
const inquirer = require('inquirer')
const npmconf = require('npmconf')
const request = require('request')
const validator = require('validator')

Expand Down Expand Up @@ -80,41 +81,57 @@ function createAuthorization (info, cb) {
module.exports = function (pkg, info, cb) {
const log = info.log

inquirer.prompt([{
type: 'input',
name: 'username',
message: 'What is your GitHub username?',
default: info.npm.username,
validate: _.ary(_.bind(validator.isLength, validator, _, 1), 1)
}, {
type: 'password',
name: 'password',
message: 'What is your GitHub password?',
validate: _.ary(_.bind(validator.isLength, validator, _, 1), 1),
when: function (answers) {
if (!info.options.keychain) return true
if (info.options['ask-for-passwords']) return true
return !passwordStorage.get(answers.username)
npmconf.load((err, conf) => {
if (err) {
log.error('Could not load npm config.')
return cb(err)
}
}], (answers) => {
answers.password = answers.password || passwordStorage.get(answers.username)

info.github = answers
info.github.endpoint = info.ghepurl || 'https://api.github.com'

createAuthorization(info, (err, data) => {
if (err) {
log.error('Could not login to GitHub. Check your credentials.')
return cb(err)
if (_.has(info.options, 'gh-token')) {
info.github = {
endpoint: info.ghepurl || 'https://api.github.com',
token: info.options['gh-token']
}
log.info('Using GitHub token from command line argument.')
return cb(null)
}

if (info.options.keychain) {
passwordStorage.set(info.github.username, info.github.password)
inquirer.prompt([{
type: 'input',
name: 'username',
message: 'What is your GitHub username?',
default: conf.get('username'),
validate: _.ary(_.bind(validator.isLength, validator, _, 1), 1)
}, {
type: 'password',
name: 'password',
message: 'What is your GitHub password?',
validate: _.ary(_.bind(validator.isLength, validator, _, 1), 1),
when: function (answers) {
if (!info.options.keychain) return true
if (info.options['ask-for-passwords']) return true
return !passwordStorage.get(answers.username)
}
}], (answers) => {
answers.password = answers.password || passwordStorage.get(answers.username)

info.github.token = data.token
log.info('Successfully created GitHub token.')
cb(null)
info.github = answers
info.github.endpoint = info.ghepurl || 'https://api.github.com'

createAuthorization(info, (err, data) => {
if (err) {
log.error('Could not login to GitHub. Check your credentials.')
return cb(err)
}

if (info.options.keychain) {
passwordStorage.set(info.github.username, info.github.password)
}

info.github.token = data.token
log.info('Successfully created GitHub token.')
cb(null)
})
})
})
}
19 changes: 16 additions & 3 deletions src/lib/npm.js
Expand Up @@ -49,27 +49,40 @@ module.exports = function (pkg, info, cb) {
name: 'username',
message: 'What is your npm username?',
default: conf.get('username'),
validate: _.ary(_.bind(validator.isLength, null, _, 1), 1)
validate: _.ary(_.bind(validator.isLength, null, _, 1), 1),
when: function (answers) {
return !_.has(info.options, 'npm-token')
}
}, {
type: 'input',
name: 'email',
message: 'What is your npm email?',
default: conf.get('email'),
validate: validator.isEmail
validate: validator.isEmail,
when: function (answers) {
return !_.has(info.options, 'npm-token')
}
}, {
type: 'password',
name: 'password',
message: 'What is your npm password?',
validate: _.ary(_.bind(validator.isLength, null, _, 1), 1),
when: function (answers) {
if (_.has(info.options, 'npm-token')) return false
if (!info.options.keychain) return true
if (info.options['ask-for-passwords']) return true
return !passwordStorage.get(answers.username)
}
}], (answers) => {
answers.password = answers.password || passwordStorage.get(answers.username)
info.npm = answers

if (_.has(info.options, 'npm-token')) {
info.npm.token = info.options['npm-token']
log.info('Using NPM token from command line argument.')
return cb(null)
}

answers.password = answers.password || passwordStorage.get(answers.username)
conf.set('username', answers.username, 'user')
conf.set('email', answers.email, 'user')

Expand Down

0 comments on commit 26e6357

Please sign in to comment.