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`); process.exit(1); } } else { plugins.beautylog.log( `>>npmci npm ...<< cli arguments invalid... Please read the documentation.` ); process.exit(1); } }; /** * 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; }; /** * publish a package to npm */ let publish = async () => { let npmAccessCliString = ``; const config = await configModule.getConfig(); // -> configure package access level if ( config.npmAccessLevel && (config.npmAccessLevel === 'public' || config.npmAccessLevel === 'private') ) { npmAccessCliString = `--access=${config.npmAccessLevel}`; } // -> build it await bash(`yarn install`); await bash(`yarn run build`); // -> make sure npm is authenticated prepare(); // -> publish it await bash(`npm publish ${npmAccessCliString}`); }; let install = async (): Promise => { plugins.beautylog.info('now installing dependencies:'); if (await yarnAvailable.promise) { await bash('yarn install'); } else { await bash('npm install'); } }; export let test = async (): Promise => { plugins.beautylog.info('now starting tests:'); await bash('yarn test'); };