From 9e8fbac573a142a7a6abf3a0a5041b8b5437b010 Mon Sep 17 00:00:00 2001 From: Phil Kunz Date: Fri, 4 May 2018 15:58:11 +0200 Subject: [PATCH] update to better smartcli parsing --- .gitlab-ci.yml | 2 +- docs/index.md | 100 -------------------------------------------- docs/ssh.md | 22 ---------- package.json | 2 +- readme.md | 73 ++++++++++++++++++++++++++++++++ ts/mod_npm/index.ts | 2 +- ts/npmci.cli.ts | 70 ++++++++++++++----------------- ts/npmci.plugins.ts | 2 +- yarn.lock | 43 +++++++++++-------- 9 files changed, 134 insertions(+), 182 deletions(-) delete mode 100644 docs/index.md delete mode 100644 docs/ssh.md diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fcf7125..694f93e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -87,7 +87,7 @@ testSTABLE: release: stage: release script: - - npmci node install lts + - npmci node install stable - npmci npm prepare - npmci npm publish only: diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index d5d8921..0000000 --- a/docs/index.md +++ /dev/null @@ -1,100 +0,0 @@ -# npmci - -node and docker in gitlab ci on steroids - -## Availabililty - -[![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmci) -[![git](https://gitzone.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/gitzone/npmci) -[![git](https://gitzone.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/gitzone/npmci) -[![docs](https://gitzone.gitlab.io/assets/repo-button-docs.svg)](https://gitzone.gitlab.io/npmci/) - -## Status for master - -[![build status](https://GitLab.com/gitzone/npmci/badges/master/build.svg)](https://GitLab.com/gitzone/npmci/commits/master) -[![coverage report](https://GitLab.com/gitzone/npmci/badges/master/coverage.svg)](https://GitLab.com/gitzone/npmci/commits/master) -[![npm downloads per month](https://img.shields.io/npm/dm/npmci.svg)](https://www.npmjs.com/package/npmci) -[![Dependency Status](https://david-dm.org/gitzonetools/npmci.svg)](https://david-dm.org/gitzonetools/npmci) -[![bitHound Dependencies](https://www.bithound.io/github/gitzonetools/npmci/badges/dependencies.svg)](https://www.bithound.io/github/gitzonetools/npmci/master/dependencies/npm) -[![bitHound Code](https://www.bithound.io/github/gitzonetools/npmci/badges/code.svg)](https://www.bithound.io/github/gitzonetools/npmci) -[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) -[![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) -[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/) - -## Usage - -Use TypeScript for best in class instellisense. - -npmci is designed to work in docker CI environments. The following docker images come with npmci presinstalled: - -Docker Hub: - -* [hosttoday/ht-docker-node:npmci](https://hub.docker.com/r/hosttoday/ht-docker-node/) - has LTS node version and npmci preinstalled. -* [hosttoday/ht-docker-dbase](https://hub.docker.com/r/hosttoday/ht-docker-dbase/) - based on docker:git, can be used to build docker images in conjunction with docker:dind - -npmci can be called from commandline: - -```shell -# Install any node version: -npmci install lts # will install latest LTS node version and update PATH for node and npm versions -npmci install stable # will install latest stable node version and update PATH for node and npm -npmci install legacy # will install latest legacy node version and update PATH for node and npm -npmci install x.x.x # will install any specific node version. - -# Install any node version, install dependencies and run test in cwd: -npmci test lts # will install latest lts node version and run "npm install" and "npm test". -npmci test stable # will install latest stable node version and run "npm install" and "npm test". -npmci test legacy # will install latest legacy node version and run "npm install" and "npm test". -npmci test x.x.x # will install any specific node version and run "npm install" and "npm test". -npmci test docker # will test any build image with tests defined in ./npmci/dockertest_1.sh to ./npmci/dockertest_100.sh -## npmci test docker will look at all Dockerfiles and look for according tags on GitLab container registry - - -# prepare tools -npmci prepare npm # will look for $NPMCI_TOKEN_NPM env var and create .npmrc, so npm is authenticated -npmci prepare docker # will look for $NPMCI_LOGIN_DOCKER in form username|password and authenticate docker -npmci prepare docker-gitlab # will authenticate docker for gitlab container registry - -# build containers -npmci build docker # will build containers -## all Dockerfiles named Dockerfile* are picked up. -## specify tags like this Dockerfile_[tag] -## uploads all built images as [username]/[reponame]:[tag]_test to GitLab -## then test in next step with "npmci test docker" - -# publish npm module -npmci publish npm # will look vor $NPMCI_TOKEN_NPM env var and push any module in cwd to npm -npmci publish docker - -# trigger webhooks -npmci trigger # will look for NPMCI_TRIGGER_1 to NPMCI_TRIGGER_100 in form domain|id|token|ref|name -``` - -## Configuration - -npmci supports the use of npmextra. - -To configure npmci create a `npmextra.json` file at the root of your project - -```json -{ - "npmci": { - "globalNpmTools": ["npm-check-updates", "protractor", "npmts", "gitzone"] - } -} -``` - -**Available options** - -| setting | example | description | -| -------------- | ----------------------------- | ------------------------------------------------------------------------------------------------- | -| globalNpmTools | "globalNpmTools": ["gitbook"] | Will look for the specified package names locally and (if not yet present) install them from npm. | - -For further information read the linked docs at the top of this README. - -> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh) -> | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html) - -[![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https://push.rocks) diff --git a/docs/ssh.md b/docs/ssh.md deleted file mode 100644 index a94bd1e..0000000 --- a/docs/ssh.md +++ /dev/null @@ -1,22 +0,0 @@ -# SSH - -npmci allows easy usage of ssh: - -## Add the SSH KEY to the environment - -To make npmci aware of any SSH KEY add it to the environment in the following format - -``` -# Key -NPMCI_SSHKEY_[A_NAME_FROM_YOU] -# Value: -[targeted host]|[privatekey as base64]|*** -``` - -## Use npmci cli tool in your ci script - -``` -npmci prepare ssh -npmci command git remote add heroku ssh://git@heroku.com/[you project name].git -npmci command git push heroku master -``` diff --git a/package.json b/package.json index 93ea70a..81a302e 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "tapbundle": "^2.0.0" }, "dependencies": { + "@pushrocks/smartcli": "^3.0.1", "@types/lodash": "^4.14.74", "@types/shelljs": "^0.7.4", "@types/through2": "^2.0.33", @@ -38,7 +39,6 @@ "request": "^2.81.0", "shelljs": "^0.8.1", "smartanalytics": "^2.0.9", - "smartcli": "^2.0.7", "smartdelay": "^1.0.3", "smartfile": "^4.2.20", "smartparam": "^1.0.2", diff --git a/readme.md b/readme.md index 8ef1210..e8b2ec5 100644 --- a/readme.md +++ b/readme.md @@ -25,6 +25,79 @@ node and docker in gitlab ci on steroids Use TypeScript for best in class instellisense. +npmci is designed to work in docker CI environments. The following docker images come with npmci presinstalled: + +Docker Hub: + +* [hosttoday/ht-docker-node:npmci](https://hub.docker.com/r/hosttoday/ht-docker-node/) + has LTS node version and npmci preinstalled. +* [hosttoday/ht-docker-dbase](https://hub.docker.com/r/hosttoday/ht-docker-dbase/) + based on docker:git, can be used to build docker images in conjunction with docker:dind + +npmci can be called from commandline and handle a lot of tasks durug ci: + +```shell +# Handle node versions +npmci node install stable # will install latest stable node version and update PATH for node and npm +npmci node install lts # will install latest LTS node version and update PATH for node and npm versions +npmci node install legacy # will install latest legacy node version and update PATH for node and npm +npmci node install x.x.x # will install any specific node version. + +# Handle npm and yarn tasks +npmcu npm login # logs in npm using the auth key provided at env var "NPMCI_TOKEN_NPM" +npmci npm install # installs dependencies using npm or yarn dependending on availablity +npmci npm test # tests the package +npmci npm publish # builds a package and publishes it + +# handle docker tasks +npmci docker prepare +## npmci test docker will look at all Dockerfiles and look for according tags on GitLab container registry + + +# prepare tools +npmci prepare npm # will look for $NPMCI_TOKEN_NPM env var and create .npmrc, so npm is authenticated +npmci prepare docker # will look for $NPMCI_LOGIN_DOCKER in form username|password and authenticate docker +npmci prepare docker-gitlab # will authenticate docker for gitlab container registry + +# build containers +npmci docker build # will build containers +## all Dockerfiles named Dockerfile* are picked up. +## specify tags like this Dockerfile_[tag] +## uploads all built images as [username]/[reponame]:[tag]_test to GitLab +## then test in next step with "npmci test docker" + +# publish npm module +npmci publish npm # will look vor $NPMCI_TOKEN_NPM env var and push any module in cwd to npm +npmci publish docker + +# trigger webhooks +npmci trigger # will look for NPMCI_TRIGGER_1 to NPMCI_TRIGGER_100 in form domain|id|token|ref|name +``` + +## Configuration + +npmci supports the use of npmextra. + +To configure npmci create a `npmextra.json` file at the root of your project + +```json +{ + "npmci": { + "globalNpmTools": ["npm-check-updates", "protractor", "npmts", "gitzone"] + } +} +``` + +**Available options** + +| setting | example | description | +| -------------- | ----------------------------- | ------------------------------------------------------------------------------------------------- | +| globalNpmTools | "globalNpmTools": ["gitbook"] | Will look for the specified package names locally and (if not yet present) install them from npm. | + +For further information read the linked docs at the top of this README. + +Use TypeScript for best in class instellisense. + For further information read the linked docs at the top of this README. > MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh) diff --git a/ts/mod_npm/index.ts b/ts/mod_npm/index.ts index deffb89..d9f4d63 100644 --- a/ts/mod_npm/index.ts +++ b/ts/mod_npm/index.ts @@ -76,7 +76,7 @@ let publish = async () => { await bash(`yarn run build`); plugins.beautylog.success(`Nice!!! The build for the publication was successfull!`); - plugins.beautylog.log(`Lets clean up so we don't publish any packages that don't belong to us:`) + plugins.beautylog.log(`Lets clean up so we don't publish any packages that don't belong to us:`); // -> clean up before we publish stuff await bash(`rm -r .yarn`); await bash(`rm -r node_modules`); diff --git a/ts/npmci.cli.ts b/ts/npmci.cli.ts index 6354f04..980b3e1 100644 --- a/ts/npmci.cli.ts +++ b/ts/npmci.cli.ts @@ -11,112 +11,104 @@ import * as NpmciEnv from './npmci.env'; import * as npmciMods from './npmci.mods'; -let smartcli = new plugins.smartcli.Smartcli(); -smartcli.addVersion(npmciInfo.version); +const npmciSmartcli = new plugins.smartcli.Smartcli(); +npmciSmartcli.addVersion(npmciInfo.version); // clean -smartcli +npmciSmartcli .addCommand('clean') - .then(async argv => { + .subscribe(async argv => { let modClean = await npmciMods.modClean.load(); await modClean.clean(); - }) - .catch(err => { + }, err => { console.log(err); process.exit(1); }); // cloudflare -smartcli +npmciSmartcli .addCommand('cloudflare') - .then(async argvArg => { + .subscribe(async argvArg => { let modPurge = await npmciMods.modCloudflare.load(); await modPurge.handleCli(argvArg); - }) - .catch(err => { + }, err => { console.log(err); }); // command -smartcli +npmciSmartcli .addCommand('command') - .then(async argv => { + .subscribe(async argv => { let modCommand = await npmciMods.modCommand.load(); await modCommand.command(); - }) - .catch(err => { + }, err => { console.log(err); process.exit(1); }); // command -smartcli +npmciSmartcli .addCommand('git') - .then(async argvArg => { + .subscribe(async argvArg => { let modGit = await npmciMods.modGit.load(); await modGit.handleCli(argvArg); - }) - .catch(err => { + }, err => { console.log(err); process.exit(1); }); // build -smartcli +npmciSmartcli .addCommand('docker') - .then(async argvArg => { + .subscribe(async argvArg => { let modDocker = await npmciMods.modDocker.load(); await modDocker.handleCli(argvArg); - }) - .catch(err => { + }, err => { console.log(err); process.exit(1); }); // node -smartcli +npmciSmartcli .addCommand('node') - .then(async argvArg => { + .subscribe(async argvArg => { let modNode = await npmciMods.modNode.load(); await modNode.handleCli(argvArg); - }) - .catch(err => { + }, err => { console.log(err); + process.exit(1); }); // npm -smartcli +npmciSmartcli .addCommand('npm') - .then(async argvArg => { + .subscribe(async argvArg => { let modNpm = await npmciMods.modNpm.load(); await modNpm.handleCli(argvArg); - }) - .catch(err => { + }, err => { console.log(err); }); // trigger -smartcli +npmciSmartcli .addCommand('ssh') - .then(async argvArg => { + .subscribe(async argvArg => { let modSsh = await npmciMods.modSsh.load(); await modSsh.handleCli(argvArg); - }) - .catch(err => { + }, err => { console.log(err); process.exit(1); }); // trigger -smartcli +npmciSmartcli .addCommand('trigger') - .then(async argv => { + .subscribe(async argv => { let modTrigger = await npmciMods.modTrigger.load(); await modTrigger.trigger(); - }) - .catch(err => { + }, err => { console.log(err); process.exit(1); }); -smartcli.startParse(); +npmciSmartcli.startParse(); diff --git a/ts/npmci.plugins.ts b/ts/npmci.plugins.ts index 94211ea..dc40db2 100644 --- a/ts/npmci.plugins.ts +++ b/ts/npmci.plugins.ts @@ -5,7 +5,7 @@ export import path = require('path'); export import projectinfo = require('projectinfo'); export import q = require('smartq'); export let request = require('request'); -export import smartcli = require('smartcli'); +export import smartcli = require('@pushrocks/smartcli'); export import smartdelay = require('smartdelay'); export import smartfile = require('smartfile'); export import shelljs = require('shelljs'); diff --git a/yarn.lock b/yarn.lock index f93a424..1f007f6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,18 @@ # yarn lockfile v1 +"@pushrocks/smartcli@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@pushrocks/smartcli/-/smartcli-3.0.1.tgz#330ca93f83ecaa23f9213cefa23270105a7728fc" + dependencies: + "@types/yargs" "^11.0.0" + beautylog "^6.1.10" + lik "^2.0.5" + rxjs "^6.0.0" + smartparam "1.0.2" + smartq "^1.1.8" + yargs "^11.0.0" + "@types/chai-as-promised@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.0.tgz#010b04cde78eacfb6e72bfddb3e58fe23c2e78b9" @@ -121,9 +133,9 @@ version "1.3.1" resolved "https://registry.yarnpkg.com/@types/which/-/which-1.3.1.tgz#7802c380887986ca909008afea4e08025b130f8d" -"@types/yargs@^10.0.1": - version "10.0.2" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-10.0.2.tgz#cc4ea921877874d1261e2c44b89807bc836e1b12" +"@types/yargs@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-11.0.0.tgz#124b9ed9c65b7091cc36da59ae12cbd47d8745ea" accepts@~1.3.4: version "1.3.5" @@ -921,7 +933,7 @@ lik@^1.0.38: smartq "^1.1.6" typings-global "^1.0.20" -lik@^2.0.2, lik@^2.0.5: +lik@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/lik/-/lik-2.0.5.tgz#1338a3201828b557fa91a5b8a6013743ff720e10" dependencies: @@ -1289,6 +1301,12 @@ rxjs@^5.4.2, rxjs@^5.4.3: dependencies: symbol-observable "1.0.1" +rxjs@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.1.0.tgz#833447de4e4f6427b9cec3e5eb9f56415cd28315" + dependencies: + tslib "^1.9.0" + safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -1350,19 +1368,6 @@ smartchai@^2.0.0: chai-as-promised "^7.1.1" chai-string "^1.4.0" -smartcli@^2.0.7: - version "2.0.12" - resolved "https://registry.yarnpkg.com/smartcli/-/smartcli-2.0.12.tgz#e31008539813cb0bf1122a9281521a2f0f1e0224" - dependencies: - "@types/yargs" "^10.0.1" - beautylog "^6.1.10" - lik "^2.0.2" - rxjs "^5.4.3" - smartparam "1.0.2" - smartq "^1.1.6" - typings-global "^1.0.20" - yargs "^11.0.0" - smartdelay@^1.0.3, smartdelay@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/smartdelay/-/smartdelay-1.0.4.tgz#791c1a4ee6770494064c10b1d2d2b8e6f3105b82" @@ -1689,6 +1694,10 @@ tsclass@^1.0.12: version "1.0.18" resolved "https://registry.yarnpkg.com/tsclass/-/tsclass-1.0.18.tgz#bb96bf45b45e9ed8f3a6ca51f763b4d2db821dfb" +tslib@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"