update async functions

This commit is contained in:
Philipp Kunz 2017-03-08 14:50:41 +01:00
parent d9b8eb3bf0
commit a54015da16
10 changed files with 197 additions and 236 deletions

View File

@ -1,15 +1,13 @@
import * as plugins from './npmci.plugins'
import { bash } from './npmci.bash'
export let command = () => {
let done = plugins.q.defer()
export let command = async () => {
let wrappedCommand: string = ''
let argvArray = process.argv
for (let i = 3; i < argvArray.length; i++) {
wrappedCommand = wrappedCommand + argvArray[i]
if (i + 1 !== argvArray.length) { wrappedCommand = wrappedCommand + ' ' }
}
bash(wrappedCommand)
done.resolve()
return done.promise
await bash(wrappedCommand)
return
}

View File

@ -7,13 +7,11 @@ export interface INpmciOptions {
globalNpmTools: string[]
}
export let getConfig = () => {
let done = q.defer<INpmciOptions>()
export let getConfig = async (): Promise<INpmciOptions> => {
let npmciNpmextra = new plugins.npmextra.Npmextra(paths.cwd)
let defaultConfig: INpmciOptions = {
globalNpmTools: []
}
let npmciConfig = npmciNpmextra.dataFor<INpmciOptions>('npmci', defaultConfig)
done.resolve(npmciConfig)
return done.promise
return npmciConfig
}

View File

@ -34,8 +34,7 @@ let configLoad = () => {
// internal config to transfer information in between npmci shell calls
try {
plugins.lodash.assign(config, plugins.smartfile.fs.toObjectSync(paths.NpmciPackageConfig, 'json'))
}
catch (err) {
} catch (err) {
configStore()
plugins.beautylog.log('config initialized!')
}

View File

@ -2,8 +2,12 @@ import * as plugins from './npmci.plugins'
import * as configModule from './npmci.config'
import { bash, bashNoError } from './npmci.bash'
import { nvmAvailable } from './npmci.bash'
export let install = (versionArg) => {
let done = plugins.q.defer()
/**
* Install a specific version of node
* @param versionArg
*/
export let install = async (versionArg) => {
plugins.beautylog.log(`now installing node version ${versionArg}`)
let version: string
if (versionArg === 'stable') {
@ -16,30 +20,28 @@ export let install = (versionArg) => {
version = versionArg
};
if (nvmAvailable) {
bash(`nvm install ${version} && nvm alias default ${version}`)
await bash(`nvm install ${version} && nvm alias default ${version}`)
plugins.beautylog.success(`Node version ${version} successfully installed!`)
} else {
plugins.beautylog.warn('Nvm not in path so staying at installed node version!')
};
bash('node -v')
bash('npm -v')
await bash('node -v')
await bash('npm -v')
// lets look for further config
configModule.getConfig()
.then(configArg => {
.then(async configArg => {
plugins.beautylog.log('Now checking for needed global npm tools...')
for (let npmTool of configArg.globalNpmTools) {
plugins.beautylog.info(`Checking for global "${npmTool}"`)
let whichOutput = bashNoError(`which ${npmTool}`)
let whichOutput: string = await bashNoError(`which ${npmTool}`)
let toolAvailable: boolean = !((/not\sfound/.test(whichOutput)) || whichOutput === '')
if (toolAvailable) {
plugins.beautylog.log(`Tool ${npmTool} is available`)
} else {
plugins.beautylog.info(`globally installing ${npmTool} from npm`)
bash(`npm install ${npmTool} -q -g`)
await bash(`npm install ${npmTool} -q -g`)
}
}
plugins.beautylog.success('all global npm tools specified in npmextra.json are now available!')
done.resolve()
})
return done.promise
}

View File

@ -9,18 +9,15 @@ import * as sshModule from './npmci.ssh'
/**
* defines possible prepare services
*/
export type TPrepService = 'npm' | 'docker' | 'docker-gitlab' | 'ssh';
export type TPrepService = 'npm' | 'docker' | 'docker-gitlab' | 'ssh'
/**
* authenticates npm with token from env var
*/
let npm = function(){
let done = plugins.q.defer()
let npm = async () => {
let npmrcPrefix: string = '//registry.npmjs.org/:_authToken='
let npmToken: string = process.env.NPMCI_TOKEN_NPM
let npmrcFileString = npmrcPrefix + npmToken
let npmrcFileString: string = npmrcPrefix + npmToken
if (npmToken) {
plugins.beautylog.info('found access token')
} else {
@ -28,15 +25,13 @@ let npm = function(){
process.exit(1)
}
plugins.smartfile.memory.toFsSync(npmrcFileString, '/root/.npmrc')
done.resolve()
return done.promise
return
}
/**
* logs in docker
*/
let docker = function(){
let done = plugins.q.defer()
let docker = async () => {
env.setDockerRegistry('docker.io')
let dockerRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)/
if (!process.env.NPMCI_LOGIN_DOCKER) {
@ -48,45 +43,39 @@ let docker = function(){
let username = dockerRegexResultArray[1]
let password = dockerRegexResultArray[2]
plugins.shelljs.exec('docker login -u ' + username + ' -p ' + password)
done.resolve()
return done.promise
return
}
/**
* prepare docker for gitlab registry
*/
let dockerGitlab = function(){
let done = plugins.q.defer()
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')
done.resolve()
return done.promise
return
}
/**
* prepare ssh
*/
let ssh = function(){
let done = plugins.q.defer()
sshModule.ssh()
.then(done.resolve)
return done.promise
let ssh = async () => {
await sshModule.ssh()
}
/**
* the main exported prepare function
* @param servieArg describes the service to prepare
*/
export let prepare = function(serviceArg: TPrepService){
export let prepare = async (serviceArg: TPrepService) => {
switch (serviceArg) {
case 'npm':
return npm()
return await npm()
case 'docker':
return docker()
return await docker()
case 'docker-gitlab':
return dockerGitlab()
return await dockerGitlab()
case 'ssh':
return ssh()
return await ssh()
default:
break
}

View File

@ -7,43 +7,40 @@ import * as NpmciBuildDocker from './npmci.build.docker'
/**
* type of supported services
*/
export type TPubService = 'npm' | 'docker';
export type TPubService = 'npm' | 'docker'
/**
* the main exported publish function.
* @param pubServiceArg references targeted service to publish to
*/
export let publish = (pubServiceArg: TPubService = 'npm') => {
export let publish = async (pubServiceArg: TPubService = 'npm') => {
switch (pubServiceArg) {
case 'npm':
return publishNpm()
return await publishNpm()
case 'docker':
return publishDocker()
return await publishDocker()
}
}
/**
* tries to publish current cwd to NPM registry
*/
let publishNpm = function(){
let done = plugins.q.defer()
prepare('npm')
.then(function(){
bash('npm publish')
let publishNpm = async () => {
await prepare('npm')
.then(async function () {
await bash('npm publish')
plugins.beautylog.ok('Done!')
done.resolve()
})
return done.promise
}
/**
* tries to pubish current cwd to Docker registry
*/
let publishDocker = function(){
let done = plugins.q.defer()
NpmciBuildDocker.readDockerfiles()
let publishDocker = async () => {
return await NpmciBuildDocker.readDockerfiles()
.then(NpmciBuildDocker.pullDockerfileImages)
.then(NpmciBuildDocker.pushDockerfiles)
.then(done.resolve)
return done.promise
.then(dockerfileArray => {
return dockerfileArray
})
}

View File

@ -25,7 +25,7 @@ let smartsocketClientConstructorOptions = {
/**
* the main run function to submit a service to a servezone
*/
export let run = (configArg) => {
export let run = async (configArg) => {
new plugins.smartsocket.SmartsocketClient(
smartsocketClientConstructorOptions
)

View File

@ -6,8 +6,7 @@ let sshInstance: plugins.smartssh.SshInstance
/**
* checks for ENV vars in form of NPMCI_SSHKEY_* and deploys any found ones
*/
export let ssh = () => {
let done = plugins.q.defer()
export let ssh = async () => {
sshInstance = new plugins.smartssh.SshInstance() // init ssh instance
plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_SSHKEY_*', evaluateSshEnv)
if (!process.env.NPMTS_TEST) {
@ -15,14 +14,12 @@ export let ssh = () => {
} else {
plugins.beautylog.log('In test mode, so not storing SSH keys to disk!')
};
done.resolve()
return done.promise
}
/**
* gets called for each found SSH ENV Var and deploys it
*/
let evaluateSshEnv = (sshkeyEnvVarArg) => {
let evaluateSshEnv = async (sshkeyEnvVarArg) => {
let resultArray = sshRegex.exec(sshkeyEnvVarArg)
let sshKey = new plugins.smartssh.SshKey()
plugins.beautylog.info('Found SSH identity for ' + resultArray[1])
@ -40,6 +37,7 @@ let evaluateSshEnv = (sshkeyEnvVarArg) => {
};
sshInstance.addKey(sshKey)
return
}
/**

View File

@ -4,46 +4,29 @@ import {install} from './npmci.install'
import * as env from './npmci.env'
import * as NpmciBuildDocker from './npmci.build.docker'
export let test = (versionArg) => {
let done = plugins.q.defer()
export let test = async (versionArg): Promise<void> => {
if (versionArg === 'docker') {
testDocker()
.then(() => {
done.resolve()
})
await testDocker()
} else {
install(versionArg)
await install(versionArg)
.then(npmDependencies)
.then(npmTest)
.then(() => {
done.resolve()
})
}
return done.promise
}
let npmDependencies = function(){
let done = plugins.q.defer()
let npmDependencies = async () => {
plugins.beautylog.info('now installing dependencies:')
bash('npm install')
done.resolve()
return done.promise
await bash('npm install')
}
let npmTest = () => {
let done = plugins.q.defer()
let npmTest = async () => {
plugins.beautylog.info('now starting tests:')
bash('npm test')
done.resolve()
return done.promise
await bash('npm test')
}
let testDocker = function(){
let done = plugins.q.defer()
NpmciBuildDocker.readDockerfiles()
let testDocker = async (): Promise<NpmciBuildDocker.Dockerfile[]> => {
return await NpmciBuildDocker.readDockerfiles()
.then(NpmciBuildDocker.pullDockerfileImages)
.then(NpmciBuildDocker.testDockerfiles)
.then(done.resolve)
return done.promise
}

View File

@ -4,15 +4,12 @@ import { bash } from './npmci.bash'
let triggerValueRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|?([a-zA-Z0-9\.\-\/]*)/
export let trigger = function () {
let done = plugins.q.defer()
export let trigger = async () => {
plugins.beautylog.info('now running triggers')
plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_TRIGGER_*', evaluateTrigger)
done.resolve()
return done.promise
}
let evaluateTrigger = (triggerEnvVarArg) => {
let evaluateTrigger = async (triggerEnvVarArg) => {
let triggerRegexResultArray = triggerValueRegex.exec(triggerEnvVarArg)
let regexDomain = triggerRegexResultArray[1]
let regexProjectId = triggerRegexResultArray[2]