update to better smartcli parsing

This commit is contained in:
Philipp Kunz 2018-05-04 15:58:11 +02:00
parent 362740a55f
commit 9e8fbac573
9 changed files with 134 additions and 182 deletions

View File

@ -87,7 +87,7 @@ testSTABLE:
release: release:
stage: release stage: release
script: script:
- npmci node install lts - npmci node install stable
- npmci npm prepare - npmci npm prepare
- npmci npm publish - npmci npm publish
only: only:

View File

@ -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)

View File

@ -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
```

View File

@ -26,6 +26,7 @@
"tapbundle": "^2.0.0" "tapbundle": "^2.0.0"
}, },
"dependencies": { "dependencies": {
"@pushrocks/smartcli": "^3.0.1",
"@types/lodash": "^4.14.74", "@types/lodash": "^4.14.74",
"@types/shelljs": "^0.7.4", "@types/shelljs": "^0.7.4",
"@types/through2": "^2.0.33", "@types/through2": "^2.0.33",
@ -38,7 +39,6 @@
"request": "^2.81.0", "request": "^2.81.0",
"shelljs": "^0.8.1", "shelljs": "^0.8.1",
"smartanalytics": "^2.0.9", "smartanalytics": "^2.0.9",
"smartcli": "^2.0.7",
"smartdelay": "^1.0.3", "smartdelay": "^1.0.3",
"smartfile": "^4.2.20", "smartfile": "^4.2.20",
"smartparam": "^1.0.2", "smartparam": "^1.0.2",

View File

@ -25,6 +25,79 @@ node and docker in gitlab ci on steroids
Use TypeScript for best in class instellisense. 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. For further information read the linked docs at the top of this README.
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh) > MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)

View File

@ -76,7 +76,7 @@ let publish = async () => {
await bash(`yarn run build`); await bash(`yarn run build`);
plugins.beautylog.success(`Nice!!! The build for the publication was successfull!`); 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 // -> clean up before we publish stuff
await bash(`rm -r .yarn`); await bash(`rm -r .yarn`);
await bash(`rm -r node_modules`); await bash(`rm -r node_modules`);

View File

@ -11,112 +11,104 @@ import * as NpmciEnv from './npmci.env';
import * as npmciMods from './npmci.mods'; import * as npmciMods from './npmci.mods';
let smartcli = new plugins.smartcli.Smartcli(); const npmciSmartcli = new plugins.smartcli.Smartcli();
smartcli.addVersion(npmciInfo.version); npmciSmartcli.addVersion(npmciInfo.version);
// clean // clean
smartcli npmciSmartcli
.addCommand('clean') .addCommand('clean')
.then(async argv => { .subscribe(async argv => {
let modClean = await npmciMods.modClean.load(); let modClean = await npmciMods.modClean.load();
await modClean.clean(); await modClean.clean();
}) }, err => {
.catch(err => {
console.log(err); console.log(err);
process.exit(1); process.exit(1);
}); });
// cloudflare // cloudflare
smartcli npmciSmartcli
.addCommand('cloudflare') .addCommand('cloudflare')
.then(async argvArg => { .subscribe(async argvArg => {
let modPurge = await npmciMods.modCloudflare.load(); let modPurge = await npmciMods.modCloudflare.load();
await modPurge.handleCli(argvArg); await modPurge.handleCli(argvArg);
}) }, err => {
.catch(err => {
console.log(err); console.log(err);
}); });
// command // command
smartcli npmciSmartcli
.addCommand('command') .addCommand('command')
.then(async argv => { .subscribe(async argv => {
let modCommand = await npmciMods.modCommand.load(); let modCommand = await npmciMods.modCommand.load();
await modCommand.command(); await modCommand.command();
}) }, err => {
.catch(err => {
console.log(err); console.log(err);
process.exit(1); process.exit(1);
}); });
// command // command
smartcli npmciSmartcli
.addCommand('git') .addCommand('git')
.then(async argvArg => { .subscribe(async argvArg => {
let modGit = await npmciMods.modGit.load(); let modGit = await npmciMods.modGit.load();
await modGit.handleCli(argvArg); await modGit.handleCli(argvArg);
}) }, err => {
.catch(err => {
console.log(err); console.log(err);
process.exit(1); process.exit(1);
}); });
// build // build
smartcli npmciSmartcli
.addCommand('docker') .addCommand('docker')
.then(async argvArg => { .subscribe(async argvArg => {
let modDocker = await npmciMods.modDocker.load(); let modDocker = await npmciMods.modDocker.load();
await modDocker.handleCli(argvArg); await modDocker.handleCli(argvArg);
}) }, err => {
.catch(err => {
console.log(err); console.log(err);
process.exit(1); process.exit(1);
}); });
// node // node
smartcli npmciSmartcli
.addCommand('node') .addCommand('node')
.then(async argvArg => { .subscribe(async argvArg => {
let modNode = await npmciMods.modNode.load(); let modNode = await npmciMods.modNode.load();
await modNode.handleCli(argvArg); await modNode.handleCli(argvArg);
}) }, err => {
.catch(err => {
console.log(err); console.log(err);
process.exit(1);
}); });
// npm // npm
smartcli npmciSmartcli
.addCommand('npm') .addCommand('npm')
.then(async argvArg => { .subscribe(async argvArg => {
let modNpm = await npmciMods.modNpm.load(); let modNpm = await npmciMods.modNpm.load();
await modNpm.handleCli(argvArg); await modNpm.handleCli(argvArg);
}) }, err => {
.catch(err => {
console.log(err); console.log(err);
}); });
// trigger // trigger
smartcli npmciSmartcli
.addCommand('ssh') .addCommand('ssh')
.then(async argvArg => { .subscribe(async argvArg => {
let modSsh = await npmciMods.modSsh.load(); let modSsh = await npmciMods.modSsh.load();
await modSsh.handleCli(argvArg); await modSsh.handleCli(argvArg);
}) }, err => {
.catch(err => {
console.log(err); console.log(err);
process.exit(1); process.exit(1);
}); });
// trigger // trigger
smartcli npmciSmartcli
.addCommand('trigger') .addCommand('trigger')
.then(async argv => { .subscribe(async argv => {
let modTrigger = await npmciMods.modTrigger.load(); let modTrigger = await npmciMods.modTrigger.load();
await modTrigger.trigger(); await modTrigger.trigger();
}) }, err => {
.catch(err => {
console.log(err); console.log(err);
process.exit(1); process.exit(1);
}); });
smartcli.startParse(); npmciSmartcli.startParse();

View File

@ -5,7 +5,7 @@ export import path = require('path');
export import projectinfo = require('projectinfo'); export import projectinfo = require('projectinfo');
export import q = require('smartq'); export import q = require('smartq');
export let request = require('request'); export let request = require('request');
export import smartcli = require('smartcli'); export import smartcli = require('@pushrocks/smartcli');
export import smartdelay = require('smartdelay'); export import smartdelay = require('smartdelay');
export import smartfile = require('smartfile'); export import smartfile = require('smartfile');
export import shelljs = require('shelljs'); export import shelljs = require('shelljs');

View File

@ -2,6 +2,18 @@
# yarn lockfile v1 # 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": "@types/chai-as-promised@^7.1.0":
version "7.1.0" version "7.1.0"
resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.0.tgz#010b04cde78eacfb6e72bfddb3e58fe23c2e78b9" 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" version "1.3.1"
resolved "https://registry.yarnpkg.com/@types/which/-/which-1.3.1.tgz#7802c380887986ca909008afea4e08025b130f8d" resolved "https://registry.yarnpkg.com/@types/which/-/which-1.3.1.tgz#7802c380887986ca909008afea4e08025b130f8d"
"@types/yargs@^10.0.1": "@types/yargs@^11.0.0":
version "10.0.2" version "11.0.0"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-10.0.2.tgz#cc4ea921877874d1261e2c44b89807bc836e1b12" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-11.0.0.tgz#124b9ed9c65b7091cc36da59ae12cbd47d8745ea"
accepts@~1.3.4: accepts@~1.3.4:
version "1.3.5" version "1.3.5"
@ -921,7 +933,7 @@ lik@^1.0.38:
smartq "^1.1.6" smartq "^1.1.6"
typings-global "^1.0.20" typings-global "^1.0.20"
lik@^2.0.2, lik@^2.0.5: lik@^2.0.5:
version "2.0.5" version "2.0.5"
resolved "https://registry.yarnpkg.com/lik/-/lik-2.0.5.tgz#1338a3201828b557fa91a5b8a6013743ff720e10" resolved "https://registry.yarnpkg.com/lik/-/lik-2.0.5.tgz#1338a3201828b557fa91a5b8a6013743ff720e10"
dependencies: dependencies:
@ -1289,6 +1301,12 @@ rxjs@^5.4.2, rxjs@^5.4.3:
dependencies: dependencies:
symbol-observable "1.0.1" 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: safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2" version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 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-as-promised "^7.1.1"
chai-string "^1.4.0" 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: smartdelay@^1.0.3, smartdelay@^1.0.4:
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/smartdelay/-/smartdelay-1.0.4.tgz#791c1a4ee6770494064c10b1d2d2b8e6f3105b82" resolved "https://registry.yarnpkg.com/smartdelay/-/smartdelay-1.0.4.tgz#791c1a4ee6770494064c10b1d2d2b8e6f3105b82"
@ -1689,6 +1694,10 @@ tsclass@^1.0.12:
version "1.0.18" version "1.0.18"
resolved "https://registry.yarnpkg.com/tsclass/-/tsclass-1.0.18.tgz#bb96bf45b45e9ed8f3a6ca51f763b4d2db821dfb" 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: tunnel-agent@^0.6.0:
version "0.6.0" version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"