npmci/ts/mod_npm/index.ts
2017-08-28 13:08:21 +02:00

72 lines
1.7 KiB
TypeScript

import * as plugins from './mod.plugins'
import * as configModule from '../npmci.config'
import {
bash,
bashNoError,
nvmAvailable,
yarnAvailable
} from '../npmci.bash'
/**
* handle cli input
* @param argvArg
*/
export let handleCli = async (argvArg) => {
if (argvArg._.length >= 2) {
let action: string = argvArg._[1]
switch (action) {
case 'install':
await install()
break
case 'prepare':
await prepare()
break
case 'test':
await test()
break
case 'publish':
await publish()
break
default:
plugins.beautylog.error(`>>npmci npm ...<< action >>${action}<< not supported`)
}
} else {
plugins.beautylog.log(`>>npmci npm ...<< cli arguments invalid... Please read the documentation.`)
}
}
/**
* authenticates npm with token from env var
*/
let prepare = async () => {
let npmrcPrefix: string = '//registry.npmjs.org/:_authToken='
let npmToken: string = process.env.NPMCI_TOKEN_NPM
let npmrcFileString: string = npmrcPrefix + npmToken
if (npmToken) {
plugins.beautylog.info('found access token')
} else {
plugins.beautylog.error('no access token found! Exiting!')
process.exit(1)
}
plugins.smartfile.memory.toFsSync(npmrcFileString, '/root/.npmrc')
return
}
let publish = async () => {
await bash('npm publish')
}
let install = async (): Promise<void> => {
plugins.beautylog.info('now installing dependencies:')
if (await yarnAvailable.promise) {
await bash('yarn install')
} else {
await bash('npm install')
}
}
export let test = async (): Promise<void> => {
plugins.beautylog.info('now starting tests:')
await bash('yarn test')
}