npmci/ts/mod_prepare/index.ts

96 lines
2.4 KiB
TypeScript
Raw Normal View History

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