100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import * as plugins from './mod.plugins'
 | |
| import { bash } from '../npmci.bash'
 | |
| import * as env from '../npmci.env'
 | |
| import * as npmciMods from '../npmci.mods'
 | |
| 
 | |
| // types
 | |
| 
 | |
| /**
 | |
|  * defines possible prepare services
 | |
|  */
 | |
| export type TPrepService = 'npm' | 'docker' | 'docker-gitlab' | 'ssh'
 | |
| 
 | |
| /**
 | |
|  * authenticates npm with token from env var
 | |
|  */
 | |
| 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
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * logs in docker
 | |
|  */
 | |
| let docker = async () => {
 | |
|   env.setDockerRegistry('docker.io') // TODO: checkup why we set this here
 | |
| 
 | |
|   // handle registries
 | |
|   plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_LOGIN_DOCKER*', async (envString) => {
 | |
|     let dockerRegexResultArray = envString.split('|')
 | |
|     if (dockerRegexResultArray.length !== 3) {
 | |
|       plugins.beautylog.error('malformed docker env var...')
 | |
|       process.exit(1)
 | |
|       return
 | |
|     }
 | |
|     let registry = dockerRegexResultArray[0]
 | |
|     let username = dockerRegexResultArray[1]
 | |
|     let password = dockerRegexResultArray[2]
 | |
|     if (registry === 'docker.io') {
 | |
|       await bash(`docker login -u ${username} -p ${password}`)
 | |
|       plugins.beautylog.info('Logged in to standard docker hub')
 | |
|     } else {
 | |
|       await bash(`docker login -u ${username} -p ${password} ${registry}`)
 | |
|     }
 | |
|     plugins.beautylog.success(`docker authenticated for ${registry}!`)
 | |
|   })
 | |
| 
 | |
|   // Always login to GitLab Registry
 | |
|   await dockerGitlab()
 | |
|   return
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * prepare docker for gitlab registry
 | |
|  */
 | |
| let dockerGitlab = async () => {
 | |
|   if (!process.env.CI_BUILD_TOKEN || process.env.CI_BUILD_TOKEN === '') {
 | |
|     plugins.beautylog.error('No registry token specified by gitlab!')
 | |
|     process.exit(1)
 | |
|   }
 | |
|   await bash(`docker login -u gitlab-ci-token -p ${process.env.CI_BUILD_TOKEN} registry.gitlab.com`)
 | |
|   plugins.beautylog.success(`docker authenticated for registry.gitlab.com!`)
 | |
|   return
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * prepare ssh
 | |
|  */
 | |
| let ssh = async () => {
 | |
|   let sshModule = await npmciMods.modSsh.load()
 | |
|   await sshModule.ssh()
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * the main exported prepare function
 | |
|  * @param servieArg describes the service to prepare
 | |
|  */
 | |
| 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
 | |
|   }
 | |
| }
 |