| 
									
										
										
										
											2017-05-19 12:09:33 +02:00
										 |  |  | import * as plugins from './mod.plugins' | 
					
						
							|  |  |  | import { bash } from '../npmci.bash' | 
					
						
							|  |  |  | import * as env from '../npmci.env' | 
					
						
							| 
									
										
										
										
											2017-06-15 15:46:08 +02:00
										 |  |  | import * as npmciMods from '../npmci.mods' | 
					
						
							| 
									
										
										
										
											2016-09-04 16:05:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-24 23:21:40 +01:00
										 |  |  | // types
 | 
					
						
							| 
									
										
										
										
											2016-09-04 16:05:47 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * defines possible prepare services | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-03-08 14:50:41 +01:00
										 |  |  | export type TPrepService = 'npm' | 'docker' | 'docker-gitlab' | 'ssh' | 
					
						
							| 
									
										
										
										
											2016-09-04 16:05:47 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * authenticates npm with token from env var | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-03-08 14:50:41 +01:00
										 |  |  | let npm = 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 | 
					
						
							| 
									
										
										
										
											2016-11-24 23:21:40 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2016-06-03 01:58:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-04 16:05:47 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * logs in docker | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-03-08 14:50:41 +01:00
										 |  |  | let docker = async () => { | 
					
						
							| 
									
										
										
										
											2017-07-27 13:15:39 +02:00
										 |  |  |   env.setDockerRegistry('docker.io') // TODO: checkup why we set this here
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-25 22:41:13 +02:00
										 |  |  |   // handle registries
 | 
					
						
							| 
									
										
										
										
											2017-08-25 22:13:11 +02:00
										 |  |  |   plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_LOGIN_DOCKER*', async (envString) => { | 
					
						
							| 
									
										
										
										
											2017-08-26 09:40:40 +02:00
										 |  |  |     let dockerRegexResultArray = envString.split('|') | 
					
						
							| 
									
										
										
										
											2017-08-25 22:13:11 +02:00
										 |  |  |     if (dockerRegexResultArray.length !== 3) { | 
					
						
							|  |  |  |       plugins.beautylog.error('malformed docker env var...') | 
					
						
							|  |  |  |       process.exit(1) | 
					
						
							|  |  |  |       return | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     let registry = dockerRegexResultArray[0] | 
					
						
							| 
									
										
										
										
											2017-07-27 13:15:39 +02:00
										 |  |  |     let username = dockerRegexResultArray[1] | 
					
						
							|  |  |  |     let password = dockerRegexResultArray[2] | 
					
						
							| 
									
										
										
										
											2017-08-25 22:13:11 +02:00
										 |  |  |     if (registry === 'docker.io') { | 
					
						
							| 
									
										
										
										
											2017-08-26 09:40:40 +02:00
										 |  |  |       await bash(`docker login -u ${username} -p ${password}`) | 
					
						
							|  |  |  |       plugins.beautylog.info('Logged in to standard docker hub') | 
					
						
							| 
									
										
										
										
											2017-08-25 22:13:11 +02:00
										 |  |  |     } else { | 
					
						
							|  |  |  |       await bash(`docker login -u ${username} -p ${password} ${registry}`) | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-08-25 22:41:13 +02:00
										 |  |  |     plugins.beautylog.success(`docker authenticated for ${registry}!`) | 
					
						
							| 
									
										
										
										
											2017-08-25 22:13:11 +02:00
										 |  |  |   }) | 
					
						
							| 
									
										
										
										
											2017-07-27 13:15:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // Always login to GitLab Registry
 | 
					
						
							| 
									
										
										
										
											2017-08-25 22:13:11 +02:00
										 |  |  |   await dockerGitlab() | 
					
						
							| 
									
										
										
										
											2017-03-08 14:50:41 +01:00
										 |  |  |   return | 
					
						
							| 
									
										
										
										
											2016-06-01 05:42:37 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-04 16:05:47 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * prepare docker for gitlab registry | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-03-08 14:50:41 +01:00
										 |  |  | let dockerGitlab = async () => { | 
					
						
							| 
									
										
										
										
											2017-08-26 00:23:08 +02:00
										 |  |  |   // env.setDockerRegistry('registry.gitlab.com')
 | 
					
						
							| 
									
										
										
										
											2017-08-25 22:13:11 +02:00
										 |  |  |   await bash(`docker login -u gitlab-ci-token -p ${process.env.CI_BUILD_TOKEN} registry.gitlab.com`) | 
					
						
							| 
									
										
										
										
											2017-08-25 23:47:31 +02:00
										 |  |  |   plugins.beautylog.success(`docker authenticated for registry.gitlab.com!`) | 
					
						
							| 
									
										
										
										
											2017-03-08 14:50:41 +01:00
										 |  |  |   return | 
					
						
							| 
									
										
										
										
											2016-06-03 01:58:37 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2016-06-01 05:42:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-04 16:05:47 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * prepare ssh | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-03-08 14:50:41 +01:00
										 |  |  | let ssh = async () => { | 
					
						
							| 
									
										
										
										
											2017-06-15 15:46:08 +02:00
										 |  |  |   let sshModule = await npmciMods.modSsh.load() | 
					
						
							| 
									
										
										
										
											2017-03-08 14:50:41 +01:00
										 |  |  |   await sshModule.ssh() | 
					
						
							| 
									
										
										
										
											2016-11-24 23:21:40 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2016-06-25 16:29:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-04 16:05:47 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * the main exported prepare function | 
					
						
							|  |  |  |  * @param servieArg describes the service to prepare | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-03-08 14:50:41 +01:00
										 |  |  | export let prepare = async (serviceArg: TPrepService) => { | 
					
						
							|  |  |  |   switch (serviceArg) { | 
					
						
							|  |  |  |     case 'npm': | 
					
						
							|  |  |  |       return await npm() | 
					
						
							|  |  |  |     case 'docker': | 
					
						
							|  |  |  |       return await docker() | 
					
						
							|  |  |  |     case 'docker-gitlab': | 
					
						
							|  |  |  |       return await dockerGitlab() | 
					
						
							|  |  |  |     case 'ssh': | 
					
						
							|  |  |  |       return await ssh() | 
					
						
							|  |  |  |     default: | 
					
						
							|  |  |  |       break | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2016-11-24 23:21:40 +01:00
										 |  |  | } |