| 
									
										
										
										
											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' | 
					
						
							|  |  |  | import * as sshModule from '../npmci.ssh' | 
					
						
							| 
									
										
										
										
											2016-06-01 05:42:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 () => { | 
					
						
							|  |  |  |   env.setDockerRegistry('docker.io') | 
					
						
							|  |  |  |   let dockerRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)/ | 
					
						
							|  |  |  |   if (!process.env.NPMCI_LOGIN_DOCKER) { | 
					
						
							|  |  |  |     plugins.beautylog.error('You have to specify Login Data to the Docker Registry') | 
					
						
							|  |  |  |     process.exit(1) | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   plugins.shelljs.exec('docker login -u gitlab-ci-token -p ' + process.env.CI_BUILD_TOKEN + ' ' + 'registry.gitlab.com') // Always also login to GitLab Registry
 | 
					
						
							|  |  |  |   let dockerRegexResultArray = dockerRegex.exec(process.env.NPMCI_LOGIN_DOCKER) | 
					
						
							|  |  |  |   let username = dockerRegexResultArray[1] | 
					
						
							|  |  |  |   let password = dockerRegexResultArray[2] | 
					
						
							| 
									
										
										
										
											2017-03-11 01:34:03 +01:00
										 |  |  |   await bash('docker login -u ' + username + ' -p ' + password) | 
					
						
							| 
									
										
										
										
											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 () => { | 
					
						
							|  |  |  |   env.setDockerRegistry('registry.gitlab.com') | 
					
						
							|  |  |  |   plugins.shelljs.exec('docker login -u gitlab-ci-token -p ' + process.env.CI_BUILD_TOKEN + ' ' + 'registry.gitlab.com') | 
					
						
							|  |  |  |   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 () => { | 
					
						
							|  |  |  |   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
										 |  |  | } |