94 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import * as plugins from './npmci.plugins'
 | |
| import {bash} from './npmci.bash'
 | |
| import * as env from './npmci.env'
 | |
| import * as sshModule from './npmci.ssh'
 | |
| 
 | |
| 
 | |
| // types
 | |
| 
 | |
| /**
 | |
|  * defines possible prepare services
 | |
|  */
 | |
| export type TPrepService = 'npm' | 'docker' | 'docker-gitlab' | 'ssh';
 | |
| 
 | |
| /**
 | |
|  * authenticates npm with token from env var
 | |
|  */
 | |
| let npm = function(){
 | |
|     let done = plugins.q.defer()
 | |
| 
 | |
|     let npmrcPrefix: string = '//registry.npmjs.org/:_authToken='
 | |
|     let npmToken: string = process.env.NPMCI_TOKEN_NPM
 | |
|     let npmrcFileString = 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')
 | |
|     done.resolve()
 | |
|     return done.promise
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * logs in docker
 | |
|  */
 | |
| let docker = function(){
 | |
|     let done = plugins.q.defer()
 | |
|     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]
 | |
|     plugins.shelljs.exec('docker login -u ' + username + ' -p ' + password)
 | |
|     done.resolve()
 | |
|     return done.promise
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * prepare docker for gitlab registry
 | |
|  */
 | |
| let dockerGitlab = function(){
 | |
|     let done = plugins.q.defer()
 | |
|     env.setDockerRegistry('registry.gitlab.com')
 | |
|     plugins.shelljs.exec('docker login -u gitlab-ci-token -p ' + process.env.CI_BUILD_TOKEN + ' ' + 'registry.gitlab.com')
 | |
|     done.resolve()
 | |
|     return done.promise
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * prepare ssh
 | |
|  */
 | |
| let ssh = function(){
 | |
|     let done = plugins.q.defer()
 | |
|     sshModule.ssh()
 | |
|         .then(done.resolve)
 | |
|     return done.promise
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * the main exported prepare function
 | |
|  * @param servieArg describes the service to prepare
 | |
|  */
 | |
| export let prepare = function(serviceArg: TPrepService){
 | |
|     switch (serviceArg) {
 | |
|         case 'npm':
 | |
|             return npm()
 | |
|         case 'docker':
 | |
|             return docker()
 | |
|         case 'docker-gitlab':
 | |
|             return dockerGitlab()
 | |
|         case 'ssh':
 | |
|             return ssh()
 | |
|         default:
 | |
|             break
 | |
|     }
 | |
| }
 |