| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  | import * as plugins from './mod.plugins'; | 
					
						
							|  |  |  | import * as configModule from '../npmci.config'; | 
					
						
							|  |  |  | import { bash, bashNoError, nvmAvailable, yarnAvailable } from '../npmci.bash'; | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * handle cli input | 
					
						
							|  |  |  |  * @param argvArg | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  | export let handleCli = async argvArg => { | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  |   if (argvArg._.length >= 2) { | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |     let action: string = argvArg._[1]; | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  |     switch (action) { | 
					
						
							|  |  |  |       case 'install': | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |         await install(); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  |       case 'prepare': | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |         await prepare(); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  |       case 'test': | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |         await test(); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2017-08-28 13:08:21 +02:00
										 |  |  |       case 'publish': | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |         await publish(); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  |       default: | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |         plugins.beautylog.error(`>>npmci npm ...<< action >>${action}<< not supported`); | 
					
						
							|  |  |  |         process.exit(1); | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  |     } | 
					
						
							|  |  |  |   } else { | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |     plugins.beautylog.log( | 
					
						
							|  |  |  |       `>>npmci npm ...<< cli arguments invalid... Please read the documentation.` | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     process.exit(1); | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * authenticates npm with token from env var | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | let prepare = async () => { | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |   let npmrcPrefix: string = '//registry.npmjs.org/:_authToken='; | 
					
						
							|  |  |  |   let npmToken: string = process.env.NPMCI_TOKEN_NPM; | 
					
						
							|  |  |  |   let npmrcFileString: string = npmrcPrefix + npmToken; | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  |   if (npmToken) { | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |     plugins.beautylog.info('found access token'); | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  |   } else { | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |     plugins.beautylog.error('no access token found! Exiting!'); | 
					
						
							|  |  |  |     process.exit(1); | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |   plugins.smartfile.memory.toFsSync(npmrcFileString, '/root/.npmrc'); | 
					
						
							|  |  |  |   return; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:43:15 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * publish a package to npm | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-08-28 13:08:21 +02:00
										 |  |  | let publish = async () => { | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |   let npmAccessCliString = ``; | 
					
						
							|  |  |  |   const config = await configModule.getConfig(); | 
					
						
							| 
									
										
										
										
											2018-04-29 16:12:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // -> configure package access level
 | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |   if ( | 
					
						
							|  |  |  |     config.npmAccessLevel && | 
					
						
							|  |  |  |     (config.npmAccessLevel === 'public' || config.npmAccessLevel === 'private') | 
					
						
							|  |  |  |   ) { | 
					
						
							|  |  |  |     npmAccessCliString = `--access=${config.npmAccessLevel}`; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-04-29 16:12:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-03 20:40:26 +02:00
										 |  |  |   // -> preparing
 | 
					
						
							|  |  |  |   plugins.beautylog.log(`noe preparing environment:`); | 
					
						
							|  |  |  |   prepare(); | 
					
						
							|  |  |  |   await bash(`npm install -g npm`); | 
					
						
							|  |  |  |   await bash(`npm -v`); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-29 16:12:32 +02:00
										 |  |  |   // -> build it
 | 
					
						
							| 
									
										
										
										
											2018-04-29 16:32:29 +02:00
										 |  |  |   await bash(`yarn install`); | 
					
						
							| 
									
										
										
										
											2018-04-29 16:12:32 +02:00
										 |  |  |   await bash(`yarn run build`); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // -> publish it
 | 
					
						
							| 
									
										
										
										
											2018-05-03 20:40:26 +02:00
										 |  |  |   plugins.beautylog.log(`now invoking npm to publish the package!`); | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |   await bash(`npm publish ${npmAccessCliString}`); | 
					
						
							| 
									
										
										
										
											2018-05-03 20:07:49 +02:00
										 |  |  |   plugins.beautylog.success(`Package was successfully published!`); | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-08-28 13:08:21 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  | let install = async (): Promise<void> => { | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |   plugins.beautylog.info('now installing dependencies:'); | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  |   if (await yarnAvailable.promise) { | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |     await bash('yarn install'); | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  |   } else { | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |     await bash('npm install'); | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-08-27 15:24:17 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | export let test = async (): Promise<void> => { | 
					
						
							| 
									
										
										
										
											2018-04-04 22:25:13 +02:00
										 |  |  |   plugins.beautylog.info('now starting tests:'); | 
					
						
							|  |  |  |   await bash('yarn test'); | 
					
						
							|  |  |  | }; |