Compare commits

..

159 Commits

Author SHA1 Message Date
20bca85a12 2.3.52 2017-03-24 11:48:54 +01:00
dd260538a7 now using yarn upgrade instead yarn install to better reflect updates of packages for automatic triggers 2017-03-24 11:48:50 +01:00
d511e8c2f7 update 2017-03-24 11:44:58 +01:00
c44d6c036c 2.3.51 2017-03-11 15:56:51 +01:00
9cec914c94 now using yarn for dependencies as well 2017-03-11 15:56:48 +01:00
52a09bb8dd 2.3.50 2017-03-11 15:17:31 +01:00
1224fce295 fix yarn install decision 2017-03-11 15:17:24 +01:00
6343731772 2.3.49 2017-03-11 14:07:40 +01:00
129d22b537 update usage of yarn 2017-03-11 14:07:36 +01:00
8075281499 readd lodash typings 2017-03-11 11:52:47 +01:00
fe5f602aca 2.3.48 2017-03-11 03:35:18 +01:00
577a9b3e49 update source strings 2017-03-11 03:35:15 +01:00
e6ad22547c 2.3.47 2017-03-11 03:15:17 +01:00
8adeb5bb5c update deps 2017-03-11 03:15:13 +01:00
db0d55636e 2.3.46 2017-03-11 02:41:22 +01:00
0a73134e1c update smartshell 2017-03-11 02:41:18 +01:00
2994a9ef5b 2.3.45 2017-03-11 02:27:50 +01:00
af74e730cc fix async loop execution 2017-03-11 02:27:48 +01:00
798c909f1e 2.3.44 2017-03-11 01:34:06 +01:00
ba41776c0e update 2017-03-11 01:34:03 +01:00
254f7dcfa6 2.3.43 2017-03-11 01:20:08 +01:00
d1e060e1dc now fully async 2017-03-11 01:10:37 +01:00
Phil Kunz
bbc2e9002a Merge branch 'master' into 'master'
Go fully async with shelljs to reduce processor strain

Closes #2

See merge request !2
2017-03-08 19:22:39 +00:00
1db5d6e669 update async 2017-03-08 14:50:58 +01:00
a54015da16 update async functions 2017-03-08 14:50:41 +01:00
d9b8eb3bf0 update 2017-03-07 18:07:03 +01:00
5ede124f56 2.3.42 2017-02-19 14:53:00 +01:00
e835a17fe4 2.3.41 2017-02-19 14:46:14 +01:00
b86b090c07 update dependencies and add yarn 2017-02-19 14:46:05 +01:00
97d2a8d1b7 improve gitlab.yml 2017-02-08 23:44:47 +01:00
38e54f13ff 2.3.40 2017-02-08 21:32:49 +01:00
a11233ddb6 update package.json 2017-02-08 21:32:45 +01:00
7cfd5e4358 update links 2017-02-08 21:32:22 +01:00
431371db5a 2.3.39 2016-12-15 01:09:00 +01:00
e784c02a40 now correctly evaluating which output 2016-12-15 01:08:54 +01:00
f156b58b95 2.3.38 2016-12-15 00:06:15 +01:00
40a00cb1b0 readd logging 2016-12-15 00:06:11 +01:00
0f384a799a 2.3.37 2016-12-14 23:10:57 +01:00
d2f4512ca4 compile 2016-12-14 23:10:54 +01:00
Phil Kunz
ee7e7e2551 Merge branch 'master' into 'master'
fix tool Installation and bash without error.

See merge request !1
2016-12-14 22:03:00 +00:00
Philipp Kunz
4c3d284186 Update npmci.bash.ts 2016-12-14 16:45:48 +00:00
Philipp Kunz
5a472326ad Update npmci.install.ts 2016-12-14 16:38:57 +00:00
5021ee099d 2.3.36 2016-12-13 23:16:22 +01:00
cd7363625d now logging path 2016-12-13 23:16:19 +01:00
399168f5d0 2.3.35 2016-12-11 16:34:16 +01:00
a272556ccd improve README 2016-12-11 16:33:56 +01:00
172b9f9b3f 2.3.34 2016-12-11 16:20:33 +01:00
9eb3d1d06a fix README 2016-12-11 16:20:29 +01:00
4093675a9d 2.3.33 2016-12-11 16:19:46 +01:00
53a2fb4c78 update README 2016-12-11 16:19:25 +01:00
59ed6829e4 2.3.32 2016-12-10 23:27:37 +01:00
4e01b0c9b6 improve logs 2016-12-10 23:27:34 +01:00
85a6099d56 2.3.31 2016-12-10 22:43:16 +01:00
787145816a fix npm global Tool installation 2016-12-10 22:43:14 +01:00
b194bf2a0e 2.3.30 2016-12-10 22:28:30 +01:00
407d9f8237 fixup globalNpmTools 2016-12-10 22:28:27 +01:00
ec196e1d53 add base picture to README 2016-11-25 22:46:14 +01:00
305fc6e68e 2.3.29 2016-11-25 22:44:51 +01:00
35a7a83ee6 fix global install of needed tools 2016-11-25 22:44:49 +01:00
165000144c 2.3.28 2016-11-25 22:34:32 +01:00
77a4cd7a12 now checking if tool already installed 2016-11-25 22:34:28 +01:00
9822a9c867 2.3.27 2016-11-25 14:29:11 +01:00
a1209c74dd 2.3.26 2016-11-25 14:15:48 +01:00
d9f517cf46 fix cli usage 2016-11-25 14:15:44 +01:00
1e976372fa 2.3.25 2016-11-25 13:43:38 +01:00
733a35b789 improve install handling of needed global tools 2016-11-25 13:43:35 +01:00
07deb7497a 2.3.24 2016-11-25 13:26:02 +01:00
2096e27fc5 fixed 16 file Buffer overflow 2016-11-25 13:25:45 +01:00
301a317fa0 update 2016-11-25 00:07:20 +01:00
299d2567f8 test 2016-11-24 23:21:40 +01:00
09c7dae079 2.3.23 2016-11-17 23:02:45 +01:00
19c118e166 fix gitlab-ci 2016-11-17 23:02:37 +01:00
c0a5057a0d 2.3.22 2016-11-15 22:47:23 +01:00
cfdce55c9b fixed node versions 2016-11-15 22:47:21 +01:00
a364fcb961 2.3.21 2016-11-15 21:57:42 +01:00
dfb8b43559 update node versions 2016-11-15 21:57:18 +01:00
3da8e60149 change to loglevel warn 2016-11-15 13:02:56 +01:00
509b97548c 2.3.20 2016-11-15 13:00:07 +01:00
6dda67bf37 add silent install 2016-11-15 12:59:36 +01:00
1e4dd1554c update script 2016-11-15 12:55:45 +01:00
4db221ea2d update tests 2016-11-15 00:18:32 +01:00
0e63c17fc2 2.3.19 2016-11-15 00:07:58 +01:00
0427368cfa update deps and node version 2016-11-15 00:07:55 +01:00
da180b090c 2.3.18 2016-09-20 12:43:42 +02:00
22d7e83b8d update node versions 2016-09-20 12:43:37 +02:00
bb910f9fab 2.3.17 2016-09-04 19:49:48 +02:00
420c39dd5f fix ci 2016-09-04 19:49:38 +02:00
7d4c80ed04 2.3.16 2016-09-04 17:57:00 +02:00
5858682946 improve typings 2016-09-04 17:56:56 +02:00
c4aa3a8926 update commnts 2016-09-04 16:05:47 +02:00
f0e62c06e8 2.3.15 2016-09-04 13:42:34 +02:00
61ee70ea8d update docs and comments, add servezone compatibility 2016-09-04 13:42:22 +02:00
66bef3cd60 2.3.14 2016-08-02 23:11:57 +02:00
28054b17fc update nvm detection 2016-08-02 23:11:42 +02:00
8736530920 2.3.13 2016-08-02 16:20:35 +02:00
2d9c225d28 start shift to making bare bash obsolete 2016-08-02 16:20:32 +02:00
236df3388f test 2016-07-18 19:18:19 +02:00
0406998e92 test 2016-07-18 18:55:34 +02:00
4e865e7bef test 2016-07-18 18:53:17 +02:00
62e4dd23d2 2.3.12 2016-07-18 18:51:34 +02:00
2962c5f8f9 now using global npmts 2016-07-18 18:50:58 +02:00
7e506b8e69 2.3.11 2016-07-18 18:43:07 +02:00
26400b8153 update base image for CI 2016-07-18 18:43:01 +02:00
a94e1771a4 2.3.10 2016-07-18 18:39:07 +02:00
0213afa46e updated setter for environment module to comply with JS standards 2016-07-18 18:39:04 +02:00
6f4138e536 2.3.9 2016-07-18 17:20:27 +02:00
5c5ca3ebf0 recompile 2016-07-18 17:20:24 +02:00
29ccf9d866 2.3.8 2016-07-18 17:18:58 +02:00
a68fc4050f now going node 6 all the way 2016-07-18 17:17:57 +02:00
2e965bcb46 2.3.7 2016-07-18 16:58:12 +02:00
73aceb4054 2.3.6 2016-07-18 16:57:52 +02:00
9f63fba3e2 switch to ES6 2016-07-18 16:56:53 +02:00
253d69254b prepare ES6 2016-07-18 16:47:42 +02:00
44e5d3758c 2.3.5 2016-06-29 23:59:21 +02:00
9fc142d931 2.3.4 2016-06-29 23:55:50 +02:00
f4c7c0b239 fix stable version 2016-06-29 23:55:38 +02:00
5c28561c1f 2.3.3 2016-06-29 23:18:55 +02:00
d0547a78dd updated versions 2016-06-29 23:18:51 +02:00
5438b7792f 2.3.2 2016-06-26 16:18:35 +02:00
35c9bd1aff updated dependencies 2016-06-26 16:18:17 +02:00
26a5766807 2.3.1 2016-06-26 05:21:29 +02:00
ab6b447d55 fix undefined error for docker registry 2016-06-26 05:21:24 +02:00
a2a7544797 2.3.0 2016-06-26 04:54:20 +02:00
83cd4e9a13 now has <clean> command 2016-06-26 04:54:10 +02:00
21b46dd939 cleanup 2016-06-26 04:45:00 +02:00
5b86db6f98 2.2.3 2016-06-26 04:41:04 +02:00
f091fb2452 fix some config issues and update to latest smartssh 2016-06-26 04:40:58 +02:00
b59bf2de8d 2.2.2 2016-06-26 02:17:27 +02:00
3653373f12 some cosmetics 2016-06-26 02:17:17 +02:00
94e7f502b3 2.2.1 2016-06-25 19:19:43 +02:00
a699d29885 fix function call for ssh 2016-06-25 19:18:42 +02:00
85d50c868b 2.2.0 2016-06-25 18:53:44 +02:00
2b4bfbdb39 now ships with ssh support 2016-06-25 18:53:35 +02:00
e77a30b2bc update structure 2016-06-25 16:29:06 +02:00
b8a0c788eb 2.1.64 2016-06-25 12:35:13 +02:00
713338b2c3 update legacy version 2016-06-25 12:34:57 +02:00
233fa74566 2.1.63 2016-06-25 12:29:39 +02:00
8eadb7449b 2.1.62 2016-06-25 12:29:14 +02:00
3ebed47170 switched from commander to smartcli 2016-06-25 12:28:51 +02:00
9f5c7b0ca0 2.1.61 2016-06-25 11:58:38 +02:00
7de38ce050 now has working version 2016-06-25 11:58:33 +02:00
c495f20b3d 2.1.60 2016-06-25 03:21:43 +02:00
2082773f56 2.1.59 2016-06-25 03:21:08 +02:00
e27dd058cc fic some issues 2016-06-25 03:19:29 +02:00
f9cee9ac85 improve ssh implementation 2016-06-25 02:55:36 +02:00
e3c300293d 2.1.58 2016-06-24 02:55:05 +02:00
0f0eaf4c4f add version commandline option 2016-06-24 02:54:55 +02:00
57fe78c673 2.1.57 2016-06-23 22:22:11 +02:00
3298b6298e improve triggr detection 2016-06-23 22:22:03 +02:00
3e80ea15e0 update deps 2016-06-23 20:57:09 +02:00
0b5c99a516 now looking for project level config 2016-06-19 02:30:50 +02:00
a48f8b9c54 2.1.56 2016-06-11 21:14:25 +02:00
b8079e0bc9 now correctly adding spaces in wrapped commands 2016-06-11 21:14:20 +02:00
61c00f31ea 2.1.55 2016-06-11 21:02:05 +02:00
7fc8648d40 now detects wrapped command correctly 2016-06-11 21:01:44 +02:00
973c55e147 2.1.54 2016-06-11 20:45:01 +02:00
a3523ad7c4 fixed command 2016-06-11 20:44:56 +02:00
216c28d76e 2.1.53 2016-06-11 20:30:41 +02:00
b22b2fa802 fix npmci command 2016-06-11 20:30:35 +02:00
71 changed files with 4912 additions and 1291 deletions

4
.gitignore vendored
View File

@@ -1,4 +1,6 @@
node_modules/ node_modules/
coverage/ coverage/
docs/ pages/
public/
config.json config.json
.yarn/

View File

@@ -1,17 +1,20 @@
image: hosttoday/ht-docker-node:lts image: node:latest
stages: stages:
- test - test
- release - release
- trigger - trigger
- page
before_script: before_script:
- npm install -g npmci - npm install npmci -q -g
testLTS: testLTS:
stage: test stage: test
script: script:
- npmci install lts
- npmci command npm install -g -q npmts
- npmci test lts - npmci test lts
tags: tags:
- docker - docker
@@ -19,6 +22,8 @@ testLTS:
testSTABLE: testSTABLE:
stage: test stage: test
script: script:
- npmci install stable
- npmci command npm install -g -q npmts
- npmci test stable - npmci test stable
tags: tags:
- docker - docker
@@ -26,6 +31,8 @@ testSTABLE:
testLEGACY: testLEGACY:
stage: test stage: test
script: script:
- npmci install legacy
- npmci command npm install -g -q npmts
- npmci test legacy - npmci test legacy
tags: tags:
- docker - docker
@@ -48,3 +55,16 @@ trigger:
- tags - tags
tags: tags:
- docker - docker
pages:
stage: page
script:
- npmci test stable
- npmci command npm install -g -q npmpage
- npmci command npmpage --host gitlab
only:
- tags
artifacts:
expire_in: 1 week
paths:
- public

View File

@@ -1,4 +1,4 @@
docs/ pages/
coverage/ coverage/
test/ test/
node_modules/ node_modules/

View File

@@ -1,8 +1,20 @@
# NPMCI # NPMCI
npmci is your friend when it comes to handling npm packages during CI builds. It is optimized for GitLab CI npmci is your friend when it comes to handling npm packages during CI builds. It is optimized for GitLab CI
## Status ## Availabililty
[![build status](https://gitlab.com/pushrocks/npmci/badges/master/build.svg)](https://gitlab.com/pushrocks/npmci/commits/master) [![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/docs)
## 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)
[![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/)
## Usage ## Usage
npmci is designed to work in docker CI environments. The following docker images come with npmci presinstalled: npmci is designed to work in docker CI environments. The following docker images come with npmci presinstalled:
@@ -38,8 +50,8 @@ npmci prepare docker-gitlab # will authenticate docker for gitlab container regi
# build containers # build containers
npmci build docker # will build containers npmci build docker # will build containers
## all Dockerfiles named DOckerfile* are picked up. ## all Dockerfiles named Dockerfile* are picked up.
## specify tags lake this Dockerfile_[tag] ## specify tags like this Dockerfile_[tag]
## uploads all built images as [username]/[reponame]:[tag]_test to GitLab ## uploads all built images as [username]/[reponame]:[tag]_test to GitLab
## then test in next step with "npmci test docker" ## then test in next step with "npmci test docker"
@@ -51,3 +63,28 @@ npmci publish docker
npmci trigger # will look for NPMCI_TRIGGER_1 to NPMCI_TRIGGER_100 in form domain|id|token|ref|name 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.
[![npm](https://gitzone.gitlab.io/assets/repo-footer.svg)](https://push.rocks)

View File

@@ -1,10 +0,0 @@
environment:
nodejs_version: "4"
install:
- ps: Install-Product node $env:nodejs_version
- npm install
test_script:
- node --version
- npm --version
- npm test
build: off

2
dist/cli.js vendored Normal file
View File

@@ -0,0 +1,2 @@
#!/usr/bin/env node
var index = require("../dist/index.js");

7
dist/index.d.ts vendored
View File

@@ -1,4 +1,3 @@
import "typings-global"; export { build } from './npmci.build';
export { build } from "./npmci.build"; export { install } from './npmci.install';
export { install } from "./npmci.install"; export { publish } from './npmci.publish';
export { publish } from "./npmci.publish";

113
dist/index.js vendored

File diff suppressed because one or more lines are too long

23
dist/npmci.bash.d.ts vendored
View File

@@ -1,3 +1,20 @@
import "typings-global"; import * as plugins from './npmci.plugins';
export declare let bash: (commandArg: string, retryArg?: number, bareArg?: boolean) => string; /**
export declare let bashBare: (commandArg: any, retryArg?: number) => string; * wether nvm is available or not
*/
export declare let nvmAvailable: plugins.q.Deferred<boolean>;
export declare let yarnAvailable: plugins.q.Deferred<boolean>;
/**
* bash() allows using bash with nvm in path
* @param commandArg - The command to execute
* @param retryArg - The retryArg: 0 to any positive number will retry, -1 will always succeed, -2 will return undefined
*/
export declare let bash: (commandArg: string, retryArg?: number, bareArg?: boolean) => Promise<string>;
/**
* bashBare allows usage of bash without sourcing any files like nvm
*/
export declare let bashBare: (commandArg: string, retryArg?: number) => Promise<string>;
/**
* bashNoError allows executing stuff without throwing an error
*/
export declare let bashNoError: (commandArg: string) => Promise<string>;

128
dist/npmci.bash.js vendored
View File

@@ -1,44 +1,110 @@
"use strict"; "use strict";
require("typings-global"); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
var plugins = require("./npmci.plugins"); return new (P || (P = Promise))(function (resolve, reject) {
exports.bash = function (commandArg, retryArg, bareArg) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
if (retryArg === void 0) { retryArg = 2; } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
if (bareArg === void 0) { bareArg = false; } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
var exitCode; step((generator = generator.apply(thisArg, _arguments || [])).next());
var stdOut; });
var execResult; };
if (!process.env.NPMTS_TEST) { Object.defineProperty(exports, "__esModule", { value: true });
for (var i = 0; i <= retryArg; i++) { const plugins = require("./npmci.plugins");
if (!bareArg) { const paths = require("./npmci.paths");
execResult = plugins.shelljs.exec("bash -c \"source /usr/local/nvm/nvm.sh &&" + const smartq = require("smartq");
commandArg + /**
"\""); * wether nvm is available or not
*/
exports.nvmAvailable = smartq.defer();
exports.yarnAvailable = smartq.defer();
/**
* the smartshell instance for npmci
*/
let npmciSmartshell = new plugins.smartshell.Smartshell({
executor: 'bash',
sourceFilePaths: []
});
/**
* check for tools.
*/
let checkToolsAvailable = () => __awaiter(this, void 0, void 0, function* () {
// check for nvm
if ((yield plugins.smartshell.execSilent(`bash -c "source /usr/local/nvm/nvm.sh"`)).exitCode === 0) {
npmciSmartshell.addSourceFiles([`/usr/local/nvm/nvm.sh`]);
exports.nvmAvailable.resolve(true);
}
else if ((yield plugins.smartshell.execSilent(`bash -c "source ~/.nvm/nvm.sh"`)).exitCode === 0) {
npmciSmartshell.addSourceFiles([`~/.nvm/nvm.sh`]);
exports.nvmAvailable.resolve(true);
} }
else { else {
execResult = plugins.shelljs.exec(commandArg); exports.nvmAvailable.resolve(false);
} }
exitCode = execResult.code; ;
stdOut = execResult.stdout; // check for yarn
if (exitCode !== 0 && i == retryArg) { yield plugins.smartshell.which('yarn').then(() => {
plugins.smartshell.exec(`yarn config set cache-folder ${plugins.path.join(paths.cwd, '.yarn')}`);
exports.yarnAvailable.resolve(true);
}, () => { exports.yarnAvailable.resolve(false); });
});
checkToolsAvailable();
/**
* bash() allows using bash with nvm in path
* @param commandArg - The command to execute
* @param retryArg - The retryArg: 0 to any positive number will retry, -1 will always succeed, -2 will return undefined
*/
exports.bash = (commandArg, retryArg = 2, bareArg = false) => __awaiter(this, void 0, void 0, function* () {
yield exports.nvmAvailable.promise; // make sure nvm check has run
let execResult;
// determine if we fail
let failOnError = true;
if (retryArg === -1) {
failOnError = false;
retryArg = 0;
}
if (!process.env.NPMTS_TEST) {
for (let i = 0; i <= retryArg; i++) {
if (!bareArg) {
execResult = yield npmciSmartshell.exec(commandArg);
}
else {
execResult = yield plugins.smartshell.exec(commandArg);
}
// determine how bash reacts to error and success
if (execResult.exitCode !== 0 && i === retryArg) {
if (failOnError) {
plugins.beautylog.error('something went wrong and retries are exhausted');
process.exit(1); process.exit(1);
} }
else if (exitCode == 0) { }
i = retryArg + 1; // if everything works out ok retrials are not wanted else if (execResult.exitCode === 0) {
i = retryArg + 1; // retry +1 breaks for loop, if everything works out ok retrials are not wanted
} }
else { else {
plugins.beautylog.warn("Something went wrong! Exit Code: " + exitCode.toString()); plugins.beautylog.warn('Something went wrong! Exit Code: ' + execResult.exitCode.toString());
plugins.beautylog.info("Retry " + (i + 1).toString() + " of " + retryArg.toString()); plugins.beautylog.info('Retry ' + (i + 1).toString() + ' of ' + retryArg.toString());
} }
} }
} }
else { else {
plugins.beautylog.log("ShellExec would be: " + commandArg.blue); plugins.beautylog.log('ShellExec would be: ' + commandArg);
yield plugins.smartdelay.delayFor(100);
execResult = {
exitCode: 0,
stdout: 'testOutput'
};
} }
return stdOut; return execResult.stdout;
}; });
exports.bashBare = function (commandArg, retryArg) { /**
if (retryArg === void 0) { retryArg = 2; } * bashBare allows usage of bash without sourcing any files like nvm
return exports.bash(commandArg, retryArg, true); */
}; exports.bashBare = (commandArg, retryArg = 2) => __awaiter(this, void 0, void 0, function* () {
return yield exports.bash(commandArg, retryArg, true);
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5wbWNpLmJhc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUN4QixJQUFZLE9BQU8sV0FBTSxpQkFBaUIsQ0FBQyxDQUFBO0FBRWhDLFlBQUksR0FBRyxVQUFDLFVBQWlCLEVBQUMsUUFBWSxFQUFDLE9BQWU7SUFBNUIsd0JBQVksR0FBWixZQUFZO0lBQUMsdUJBQWUsR0FBZixlQUFlO0lBQzdELElBQUksUUFBZSxDQUFDO0lBQ3BCLElBQUksTUFBYSxDQUFDO0lBQ2xCLElBQUksVUFBVSxDQUFDO0lBQ2YsRUFBRSxDQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFBLENBQUM7UUFDeEIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUMsQ0FBQztZQUNoQyxFQUFFLENBQUEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBLENBQUM7Z0JBQ1QsVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUM3QiwyQ0FBMkM7b0JBQzNDLFVBQVU7b0JBQ1YsSUFBSSxDQUNQLENBQUM7WUFDTixDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ0osVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFDRCxRQUFRLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztZQUMzQixNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUMzQixFQUFFLENBQUEsQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQSxDQUFDO2dCQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFBLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUM7Z0JBQ3JCLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMscURBQXFEO1lBQzNFLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDbEYsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLE1BQU0sR0FBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMxRixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHNCQUFzQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNuRSxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUE7QUFFVSxnQkFBUSxHQUFHLFVBQUMsVUFBVSxFQUFDLFFBQVk7SUFBWix3QkFBWSxHQUFaLFlBQVk7SUFDMUMsTUFBTSxDQUFDLFlBQUksQ0FBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFDLENBQUMsQ0FBQSIsImZpbGUiOiJucG1jaS5iYXNoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIjtcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vbnBtY2kucGx1Z2luc1wiO1xuXG5leHBvcnQgbGV0IGJhc2ggPSAoY29tbWFuZEFyZzpzdHJpbmcscmV0cnlBcmcgPSAyLGJhcmVBcmcgPSBmYWxzZSkgPT4ge1xuICAgIGxldCBleGl0Q29kZTpudW1iZXI7XG4gICAgbGV0IHN0ZE91dDpzdHJpbmc7XG4gICAgbGV0IGV4ZWNSZXN1bHQ7XG4gICAgaWYoIXByb2Nlc3MuZW52Lk5QTVRTX1RFU1Qpe1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSByZXRyeUFyZzsgaSsrKXtcbiAgICAgICAgICAgIGlmKCFiYXJlQXJnKXtcbiAgICAgICAgICAgICAgICBleGVjUmVzdWx0ID0gcGx1Z2lucy5zaGVsbGpzLmV4ZWMoXG4gICAgICAgICAgICAgICAgICAgIFwiYmFzaCAtYyBcXFwic291cmNlIC91c3IvbG9jYWwvbnZtL252bS5zaCAmJlwiICtcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEFyZyArXG4gICAgICAgICAgICAgICAgICAgIFwiXFxcIlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXhlY1Jlc3VsdCA9IHBsdWdpbnMuc2hlbGxqcy5leGVjKGNvbW1hbmRBcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhpdENvZGUgPSBleGVjUmVzdWx0LmNvZGU7XG4gICAgICAgICAgICBzdGRPdXQgPSBleGVjUmVzdWx0LnN0ZG91dDtcbiAgICAgICAgICAgIGlmKGV4aXRDb2RlICE9PSAwICYmIGkgPT0gcmV0cnlBcmcpe1xuICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZihleGl0Q29kZSA9PSAwKXtcbiAgICAgICAgICAgICAgICBpID0gcmV0cnlBcmcgKyAxOyAvLyBpZiBldmVyeXRoaW5nIHdvcmtzIG91dCBvayByZXRyaWFscyBhcmUgbm90IHdhbnRlZFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwbHVnaW5zLmJlYXV0eWxvZy53YXJuKFwiU29tZXRoaW5nIHdlbnQgd3JvbmchIEV4aXQgQ29kZTogXCIgKyBleGl0Q29kZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICBwbHVnaW5zLmJlYXV0eWxvZy5pbmZvKFwiUmV0cnkgXCIgKyAoaSArIDEpLnRvU3RyaW5nKCkgKyBcIiBvZiBcIiArICByZXRyeUFyZy50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHBsdWdpbnMuYmVhdXR5bG9nLmxvZyhcIlNoZWxsRXhlYyB3b3VsZCBiZTogXCIgKyBjb21tYW5kQXJnLmJsdWUpXG4gICAgfVxuICAgIHJldHVybiBzdGRPdXQ7XG59XG5cbmV4cG9ydCBsZXQgYmFzaEJhcmUgPSAoY29tbWFuZEFyZyxyZXRyeUFyZyA9IDIpID0+IHtcbiAgICByZXR1cm4gYmFzaChjb21tYW5kQXJnLHJldHJ5QXJnLHRydWUpO1xufSJdfQ== });
/**
* bashNoError allows executing stuff without throwing an error
*/
exports.bashNoError = (commandArg) => __awaiter(this, void 0, void 0, function* () {
return yield exports.bash(commandArg, -1);
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuYmFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWNpLmJhc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLDJDQUEwQztBQUMxQyx1Q0FBc0M7QUFFdEMsaUNBQWdDO0FBRWhDOztHQUVHO0FBQ1EsUUFBQSxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBVyxDQUFBO0FBQ3RDLFFBQUEsYUFBYSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQVcsQ0FBQTtBQUNsRDs7R0FFRztBQUNILElBQUksZUFBZSxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7SUFDdEQsUUFBUSxFQUFFLE1BQU07SUFDaEIsZUFBZSxFQUFFLEVBQUU7Q0FDcEIsQ0FBQyxDQUFBO0FBRUY7O0dBRUc7QUFDSCxJQUFJLG1CQUFtQixHQUFHO0lBQ3hCLGdCQUFnQjtJQUNoQixFQUFFLENBQUMsQ0FDRCxDQUFDLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsd0NBQXdDLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxDQUMvRixDQUFDLENBQUMsQ0FBQztRQUNELGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUE7UUFDekQsb0JBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDUixDQUFDLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxDQUN2RixDQUFDLENBQUMsQ0FBQztRQUNELGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFBO1FBQ2pELG9CQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLG9CQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzdCLENBQUM7SUFBQSxDQUFDO0lBRUYsaUJBQWlCO0lBQ2pCLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUN6QztRQUNFLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMvRixxQkFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM3QixDQUFDLEVBQ0QsUUFBUSxxQkFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FDdkMsQ0FBQTtBQUNILENBQUMsQ0FBQSxDQUFBO0FBQ0QsbUJBQW1CLEVBQUUsQ0FBQTtBQUlyQjs7OztHQUlHO0FBQ1EsUUFBQSxJQUFJLEdBQUcsQ0FBTyxVQUFrQixFQUFFLFdBQW1CLENBQUMsRUFBRSxVQUFtQixLQUFLO0lBQ3pGLE1BQU0sb0JBQVksQ0FBQyxPQUFPLENBQUEsQ0FBQyw4QkFBOEI7SUFDekQsSUFBSSxVQUEwQyxDQUFBO0lBRTlDLHVCQUF1QjtJQUN2QixJQUFJLFdBQVcsR0FBWSxJQUFJLENBQUE7SUFDL0IsRUFBRSxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixXQUFXLEdBQUcsS0FBSyxDQUFBO1FBQ25CLFFBQVEsR0FBRyxDQUFDLENBQUE7SUFDZCxDQUFDO0lBRUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDNUIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNuQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsVUFBVSxHQUFHLE1BQU0sZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUNyRCxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sVUFBVSxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDeEQsQ0FBQztZQUVELGlEQUFpRDtZQUNqRCxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDaEQsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDaEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQTtvQkFDekUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDakIsQ0FBQztZQUNILENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQSxDQUFDLCtFQUErRTtZQUNsRyxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO2dCQUM1RixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1lBQ3RGLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ04sT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxDQUFDLENBQUE7UUFDMUQsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN0QyxVQUFVLEdBQUc7WUFDWCxRQUFRLEVBQUUsQ0FBQztZQUNYLE1BQU0sRUFBRSxZQUFZO1NBQ3JCLENBQUE7SUFDSCxDQUFDO0lBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUE7QUFDMUIsQ0FBQyxDQUFBLENBQUE7QUFFRDs7R0FFRztBQUNRLFFBQUEsUUFBUSxHQUFHLENBQU8sVUFBa0IsRUFBRSxXQUFtQixDQUFDO0lBQ25FLE1BQU0sQ0FBQyxNQUFNLFlBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQy9DLENBQUMsQ0FBQSxDQUFBO0FBRUQ7O0dBRUc7QUFDUSxRQUFBLFdBQVcsR0FBRyxDQUFPLFVBQWtCO0lBQ2hELE1BQU0sQ0FBQyxNQUFNLFlBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNuQyxDQUFDLENBQUEsQ0FBQSJ9

10
dist/npmci.build.d.ts vendored
View File

@@ -1,2 +1,8 @@
import "typings-global"; /**
export declare let build: (commandArg: any) => any; * defines possible build services
*/
export declare type TBuildService = 'docker';
/**
* builds for a specific service
*/
export declare let build: (commandArg: any) => Promise<void>;

View File

@@ -1,11 +1,44 @@
export declare let build: () => any; /// <reference types="node" />
export declare let readDockerfiles: () => any; /**
export declare let sortDockerfiles: (sortableArrayArg: Dockerfile[]) => any; * builds a cwd of Dockerfiles by triggering a promisechain
export declare let mapDockerfiles: (sortedArray: Dockerfile[]) => any; */
export declare let buildDockerfiles: (sortedArrayArg: Dockerfile[]) => any; export declare let build: () => Promise<void>;
export declare let pushDockerfiles: (sortedArrayArg: Dockerfile[]) => any; /**
export declare let pullDockerfileImages: (sortableArrayArg: Dockerfile[], registryArg?: string) => any; * creates instance of class Dockerfile for all Dockerfiles in cwd
export declare let testDockerfiles: (sortedArrayArg: Dockerfile[]) => any; * @returns Promise<Dockerfile[]>
*/
export declare let readDockerfiles: () => Promise<Dockerfile[]>;
/**
* sorts Dockerfiles into a dependency chain
* @param sortableArrayArg an array of instances of class Dockerfile
* @returns Promise<Dockerfile[]>
*/
export declare let sortDockerfiles: (sortableArrayArg: Dockerfile[]) => Promise<Dockerfile[]>;
/**
* maps local Dockerfiles dependencies to the correspoding Dockerfile class instances
*/
export declare let mapDockerfiles: (sortedArray: Dockerfile[]) => Promise<Dockerfile[]>;
/**
* builds the correspoding real docker image for each Dockerfile class instance
*/
export declare let buildDockerfiles: (sortedArrayArg: Dockerfile[]) => Promise<Dockerfile[]>;
/**
* pushes the real Dockerfile images to a Docker registry
*/
export declare let pushDockerfiles: (sortedArrayArg: Dockerfile[]) => Promise<Dockerfile[]>;
/**
* pulls corresponding real Docker images for instances of Dockerfile from a registry.
* This is needed if building, testing, and publishing of Docker images is carried out in seperate CI stages.
*/
export declare let pullDockerfileImages: (sortableArrayArg: Dockerfile[], registryArg?: string) => Promise<Dockerfile[]>;
/**
* tests all Dockerfiles in by calling class Dockerfile.test();
* @param sortedArrayArg Dockerfile[] that contains all Dockerfiles in cwd
*/
export declare let testDockerfiles: (sortedArrayArg: Dockerfile[]) => Promise<Dockerfile[]>;
/**
* class Dockerfile represents a Dockerfile on disk in npmci
*/
export declare class Dockerfile { export declare class Dockerfile {
filePath: string; filePath: string;
repo: string; repo: string;
@@ -24,13 +57,41 @@ export declare class Dockerfile {
fileContents?: string | Buffer; fileContents?: string | Buffer;
read?: boolean; read?: boolean;
}); });
build(): any; /**
push(stageArg: any): any; * builds the Dockerfile
pull(registryArg: string): void; */
test(): void; build(): Promise<void>;
getId(): string; /**
* pushes the Dockerfile to a registry
*/
push(stageArg: any): Promise<void>;
/**
* pulls the Dockerfile from a registry
*/
pull(registryArg: string): Promise<void>;
/**
* tests the Dockerfile;
*/
test(): Promise<void>;
/**
* gets the id of a Dockerfile
*/
getId(): Promise<string>;
} }
/**
* returns a version for a docker file
* @execution SYNC
*/
export declare let dockerFileVersion: (dockerfileNameArg: string) => string; export declare let dockerFileVersion: (dockerfileNameArg: string) => string;
/**
*
*/
export declare let dockerBaseImage: (dockerfileContentArg: string) => string; export declare let dockerBaseImage: (dockerfileContentArg: string) => string;
/**
*
*/
export declare let dockerTag: (registryArg: string, repoArg: string, versionArg: string, suffixArg?: string) => string; export declare let dockerTag: (registryArg: string, repoArg: string, versionArg: string, suffixArg?: string) => string;
/**
*
*/
export declare let cleanTagsArrayFunction: (dockerfileArrayArg: Dockerfile[], trackingArrayArg: Dockerfile[]) => string[]; export declare let cleanTagsArrayFunction: (dockerfileArrayArg: Dockerfile[], trackingArrayArg: Dockerfile[]) => string[];

File diff suppressed because one or more lines are too long

37
dist/npmci.build.js vendored
View File

@@ -1,14 +1,27 @@
"use strict"; "use strict";
require("typings-global"); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
var plugins = require("./npmci.plugins"); return new (P || (P = Promise))(function (resolve, reject) {
var buildDocker = require("./npmci.build.docker"); function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
exports.build = function (commandArg) { function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
switch (commandArg) { function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
case "docker": step((generator = generator.apply(thisArg, _arguments || [])).next());
return buildDocker.build(); });
default:
plugins.beautylog.log("build target " + commandArg + " not recognised!");
}
}; };
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5wbWNpLmJ1aWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUFnQixDQUFDLENBQUE7QUFDeEIsSUFBWSxPQUFPLFdBQU0saUJBQWlCLENBQUMsQ0FBQTtBQUczQyxJQUFZLFdBQVcsV0FBTSxzQkFFN0IsQ0FBQyxDQUZrRDtBQUV4QyxhQUFLLEdBQUcsVUFBUyxVQUFVO0lBQ2xDLE1BQU0sQ0FBQSxDQUFDLFVBQVUsQ0FBQyxDQUFBLENBQUM7UUFDZixLQUFLLFFBQVE7WUFDVCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CO1lBQ0ksT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7QUFDTCxDQUFDLENBQUEiLCJmaWxlIjoibnBtY2kuYnVpbGQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJ0eXBpbmdzLWdsb2JhbFwiO1xuaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tIFwiLi9ucG1jaS5wbHVnaW5zXCI7XG5pbXBvcnQge2Jhc2h9IGZyb20gXCIuL25wbWNpLmJhc2hcIjtcbmltcG9ydCAqIGFzIGVudiBmcm9tIFwiLi9ucG1jaS5lbnZcIjtcbmltcG9ydCAqIGFzIGJ1aWxkRG9ja2VyIGZyb20gXCIuL25wbWNpLmJ1aWxkLmRvY2tlclwiXG5cbmV4cG9ydCBsZXQgYnVpbGQgPSBmdW5jdGlvbihjb21tYW5kQXJnKXtcbiAgICBzd2l0Y2goY29tbWFuZEFyZyl7XG4gICAgICAgIGNhc2UgXCJkb2NrZXJcIjpcbiAgICAgICAgICAgIHJldHVybiBidWlsZERvY2tlci5idWlsZCgpOyAgIFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcGx1Z2lucy5iZWF1dHlsb2cubG9nKFwiYnVpbGQgdGFyZ2V0IFwiICsgY29tbWFuZEFyZyArIFwiIG5vdCByZWNvZ25pc2VkIVwiKTtcbiAgICB9XG59XG5cblxuXG4iXX0= const plugins = require("./npmci.plugins");
const buildDocker = require("./npmci.build.docker");
/**
* builds for a specific service
*/
exports.build = (commandArg) => __awaiter(this, void 0, void 0, function* () {
switch (commandArg) {
case 'docker':
yield buildDocker.build();
break;
default:
plugins.beautylog.log('build target ' + commandArg + ' not recognised!');
}
;
return;
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9ucG1jaS5idWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsMkNBQTBDO0FBRzFDLG9EQUFtRDtBQU9uRDs7R0FFRztBQUNRLFFBQUEsS0FBSyxHQUFHLENBQU8sVUFBVTtJQUNsQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssUUFBUTtZQUNYLE1BQU0sV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFBO1lBQ3pCLEtBQUssQ0FBQTtRQUNQO1lBQ0UsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFBQSxDQUFDO0lBQ0YsTUFBTSxDQUFBO0FBQ1IsQ0FBQyxDQUFBLENBQUEifQ==

4
dist/npmci.clean.d.ts vendored Normal file
View File

@@ -0,0 +1,4 @@
/**
* cleans npmci config files
*/
export declare let clean: () => Promise<void>;

20
dist/npmci.clean.js vendored Normal file
View File

@@ -0,0 +1,20 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const plugins = require("./npmci.plugins");
const paths = require("./npmci.paths");
/**
* cleans npmci config files
*/
exports.clean = () => __awaiter(this, void 0, void 0, function* () {
plugins.smartfile.fs.removeSync(paths.NpmciPackageConfig);
return;
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuY2xlYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9ucG1jaS5jbGVhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsMkNBQTBDO0FBQzFDLHVDQUFzQztBQUV0Qzs7R0FFRztBQUNRLFFBQUEsS0FBSyxHQUFHO0lBQ2pCLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUN6RCxNQUFNLENBQUE7QUFDUixDQUFDLENBQUEsQ0FBQSJ9

View File

@@ -1,2 +1 @@
import "typings-global"; export declare let command: () => Promise<void>;
export declare let command: (commandArg: any) => any;

31
dist/npmci.command.js vendored
View File

@@ -1,11 +1,24 @@
"use strict"; "use strict";
require("typings-global"); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
var plugins = require("./npmci.plugins"); return new (P || (P = Promise))(function (resolve, reject) {
exports.command = function (commandArg) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
var done = plugins.q.defer(); function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
console.log(process.argv); function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
done.resolve(); step((generator = generator.apply(thisArg, _arguments || [])).next());
return done.promise; });
}; };
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5wbWNpLmNvbW1hbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUN4QixJQUFZLE9BQU8sV0FBTSxpQkFBaUIsQ0FBQyxDQUFBO0FBR2hDLGVBQU8sR0FBRyxVQUFDLFVBQVU7SUFDNUIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtBQUN2QixDQUFDLENBQUEiLCJmaWxlIjoibnBtY2kuY29tbWFuZC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInR5cGluZ3MtZ2xvYmFsXCI7XG5pbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gXCIuL25wbWNpLnBsdWdpbnNcIjtcbmltcG9ydCB7YmFzaH0gZnJvbSBcIi4vbnBtY2kuYmFzaFwiO1xuXG5leHBvcnQgbGV0IGNvbW1hbmQgPSAoY29tbWFuZEFyZykgPT4ge1xuICAgIGxldCBkb25lID0gcGx1Z2lucy5xLmRlZmVyKClcbiAgICBjb25zb2xlLmxvZyhwcm9jZXNzLmFyZ3YpO1xuICAgIGRvbmUucmVzb2x2ZSgpO1xuICAgIHJldHVybiBkb25lLnByb21pc2Vcbn0iXX0= const npmci_bash_1 = require("./npmci.bash");
exports.command = () => __awaiter(this, void 0, void 0, function* () {
let wrappedCommand = '';
let argvArray = process.argv;
for (let i = 3; i < argvArray.length; i++) {
wrappedCommand = wrappedCommand + argvArray[i];
if (i + 1 !== argvArray.length) {
wrappedCommand = wrappedCommand + ' ';
}
}
yield npmci_bash_1.bash(wrappedCommand);
return;
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWNpLmNvbW1hbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUNBLDZDQUFtQztBQUV4QixRQUFBLE9BQU8sR0FBRztJQUNuQixJQUFJLGNBQWMsR0FBVyxFQUFFLENBQUE7SUFDL0IsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQTtJQUM1QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMxQyxjQUFjLEdBQUcsY0FBYyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM5QyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQUMsY0FBYyxHQUFHLGNBQWMsR0FBRyxHQUFHLENBQUE7UUFBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxNQUFNLGlCQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDMUIsTUFBTSxDQUFBO0FBQ1IsQ0FBQyxDQUFBLENBQUEifQ==

4
dist/npmci.config.d.ts vendored Normal file
View File

@@ -0,0 +1,4 @@
export interface INpmciOptions {
globalNpmTools: string[];
}
export declare let getConfig: () => Promise<INpmciOptions>;

21
dist/npmci.config.js vendored Normal file
View File

@@ -0,0 +1,21 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const plugins = require("./npmci.plugins");
const paths = require("./npmci.paths");
exports.getConfig = () => __awaiter(this, void 0, void 0, function* () {
let npmciNpmextra = new plugins.npmextra.Npmextra(paths.cwd);
let defaultConfig = {
globalNpmTools: []
};
let npmciConfig = npmciNpmextra.dataFor('npmci', defaultConfig);
return npmciConfig;
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtY2kuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFQSwyQ0FBMEM7QUFDMUMsdUNBQXNDO0FBTTNCLFFBQUEsU0FBUyxHQUFHO0lBQ3JCLElBQUksYUFBYSxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzVELElBQUksYUFBYSxHQUFrQjtRQUNqQyxjQUFjLEVBQUUsRUFBRTtLQUNuQixDQUFBO0lBQ0QsSUFBSSxXQUFXLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBZ0IsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQzlFLE1BQU0sQ0FBQyxXQUFXLENBQUE7QUFDcEIsQ0FBQyxDQUFBLENBQUEifQ==

15
dist/npmci.env.d.ts vendored
View File

@@ -1,10 +1,15 @@
import "typings-global"; import { GitRepo } from 'smartstring';
import { GitRepo } from "smartstring"; import { Dockerfile } from './npmci.build.docker';
import { Dockerfile } from "./npmci.build.docker";
export declare let repo: GitRepo; export declare let repo: GitRepo;
export declare let buildStage: string; export declare let buildStage: string;
export declare let dockerRegistry: any; export declare let dockerRegistry: string;
export declare let setDockerRegistry: (dockerRegistryArg: string) => void;
export declare let dockerFilesBuilt: Dockerfile[]; export declare let dockerFilesBuilt: Dockerfile[];
export declare let dockerFiles: Dockerfile[]; export declare let dockerFiles: Dockerfile[];
export declare let config: {
dockerRegistry: any;
dockerFilesBuilt: Dockerfile[];
dockerFiles: Dockerfile[];
project: any;
};
export declare let configStore: () => void; export declare let configStore: () => void;
export declare let configLoad: () => void;

58
dist/npmci.env.js vendored
View File

@@ -1,37 +1,49 @@
"use strict"; "use strict";
require("typings-global"); Object.defineProperty(exports, "__esModule", { value: true });
var plugins = require("./npmci.plugins"); const plugins = require("./npmci.plugins");
var paths = require("./npmci.paths"); const paths = require("./npmci.paths");
var smartstring_1 = require("smartstring"); const smartstring_1 = require("smartstring");
if (process.env.CI_BUILD_REPO) if (process.env.CI_BUILD_REPO)
exports.repo = new smartstring_1.GitRepo(process.env.CI_BUILD_REPO); exports.repo = new smartstring_1.GitRepo(process.env.CI_BUILD_REPO);
exports.buildStage = process.env.CI_BUILD_STAGE; exports.buildStage = process.env.CI_BUILD_STAGE;
exports.setDockerRegistry = (dockerRegistryArg) => {
exports.dockerRegistry = dockerRegistryArg;
};
exports.dockerFilesBuilt = []; exports.dockerFilesBuilt = [];
exports.dockerFiles = []; exports.dockerFiles = [];
exports.configStore = function () { exports.config = {
var config = { dockerRegistry: undefined,
dockerRegistry: exports.dockerRegistry,
dockerFilesBuilt: exports.dockerFilesBuilt, dockerFilesBuilt: exports.dockerFilesBuilt,
dockerFiles: exports.dockerFiles dockerFiles: exports.dockerFiles,
}; project: undefined
plugins.smartfile.memory.toFsSync(JSON.stringify(config), {
fileName: "config.json",
filePath: paths.NpmciPackageRoot
});
}; };
exports.configLoad = function () { exports.configStore = () => {
var config; exports.config.dockerRegistry = exports.dockerRegistry;
plugins.smartfile.memory.toFsSync(JSON.stringify(exports.config), paths.NpmciPackageConfig);
};
let configLoad = () => {
// internal config to transfer information in between npmci shell calls
try { try {
config = plugins.smartfile.local.toObjectSync(paths.NpmciPackageConfig, "json"); plugins.lodash.assign(exports.config, plugins.smartfile.fs.toObjectSync(paths.NpmciPackageConfig, 'json'));
} }
catch (err) { catch (err) {
config = {};
exports.configStore(); exports.configStore();
plugins.beautylog.log("config initialized!"); plugins.beautylog.log('config initialized!');
} }
config.dockerRegistry ? exports.dockerRegistry = config.dockerRegistry : void (0); // project config
config.dockerFilesBuilt ? exports.dockerFilesBuilt = config.dockerFilesBuilt : void (0); try {
if (!exports.config.project) {
exports.config.project = plugins.smartfile.fs.toObjectSync(paths.NpmciProjectDir, 'npmci.json');
plugins.beautylog.ok('project config found!');
}
;
}
catch (err) {
exports.config.project = {};
plugins.beautylog.log('no project config found, so proceeding with default behaviour!');
}
exports.config.dockerRegistry ? exports.dockerRegistry = exports.config.dockerRegistry : void (0);
exports.config.dockerFilesBuilt ? exports.dockerFilesBuilt = exports.config.dockerFilesBuilt : void (0);
}; };
exports.configLoad(); configLoad();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtY2kuZW52LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkNBQTBDO0FBQzFDLHVDQUFzQztBQUN0Qyw2Q0FBcUM7QUFJckMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7SUFBQyxZQUFJLEdBQUcsSUFBSSxxQkFBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUE7QUFFakUsUUFBQSxVQUFVLEdBQVcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUE7QUFJL0MsUUFBQSxpQkFBaUIsR0FBRyxDQUFDLGlCQUF5QjtJQUN2RCxzQkFBYyxHQUFHLGlCQUFpQixDQUFBO0FBQ3BDLENBQUMsQ0FBQTtBQUNVLFFBQUEsZ0JBQWdCLEdBQWlCLEVBQUUsQ0FBQTtBQUNuQyxRQUFBLFdBQVcsR0FBaUIsRUFBRSxDQUFBO0FBQzlCLFFBQUEsTUFBTSxHQUFHO0lBQ2xCLGNBQWMsRUFBRSxTQUFTO0lBQ3pCLGdCQUFnQixFQUFFLHdCQUFnQjtJQUNsQyxXQUFXLEVBQUUsbUJBQVc7SUFDeEIsT0FBTyxFQUFFLFNBQVM7Q0FDbkIsQ0FBQTtBQUVVLFFBQUEsV0FBVyxHQUFHO0lBQ3ZCLGNBQU0sQ0FBQyxjQUFjLEdBQUcsc0JBQWMsQ0FBQTtJQUN0QyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBTSxDQUFDLEVBQ3RCLEtBQUssQ0FBQyxrQkFBa0IsQ0FDekIsQ0FBQTtBQUNILENBQUMsQ0FBQTtBQUVELElBQUksVUFBVSxHQUFHO0lBQ2YsdUVBQXVFO0lBQ3ZFLElBQUksQ0FBQztRQUNILE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQU0sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDcEcsQ0FBQztJQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDYixtQkFBVyxFQUFFLENBQUE7UUFDYixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFFRCxpQkFBaUI7SUFDakIsSUFBSSxDQUFDO1FBQ0gsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNwQixjQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFBO1lBQ3ZGLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLENBQUE7UUFDL0MsQ0FBQztRQUFBLENBQUM7SUFDSixDQUFDO0lBQ0QsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNYLGNBQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFBO1FBQ25CLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxDQUFDLENBQUE7SUFDekYsQ0FBQztJQUVELGNBQU0sQ0FBQyxjQUFjLEdBQUcsc0JBQWMsR0FBRyxjQUFNLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN6RSxjQUFNLENBQUMsZ0JBQWdCLEdBQUcsd0JBQWdCLEdBQUcsY0FBTSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNqRixDQUFDLENBQUE7QUFDRCxVQUFVLEVBQUUsQ0FBQSJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5wbWNpLmVudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ3hCLElBQVksT0FBTyxXQUFNLGlCQUFpQixDQUFDLENBQUE7QUFDM0MsSUFBWSxLQUFLLFdBQU0sZUFBZSxDQUFDLENBQUE7QUFDdkMsNEJBQXNCLGFBQWEsQ0FBQyxDQUFBO0FBSXBDLEVBQUUsQ0FBQSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO0lBQUMsWUFBSSxHQUFHLElBQUkscUJBQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBRWpFLGtCQUFVLEdBQVUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7QUFJL0Msd0JBQWdCLEdBQWdCLEVBQUUsQ0FBQztBQUNuQyxtQkFBVyxHQUFnQixFQUFFLENBQUM7QUFFOUIsbUJBQVcsR0FBRztJQUNyQixJQUFJLE1BQU0sR0FBRztRQUNULGNBQWMsRUFBRSxzQkFBYztRQUM5QixnQkFBZ0IsRUFBRSx3QkFBZ0I7UUFDbEMsV0FBVyxFQUFFLG1CQUFXO0tBQzNCLENBQUE7SUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQ3RCO1FBQ0ksUUFBUSxFQUFDLGFBQWE7UUFDdEIsUUFBUSxFQUFDLEtBQUssQ0FBQyxnQkFBZ0I7S0FDbEMsQ0FDSixDQUFDO0FBQ04sQ0FBQyxDQUFBO0FBRVUsa0JBQVUsR0FBRztJQUNwQixJQUFJLE1BQU0sQ0FBQztJQUNYLElBQUksQ0FBQztRQUNELE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25GLENBQ0E7SUFBQSxLQUFLLENBQUEsQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDO1FBQ1AsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLG1CQUFXLEVBQUUsQ0FBQztRQUNkLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLEdBQUcsc0JBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxHQUFHLEtBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsd0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixHQUFHLEtBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRixDQUFDLENBQUE7QUFDRCxrQkFBVSxFQUFFLENBQUMiLCJmaWxlIjoibnBtY2kuZW52LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIjtcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vbnBtY2kucGx1Z2luc1wiO1xuaW1wb3J0ICogYXMgcGF0aHMgZnJvbSBcIi4vbnBtY2kucGF0aHNcIjtcbmltcG9ydCB7R2l0UmVwb30gZnJvbSBcInNtYXJ0c3RyaW5nXCI7XG5pbXBvcnQge0RvY2tlcmZpbGV9IGZyb20gXCIuL25wbWNpLmJ1aWxkLmRvY2tlclwiXG5cbmV4cG9ydCBsZXQgcmVwbzpHaXRSZXBvO1xuaWYocHJvY2Vzcy5lbnYuQ0lfQlVJTERfUkVQTykgcmVwbyA9IG5ldyBHaXRSZXBvKHByb2Nlc3MuZW52LkNJX0JVSUxEX1JFUE8pO1xuXG5leHBvcnQgbGV0IGJ1aWxkU3RhZ2U6c3RyaW5nID0gcHJvY2Vzcy5lbnYuQ0lfQlVJTERfU1RBR0U7XG5cbi8vIGhhbmRsaW5nIGNvbmZpZyBiZXR3ZWVuIGNvbW1hbmRzXG5leHBvcnQgbGV0IGRvY2tlclJlZ2lzdHJ5OyAvLyB3aWxsIGJlIHNldCBieSBucG1jaS5wcmVwYXJlXG5leHBvcnQgbGV0IGRvY2tlckZpbGVzQnVpbHQ6RG9ja2VyZmlsZVtdID0gW107XG5leHBvcnQgbGV0IGRvY2tlckZpbGVzOkRvY2tlcmZpbGVbXSA9IFtdO1xuXG5leHBvcnQgbGV0IGNvbmZpZ1N0b3JlID0gKCkgPT4ge1xuICAgIGxldCBjb25maWcgPSB7XG4gICAgICAgIGRvY2tlclJlZ2lzdHJ5OiBkb2NrZXJSZWdpc3RyeSxcbiAgICAgICAgZG9ja2VyRmlsZXNCdWlsdDogZG9ja2VyRmlsZXNCdWlsdCxcbiAgICAgICAgZG9ja2VyRmlsZXM6IGRvY2tlckZpbGVzXG4gICAgfVxuICAgIHBsdWdpbnMuc21hcnRmaWxlLm1lbW9yeS50b0ZzU3luYyhcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSxcbiAgICAgICAge1xuICAgICAgICAgICAgZmlsZU5hbWU6XCJjb25maWcuanNvblwiLFxuICAgICAgICAgICAgZmlsZVBhdGg6cGF0aHMuTnBtY2lQYWNrYWdlUm9vdFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuZXhwb3J0IGxldCBjb25maWdMb2FkID0gKCkgPT4ge1xuICAgIGxldCBjb25maWc7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uZmlnID0gcGx1Z2lucy5zbWFydGZpbGUubG9jYWwudG9PYmplY3RTeW5jKHBhdGhzLk5wbWNpUGFja2FnZUNvbmZpZyxcImpzb25cIik7XG4gICAgfVxuICAgIGNhdGNoKGVycil7XG4gICAgICAgIGNvbmZpZyA9IHt9O1xuICAgICAgICBjb25maWdTdG9yZSgpO1xuICAgICAgICBwbHVnaW5zLmJlYXV0eWxvZy5sb2coXCJjb25maWcgaW5pdGlhbGl6ZWQhXCIpO1xuICAgIH1cbiAgICBcbiAgICBjb25maWcuZG9ja2VyUmVnaXN0cnkgPyBkb2NrZXJSZWdpc3RyeSA9IGNvbmZpZy5kb2NrZXJSZWdpc3RyeSA6IHZvaWQoMCk7XG4gICAgY29uZmlnLmRvY2tlckZpbGVzQnVpbHQgPyBkb2NrZXJGaWxlc0J1aWx0ID0gY29uZmlnLmRvY2tlckZpbGVzQnVpbHQgOiB2b2lkKDApO1xufVxuY29uZmlnTG9hZCgpOyJdfQ==

View File

@@ -1,2 +1,5 @@
import "typings-global"; /**
export declare let install: (versionArg: any) => any; * Install a specific version of node
* @param versionArg
*/
export declare let install: (versionArg: any) => Promise<void>;

82
dist/npmci.install.js vendored
View File

@@ -1,28 +1,68 @@
"use strict"; "use strict";
require("typings-global"); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
var plugins = require("./npmci.plugins"); return new (P || (P = Promise))(function (resolve, reject) {
var npmci_bash_1 = require("./npmci.bash"); function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
exports.install = function (versionArg) { function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
var done = plugins.q.defer(); function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
plugins.beautylog.log("now installing " + "node ".green + ("version " + versionArg).yellow); step((generator = generator.apply(thisArg, _arguments || [])).next());
var version; });
if (versionArg == "lts") { };
version = "4"; Object.defineProperty(exports, "__esModule", { value: true });
const plugins = require("./npmci.plugins");
const configModule = require("./npmci.config");
const npmci_bash_1 = require("./npmci.bash");
/**
* Install a specific version of node
* @param versionArg
*/
exports.install = (versionArg) => __awaiter(this, void 0, void 0, function* () {
plugins.beautylog.log(`now installing node version ${versionArg}`);
let version;
if (versionArg === 'stable') {
version = 'stable';
} }
else if (versionArg == "legacy") { else if (versionArg === 'lts') {
version = "4.0.0"; version = '6';
}
else if (versionArg === 'legacy') {
version = '6';
} }
else { else {
version = versionArg; version = versionArg;
} }
; ;
npmci_bash_1.bash("nvm install " + version + if (yield npmci_bash_1.nvmAvailable.promise) {
" && nvm alias default " + version); yield npmci_bash_1.bash(`nvm install ${version} && nvm alias default ${version}`);
plugins.beautylog.success("Node version " + version + " successfully installed!"); plugins.beautylog.success(`Node version ${version} successfully installed!`);
npmci_bash_1.bash("node -v"); }
npmci_bash_1.bash("npm -v"); else {
done.resolve(); plugins.beautylog.warn('Nvm not in path so staying at installed node version!');
return done.promise; }
}; ;
yield npmci_bash_1.bash('node -v');
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5wbWNpLmluc3RhbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUN4QixJQUFZLE9BQU8sV0FBTSxpQkFBaUIsQ0FBQyxDQUFBO0FBQzNDLDJCQUFtQixjQUFjLENBQUMsQ0FBQTtBQUV2QixlQUFPLEdBQUcsVUFBQyxVQUFVO0lBQzVCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RixJQUFJLE9BQWMsQ0FBQztJQUNuQixFQUFFLENBQUEsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLENBQUEsQ0FBQztRQUNwQixPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFBQyxJQUFJLENBQUMsRUFBRSxDQUFBLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxDQUFBLENBQUM7UUFDOUIsT0FBTyxHQUFHLE9BQU8sQ0FBQTtJQUNyQixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixPQUFPLEdBQUcsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFBQSxDQUFDO0lBQ0YsaUJBQUksQ0FDQSxjQUFjLEdBQUcsT0FBTztRQUN4Qix3QkFBd0IsR0FBRyxPQUFPLENBQ3JDLENBQUM7SUFDRixPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsT0FBTyxHQUFHLDBCQUEwQixDQUFDLENBQUM7SUFDbEYsaUJBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoQixpQkFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQyxDQUFBIiwiZmlsZSI6Im5wbWNpLmluc3RhbGwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJ0eXBpbmdzLWdsb2JhbFwiO1xuaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tIFwiLi9ucG1jaS5wbHVnaW5zXCI7XG5pbXBvcnQge2Jhc2h9IGZyb20gXCIuL25wbWNpLmJhc2hcIjtcblxuZXhwb3J0IGxldCBpbnN0YWxsID0gKHZlcnNpb25BcmcpID0+IHtcbiAgICBsZXQgZG9uZSA9IHBsdWdpbnMucS5kZWZlcigpO1xuICAgIHBsdWdpbnMuYmVhdXR5bG9nLmxvZyhcIm5vdyBpbnN0YWxsaW5nIFwiICsgXCJub2RlIFwiLmdyZWVuICsgKFwidmVyc2lvbiBcIiArIHZlcnNpb25BcmcpLnllbGxvdyk7XG4gICAgbGV0IHZlcnNpb246c3RyaW5nO1xuICAgIGlmKHZlcnNpb25BcmcgPT0gXCJsdHNcIil7XG4gICAgICAgIHZlcnNpb24gPSBcIjRcIjtcbiAgICB9IGVsc2UgaWYodmVyc2lvbkFyZyA9PSBcImxlZ2FjeVwiKXtcbiAgICAgICAgdmVyc2lvbiA9IFwiNC4wLjBcIlxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uQXJnO1xuICAgIH07XG4gICAgYmFzaChcbiAgICAgICAgXCJudm0gaW5zdGFsbCBcIiArIHZlcnNpb24gK1xuICAgICAgICBcIiAmJiBudm0gYWxpYXMgZGVmYXVsdCBcIiArIHZlcnNpb25cbiAgICApO1xuICAgIHBsdWdpbnMuYmVhdXR5bG9nLnN1Y2Nlc3MoXCJOb2RlIHZlcnNpb24gXCIgKyB2ZXJzaW9uICsgXCIgc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCFcIik7XG4gICAgYmFzaChcIm5vZGUgLXZcIik7XG4gICAgYmFzaChcIm5wbSAtdlwiKTtcbiAgICBkb25lLnJlc29sdmUoKTtcbiAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xufSJdfQ== yield npmci_bash_1.bash('npm -v');
// lets look for further config
yield configModule.getConfig()
.then((configArg) => __awaiter(this, void 0, void 0, function* () {
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 = yield npmci_bash_1.bashNoError(`which ${npmTool}`);
let toolAvailable = !((/not\sfound/.test(whichOutput)) || whichOutput === '');
if (toolAvailable) {
plugins.beautylog.log(`Tool ${npmTool} is available`);
}
else {
plugins.beautylog.info(`globally installing ${npmTool} from npm`);
if (yield npmci_bash_1.yarnAvailable.promise) {
yield npmci_bash_1.bash(`yarn global add ${npmTool}`);
}
else {
yield npmci_bash_1.bash(`npm install ${npmTool} -q -g`);
}
}
}
plugins.beautylog.success('all global npm tools specified in npmextra.json are now available!');
}));
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuaW5zdGFsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWNpLmluc3RhbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLDJDQUEwQztBQUMxQywrQ0FBOEM7QUFDOUMsNkNBSXFDO0FBRXJDOzs7R0FHRztBQUNRLFFBQUEsT0FBTyxHQUFHLENBQU8sVUFBVTtJQUNwQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsVUFBVSxFQUFFLENBQUMsQ0FBQTtJQUNsRSxJQUFJLE9BQWUsQ0FBQTtJQUNuQixFQUFFLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM1QixPQUFPLEdBQUcsUUFBUSxDQUFBO0lBQ3BCLENBQUM7SUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDaEMsT0FBTyxHQUFHLEdBQUcsQ0FBQTtJQUNmLENBQUM7SUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkMsT0FBTyxHQUFHLEdBQUcsQ0FBQTtJQUNmLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLE9BQU8sR0FBRyxVQUFVLENBQUE7SUFDdEIsQ0FBQztJQUFBLENBQUM7SUFDRixFQUFFLENBQUMsQ0FBQyxNQUFNLHlCQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMvQixNQUFNLGlCQUFJLENBQUMsZUFBZSxPQUFPLHlCQUF5QixPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQ3BFLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGdCQUFnQixPQUFPLDBCQUEwQixDQUFDLENBQUE7SUFDOUUsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ04sT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsdURBQXVELENBQUMsQ0FBQTtJQUNqRixDQUFDO0lBQUEsQ0FBQztJQUNGLE1BQU0saUJBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNyQixNQUFNLGlCQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDcEIsK0JBQStCO0lBQy9CLE1BQU0sWUFBWSxDQUFDLFNBQVMsRUFBRTtTQUMzQixJQUFJLENBQUMsQ0FBTSxTQUFTO1FBQ25CLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDZDQUE2QyxDQUFDLENBQUE7UUFDcEUsR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDN0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLE9BQU8sR0FBRyxDQUFDLENBQUE7WUFDMUQsSUFBSSxXQUFXLEdBQVcsTUFBTSx3QkFBVyxDQUFDLFNBQVMsT0FBTyxFQUFFLENBQUMsQ0FBQTtZQUMvRCxJQUFJLGFBQWEsR0FBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksV0FBVyxLQUFLLEVBQUUsQ0FBQyxDQUFBO1lBQ3RGLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsT0FBTyxlQUFlLENBQUMsQ0FBQTtZQUN2RCxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLE9BQU8sV0FBVyxDQUFDLENBQUE7Z0JBQ2pFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sMEJBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxNQUFNLGlCQUFJLENBQUMsbUJBQW1CLE9BQU8sRUFBRSxDQUFDLENBQUE7Z0JBQzFDLENBQUM7Z0JBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ04sTUFBTSxpQkFBSSxDQUFDLGVBQWUsT0FBTyxRQUFRLENBQUMsQ0FBQTtnQkFDNUMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0VBQW9FLENBQUMsQ0FBQTtJQUNqRyxDQUFDLENBQUEsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBLENBQUEifQ==

View File

@@ -1,4 +1,3 @@
import "typings-global";
export declare let cwd: string; export declare let cwd: string;
export declare let NpmciPackageRoot: string; export declare let NpmciPackageRoot: string;
export declare let NpmciPackageConfig: string; export declare let NpmciPackageConfig: string;

13
dist/npmci.paths.js vendored
View File

@@ -1,10 +1,9 @@
"use strict"; "use strict";
require("typings-global"); Object.defineProperty(exports, "__esModule", { value: true });
var plugins = require("./npmci.plugins"); const plugins = require("./npmci.plugins");
exports.cwd = process.cwd(); exports.cwd = process.cwd();
exports.NpmciPackageRoot = plugins.path.join(__dirname, "../"); exports.NpmciPackageRoot = plugins.path.join(__dirname, '../');
exports.NpmciPackageConfig = plugins.path.join(exports.NpmciPackageRoot, "./config.json"); exports.NpmciPackageConfig = plugins.path.join(exports.NpmciPackageRoot, './config.json');
exports.NpmciProjectDir = exports.cwd; exports.NpmciProjectDir = exports.cwd;
exports.NpmciTestDir = plugins.path.join(exports.cwd, "./test"); exports.NpmciTestDir = plugins.path.join(exports.cwd, './test');
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kucGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9ucG1jaS5wYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJDQUEwQztBQUUvQixRQUFBLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUE7QUFFbkIsUUFBQSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUMsS0FBSyxDQUFDLENBQUE7QUFDckQsUUFBQSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBZ0IsRUFBQyxlQUFlLENBQUMsQ0FBQTtBQUN4RSxRQUFBLGVBQWUsR0FBRyxXQUFHLENBQUE7QUFDckIsUUFBQSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBRyxFQUFDLFFBQVEsQ0FBQyxDQUFBIn0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5wbWNpLnBhdGhzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUFnQixDQUFDLENBQUE7QUFDeEIsSUFBWSxPQUFPLFdBQU0saUJBQWlCLENBQUMsQ0FBQTtBQUVoQyxXQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRXBCLHdCQUFnQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyxLQUFLLENBQUMsQ0FBQztBQUN0RCwwQkFBa0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBZ0IsRUFBQyxlQUFlLENBQUMsQ0FBQztBQUN6RSx1QkFBZSxHQUFHLFdBQUcsQ0FBQztBQUN0QixvQkFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQUcsRUFBQyxRQUFRLENBQUMsQ0FBQyIsImZpbGUiOiJucG1jaS5wYXRocy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcInR5cGluZ3MtZ2xvYmFsXCI7XG5pbXBvcnQgKiBhcyBwbHVnaW5zIGZyb20gXCIuL25wbWNpLnBsdWdpbnNcIjtcblxuZXhwb3J0IGxldCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG5leHBvcnQgbGV0IE5wbWNpUGFja2FnZVJvb3QgPSBwbHVnaW5zLnBhdGguam9pbihfX2Rpcm5hbWUsXCIuLi9cIik7XG5leHBvcnQgbGV0IE5wbWNpUGFja2FnZUNvbmZpZyA9IHBsdWdpbnMucGF0aC5qb2luKE5wbWNpUGFja2FnZVJvb3QsXCIuL2NvbmZpZy5qc29uXCIpO1xuZXhwb3J0IGxldCBOcG1jaVByb2plY3REaXIgPSBjd2Q7XG5leHBvcnQgbGV0IE5wbWNpVGVzdERpciA9IHBsdWdpbnMucGF0aC5qb2luKGN3ZCxcIi4vdGVzdFwiKTsiXX0=

View File

@@ -1,14 +1,20 @@
import "typings-global"; export import beautylog = require('beautylog');
export import beautylog = require("beautylog");
export declare let commander: any;
export declare let gulp: any; export declare let gulp: any;
export declare let gulpFunction: any; export import gulpFunction = require('gulp-function');
export import path = require("path"); export import lodash = require('lodash');
export import projectinfo = require("projectinfo"); export import npmextra = require('npmextra');
export declare let q: any; export import path = require('path');
export import projectinfo = require('projectinfo');
export import q = require('smartq');
export declare let request: any; export declare let request: any;
export declare let shelljs: any; export import smartcli = require('smartcli');
export import smartssh = require("smartssh"); export import smartdelay = require('smartdelay');
export import smartstring = require("smartstring"); export import smartfile = require('smartfile');
export import smartfile = require("smartfile"); export import shelljs = require('shelljs');
export declare let through2: any; export import smartparam = require('smartparam');
export import smartq = require('smartq');
export import smartshell = require('smartshell');
export import smartsocket = require('smartsocket');
export import smartssh = require('smartssh');
export import smartstring = require('smartstring');
export import through2 = require('through2');

22
dist/npmci.plugins.js vendored
View File

@@ -1,17 +1,23 @@
"use strict"; "use strict";
require("typings-global"); Object.defineProperty(exports, "__esModule", { value: true });
exports.beautylog = require("beautylog"); exports.beautylog = require("beautylog");
exports.commander = require("commander"); exports.gulp = require('gulp');
exports.gulp = require("gulp");
exports.gulpFunction = require("gulp-function"); exports.gulpFunction = require("gulp-function");
exports.lodash = require("lodash");
exports.npmextra = require("npmextra");
exports.path = require("path"); exports.path = require("path");
exports.projectinfo = require("projectinfo"); exports.projectinfo = require("projectinfo");
exports.q = require("q"); exports.q = require("smartq");
exports.request = require("request"); exports.request = require('request');
exports.smartcli = require("smartcli");
exports.smartdelay = require("smartdelay");
exports.smartfile = require("smartfile");
exports.shelljs = require("shelljs"); exports.shelljs = require("shelljs");
exports.smartparam = require("smartparam");
exports.smartq = require("smartq");
exports.smartshell = require("smartshell");
exports.smartsocket = require("smartsocket");
exports.smartssh = require("smartssh"); exports.smartssh = require("smartssh");
exports.smartstring = require("smartstring"); exports.smartstring = require("smartstring");
exports.smartfile = require("smartfile");
exports.through2 = require("through2"); exports.through2 = require("through2");
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWNpLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5Q0FBOEM7QUFDbkMsUUFBQSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ2pDLGdEQUFxRDtBQUNyRCxtQ0FBd0M7QUFDeEMsdUNBQTRDO0FBQzVDLCtCQUFvQztBQUNwQyw2Q0FBa0Q7QUFDbEQsOEJBQW1DO0FBQ3hCLFFBQUEsT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUN2Qyx1Q0FBNEM7QUFDNUMsMkNBQWdEO0FBQ2hELHlDQUE4QztBQUM5QyxxQ0FBMEM7QUFDMUMsMkNBQWdEO0FBQ2hELG1DQUF3QztBQUN4QywyQ0FBZ0Q7QUFDaEQsNkNBQWtEO0FBQ2xELHVDQUE0QztBQUM1Qyw2Q0FBa0Q7QUFDbEQsdUNBQTRDIn0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5wbWNpLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUNWLGlCQUFTLFdBQVcsV0FBVyxDQUFDLENBQUM7QUFDcEMsaUJBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDakMsWUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QixvQkFBWSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNyQyxZQUFJLFdBQVcsTUFBTSxDQUFDLENBQUM7QUFDdkIsbUJBQVcsV0FBVyxhQUFhLENBQUMsQ0FBQztBQUN4QyxTQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLGVBQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0IsZUFBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMxQixnQkFBUSxXQUFXLFVBQVUsQ0FBQyxDQUFDO0FBQy9CLG1CQUFXLFdBQVcsYUFBYSxDQUFDLENBQUM7QUFDckMsaUJBQVMsV0FBVyxXQUFXLENBQUMsQ0FBQztBQUNwQyxnQkFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyIsImZpbGUiOiJucG1jaS5wbHVnaW5zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIjtcbmV4cG9ydCBpbXBvcnQgYmVhdXR5bG9nID0gcmVxdWlyZShcImJlYXV0eWxvZ1wiKTtcbmV4cG9ydCBsZXQgY29tbWFuZGVyID0gcmVxdWlyZShcImNvbW1hbmRlclwiKTtcbmV4cG9ydCBsZXQgZ3VscCA9IHJlcXVpcmUoXCJndWxwXCIpO1xuZXhwb3J0IGxldCBndWxwRnVuY3Rpb24gPSByZXF1aXJlKFwiZ3VscC1mdW5jdGlvblwiKTtcbmV4cG9ydCBpbXBvcnQgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuZXhwb3J0IGltcG9ydCBwcm9qZWN0aW5mbyA9IHJlcXVpcmUoXCJwcm9qZWN0aW5mb1wiKTtcbmV4cG9ydCBsZXQgcSA9IHJlcXVpcmUoXCJxXCIpO1xuZXhwb3J0IGxldCByZXF1ZXN0ID0gcmVxdWlyZShcInJlcXVlc3RcIik7XG5leHBvcnQgbGV0IHNoZWxsanMgPSByZXF1aXJlKFwic2hlbGxqc1wiKTtcbmV4cG9ydCBpbXBvcnQgc21hcnRzc2ggPSByZXF1aXJlKFwic21hcnRzc2hcIik7XG5leHBvcnQgaW1wb3J0IHNtYXJ0c3RyaW5nID0gcmVxdWlyZShcInNtYXJ0c3RyaW5nXCIpO1xuZXhwb3J0IGltcG9ydCBzbWFydGZpbGUgPSByZXF1aXJlKFwic21hcnRmaWxlXCIpO1xuZXhwb3J0IGxldCB0aHJvdWdoMiA9IHJlcXVpcmUoXCJ0aHJvdWdoMlwiKTsiXX0=

View File

@@ -1,2 +1,9 @@
import "typings-global"; /**
export declare let prepare: (serviceArg: string) => any; * defines possible prepare services
*/
export declare type TPrepService = 'npm' | 'docker' | 'docker-gitlab' | 'ssh';
/**
* the main exported prepare function
* @param servieArg describes the service to prepare
*/
export declare let prepare: (serviceArg: TPrepService) => Promise<void>;

112
dist/npmci.prepare.js vendored

File diff suppressed because one or more lines are too long

View File

@@ -1,2 +1,10 @@
import "typings-global"; import * as NpmciBuildDocker from './npmci.build.docker';
export declare let publish: (serviceArg?: string) => any; /**
* type of supported services
*/
export declare type TPubService = 'npm' | 'docker';
/**
* the main exported publish function.
* @param pubServiceArg references targeted service to publish to
*/
export declare let publish: (pubServiceArg?: TPubService) => Promise<void | NpmciBuildDocker.Dockerfile[]>;

75
dist/npmci.publish.js vendored
View File

@@ -1,35 +1,50 @@
"use strict"; "use strict";
require("typings-global"); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
var plugins = require("./npmci.plugins"); return new (P || (P = Promise))(function (resolve, reject) {
var npmci_prepare_1 = require("./npmci.prepare"); function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
var npmci_bash_1 = require("./npmci.bash"); function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
var NpmciBuildDocker = require("./npmci.build.docker"); function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
exports.publish = function (serviceArg) { step((generator = generator.apply(thisArg, _arguments || [])).next());
if (serviceArg === void 0) { serviceArg = "npm"; }
switch (serviceArg) {
case "npm":
return publishNpm();
case "docker":
return publishDocker();
}
};
var publishNpm = function () {
var done = plugins.q.defer();
npmci_prepare_1.prepare("npm")
.then(function () {
npmci_bash_1.bash("npm publish");
plugins.beautylog.ok("Done!");
done.resolve();
}); });
return done.promise;
}; };
var publishDocker = function () { Object.defineProperty(exports, "__esModule", { value: true });
var done = plugins.q.defer(); const plugins = require("./npmci.plugins");
NpmciBuildDocker.readDockerfiles() const npmci_prepare_1 = require("./npmci.prepare");
const npmci_bash_1 = require("./npmci.bash");
const NpmciBuildDocker = require("./npmci.build.docker");
/**
* the main exported publish function.
* @param pubServiceArg references targeted service to publish to
*/
exports.publish = (pubServiceArg = 'npm') => __awaiter(this, void 0, void 0, function* () {
switch (pubServiceArg) {
case 'npm':
return yield publishNpm();
case 'docker':
return yield publishDocker();
}
});
/**
* tries to publish current cwd to NPM registry
*/
let publishNpm = () => __awaiter(this, void 0, void 0, function* () {
yield npmci_prepare_1.prepare('npm')
.then(function () {
return __awaiter(this, void 0, void 0, function* () {
yield npmci_bash_1.bash('npm publish');
plugins.beautylog.ok('Done!');
});
});
});
/**
* tries to pubish current cwd to Docker registry
*/
let publishDocker = () => __awaiter(this, void 0, void 0, function* () {
return yield NpmciBuildDocker.readDockerfiles()
.then(NpmciBuildDocker.pullDockerfileImages) .then(NpmciBuildDocker.pullDockerfileImages)
.then(NpmciBuildDocker.pushDockerfiles) .then(NpmciBuildDocker.pushDockerfiles)
.then(done.resolve); .then(dockerfileArray => {
return done.promise; return dockerfileArray;
}; });
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5wbWNpLnB1Ymxpc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUN4QixJQUFZLE9BQU8sV0FBTSxpQkFBaUIsQ0FBQyxDQUFBO0FBQzNDLDhCQUFzQixpQkFBaUIsQ0FBQyxDQUFBO0FBQ3hDLDJCQUFtQixjQUFjLENBQUMsQ0FBQTtBQUVsQyxJQUFZLGdCQUFnQixXQUFNLHNCQUVsQyxDQUFDLENBRnVEO0FBRTdDLGVBQU8sR0FBRyxVQUFDLFVBQXlCO0lBQXpCLDBCQUF5QixHQUF6QixrQkFBeUI7SUFDM0MsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUEsQ0FBQztRQUNoQixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDeEIsS0FBSyxRQUFRO1lBQ1QsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQy9CLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixJQUFJLFVBQVUsR0FBSTtJQUNkLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsdUJBQU8sQ0FBQyxLQUFLLENBQUM7U0FDVCxJQUFJLENBQUM7UUFDRixpQkFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFFO1FBQy9CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQztJQUNSLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQTtBQUVELElBQUksYUFBYSxHQUFHO0lBQ2hCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsZ0JBQWdCLENBQUMsZUFBZSxFQUFFO1NBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQztTQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDO1NBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQyxDQUFDIiwiZmlsZSI6Im5wbWNpLnB1Ymxpc2guanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJ0eXBpbmdzLWdsb2JhbFwiO1xuaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tIFwiLi9ucG1jaS5wbHVnaW5zXCI7XG5pbXBvcnQge3ByZXBhcmV9IGZyb20gXCIuL25wbWNpLnByZXBhcmVcIjtcbmltcG9ydCB7YmFzaH0gZnJvbSBcIi4vbnBtY2kuYmFzaFwiO1xuaW1wb3J0ICogYXMgTnBtY2lFbnYgZnJvbSBcIi4vbnBtY2kuZW52XCI7XG5pbXBvcnQgKiBhcyBOcG1jaUJ1aWxkRG9ja2VyIGZyb20gXCIuL25wbWNpLmJ1aWxkLmRvY2tlclwiXG5cbmV4cG9ydCBsZXQgcHVibGlzaCA9IChzZXJ2aWNlQXJnOnN0cmluZyA9IFwibnBtXCIpID0+IHtcbiAgICBzd2l0Y2ggKHNlcnZpY2VBcmcpe1xuICAgICAgICBjYXNlIFwibnBtXCI6IFxuICAgICAgICAgICAgcmV0dXJuIHB1Ymxpc2hOcG0oKTtcbiAgICAgICAgY2FzZSBcImRvY2tlclwiOlxuICAgICAgICAgICAgcmV0dXJuIHB1Ymxpc2hEb2NrZXIoKTtcbiAgICB9XG59O1xuXG5sZXQgcHVibGlzaE5wbSAgPSBmdW5jdGlvbigpe1xuICAgIGxldCBkb25lID0gcGx1Z2lucy5xLmRlZmVyKCk7XG4gICAgcHJlcGFyZShcIm5wbVwiKVxuICAgICAgICAudGhlbihmdW5jdGlvbigpe1xuICAgICAgICAgICAgYmFzaChcIm5wbSBwdWJsaXNoXCIpO1xuICAgICAgICAgICAgcGx1Z2lucy5iZWF1dHlsb2cub2soXCJEb25lIVwiKSA7XG4gICAgICAgICAgICBkb25lLnJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICByZXR1cm4gZG9uZS5wcm9taXNlO1xufVxuXG5sZXQgcHVibGlzaERvY2tlciA9IGZ1bmN0aW9uKCl7XG4gICAgbGV0IGRvbmUgPSBwbHVnaW5zLnEuZGVmZXIoKTtcbiAgICAgICAgTnBtY2lCdWlsZERvY2tlci5yZWFkRG9ja2VyZmlsZXMoKVxuICAgICAgICAudGhlbihOcG1jaUJ1aWxkRG9ja2VyLnB1bGxEb2NrZXJmaWxlSW1hZ2VzKVxuICAgICAgICAudGhlbihOcG1jaUJ1aWxkRG9ja2VyLnB1c2hEb2NrZXJmaWxlcylcbiAgICAgICAgLnRoZW4oZG9uZS5yZXNvbHZlKTtcbiAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xufTsiXX0= //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kucHVibGlzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWNpLnB1Ymxpc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLDJDQUEwQztBQUMxQyxtREFBeUM7QUFDekMsNkNBQW1DO0FBRW5DLHlEQUF3RDtBQU94RDs7O0dBR0c7QUFDUSxRQUFBLE9BQU8sR0FBRyxDQUFPLGdCQUE2QixLQUFLO0lBQzVELE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDdEIsS0FBSyxLQUFLO1lBQ1IsTUFBTSxDQUFDLE1BQU0sVUFBVSxFQUFFLENBQUE7UUFDM0IsS0FBSyxRQUFRO1lBQ1gsTUFBTSxDQUFDLE1BQU0sYUFBYSxFQUFFLENBQUE7SUFDaEMsQ0FBQztBQUNILENBQUMsQ0FBQSxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxJQUFJLFVBQVUsR0FBRztJQUNmLE1BQU0sdUJBQU8sQ0FBQyxLQUFLLENBQUM7U0FDakIsSUFBSSxDQUFDOztZQUNKLE1BQU0saUJBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUN6QixPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMvQixDQUFDO0tBQUEsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBLENBQUE7QUFFRDs7R0FFRztBQUNILElBQUksYUFBYSxHQUFHO0lBQ2xCLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixDQUFDLGVBQWUsRUFBRTtTQUM1QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7U0FDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQztTQUN0QyxJQUFJLENBQUMsZUFBZTtRQUNuQixNQUFNLENBQUMsZUFBZSxDQUFBO0lBQ3hCLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBLENBQUEifQ==

4
dist/npmci.servezone.d.ts vendored Normal file
View File

@@ -0,0 +1,4 @@
/**
* the main run function to submit a service to a servezone
*/
export declare let run: (configArg: any) => Promise<void>;

37
dist/npmci.servezone.js vendored Normal file
View File

@@ -0,0 +1,37 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const plugins = require("./npmci.plugins");
/**
* servezoneRegex is the regex that parses the servezone connection data
* parses strings in the form of "servezone.example.com|3000|somepassword"
*/
let servezoneRegex = /^(.*)\|(.*)\|(.*)/;
/**
* holds the results of the parsed servezone env string
*/
let servezoneRegexResultArray = servezoneRegex.exec(process.env.NPMCI_SERVEZONE);
/**
* the data object that is used for the smartsocket client object
*/
let smartsocketClientConstructorOptions = {
alias: 'npmci',
password: servezoneRegexResultArray[3],
port: parseInt(servezoneRegexResultArray[2]),
role: 'ci',
url: servezoneRegexResultArray[1]
};
/**
* the main run function to submit a service to a servezone
*/
exports.run = (configArg) => __awaiter(this, void 0, void 0, function* () {
new plugins.smartsocket.SmartsocketClient(smartsocketClientConstructorOptions);
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuc2VydmV6b25lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtY2kuc2VydmV6b25lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSwyQ0FBMEM7QUFFMUM7OztHQUdHO0FBQ0gsSUFBSSxjQUFjLEdBQUcsbUJBQW1CLENBQUE7QUFFeEM7O0dBRUc7QUFDSCxJQUFJLHlCQUF5QixHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQTtBQUVoRjs7R0FFRztBQUNILElBQUksbUNBQW1DLEdBQUc7SUFDdEMsS0FBSyxFQUFFLE9BQU87SUFDZCxRQUFRLEVBQUUseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLElBQUksRUFBRSxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsSUFBSSxFQUFFLElBQUk7SUFDVixHQUFHLEVBQUUseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0NBQ3BDLENBQUE7QUFFRDs7R0FFRztBQUNRLFFBQUEsR0FBRyxHQUFHLENBQU8sU0FBUztJQUM3QixJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQ3JDLG1DQUFtQyxDQUN0QyxDQUFBO0FBQ0wsQ0FBQyxDQUFBLENBQUEifQ==

4
dist/npmci.ssh.d.ts vendored Normal file
View File

@@ -0,0 +1,4 @@
/**
* checks for ENV vars in form of NPMCI_SSHKEY_* and deploys any found ones
*/
export declare let ssh: () => Promise<void>;

58
dist/npmci.ssh.js vendored Normal file
View File

@@ -0,0 +1,58 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const plugins = require("./npmci.plugins");
let sshRegex = /^(.*)\|(.*)\|(.*)/;
let sshInstance;
/**
* checks for ENV vars in form of NPMCI_SSHKEY_* and deploys any found ones
*/
exports.ssh = () => __awaiter(this, void 0, void 0, function* () {
sshInstance = new plugins.smartssh.SshInstance(); // init ssh instance
plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_SSHKEY_*', evaluateSshEnv);
if (!process.env.NPMTS_TEST) {
sshInstance.writeToDisk();
}
else {
plugins.beautylog.log('In test mode, so not storing SSH keys to disk!');
}
;
});
/**
* gets called for each found SSH ENV Var and deploys it
*/
let evaluateSshEnv = (sshkeyEnvVarArg) => __awaiter(this, void 0, void 0, function* () {
let resultArray = sshRegex.exec(sshkeyEnvVarArg);
let sshKey = new plugins.smartssh.SshKey();
plugins.beautylog.info('Found SSH identity for ' + resultArray[1]);
if (notUndefined(resultArray[1])) {
plugins.beautylog.log('---> host defined!');
sshKey.host = resultArray[1];
}
if (notUndefined(resultArray[2])) {
plugins.beautylog.log('---> privKey defined!');
sshKey.privKeyBase64 = resultArray[2];
}
;
if (notUndefined(resultArray[3])) {
'---> pubKey defined!';
sshKey.pubKeyBase64 = resultArray[3];
}
;
sshInstance.addKey(sshKey);
return;
});
/**
* checks if not undefined
*/
let notUndefined = (stringArg) => {
return (stringArg && stringArg !== 'undefined' && stringArg !== '##');
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuc3NoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtY2kuc3NoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSwyQ0FBMEM7QUFFMUMsSUFBSSxRQUFRLEdBQUcsbUJBQW1CLENBQUE7QUFDbEMsSUFBSSxXQUF5QyxDQUFBO0FBRTdDOztHQUVHO0FBQ1EsUUFBQSxHQUFHLEdBQUc7SUFDZixXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBLENBQUMsb0JBQW9CO0lBQ3JFLE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUNsRixFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUM1QixXQUFXLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDM0IsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ04sT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0RBQWdELENBQUMsQ0FBQTtJQUN6RSxDQUFDO0lBQUEsQ0FBQztBQUNKLENBQUMsQ0FBQSxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxJQUFJLGNBQWMsR0FBRyxDQUFPLGVBQWU7SUFDekMsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUNoRCxJQUFJLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDMUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbEUsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO1FBQzNDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzlCLENBQUM7SUFDRCxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUE7UUFDOUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdkMsQ0FBQztJQUFBLENBQUM7SUFDRixFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLHNCQUFzQixDQUFBO1FBQ3RCLE1BQU0sQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFBQSxDQUFDO0lBRUYsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMxQixNQUFNLENBQUE7QUFDUixDQUFDLENBQUEsQ0FBQTtBQUVEOztHQUVHO0FBQ0gsSUFBSSxZQUFZLEdBQUcsQ0FBQyxTQUFpQjtJQUNuQyxNQUFNLENBQUMsQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUE7QUFDdkUsQ0FBQyxDQUFBIn0=

3
dist/npmci.tag.d.ts vendored
View File

@@ -1,3 +0,0 @@
import "typings-global";
export declare let tag: (commandOptionArg: any) => void;
export declare let retag: () => void;

8
dist/npmci.tag.js vendored
View File

@@ -1,8 +0,0 @@
"use strict";
require("typings-global");
exports.tag = function (commandOptionArg) {
};
exports.retag = function () {
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5wbWNpLnRhZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFBZ0IsQ0FBQyxDQUFBO0FBTWIsV0FBRyxHQUFHLFVBQVMsZ0JBQWdCO0FBRTFDLENBQUMsQ0FBQTtBQUVVLGFBQUssR0FBRztBQUVuQixDQUFDLENBQUMiLCJmaWxlIjoibnBtY2kudGFnLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIjtcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vbnBtY2kucGx1Z2luc1wiO1xuaW1wb3J0IHtwcmVwYXJlfSBmcm9tIFwiLi9ucG1jaS5wcmVwYXJlXCI7XG5pbXBvcnQge2Jhc2h9IGZyb20gXCIuL25wbWNpLmJhc2hcIjtcbmltcG9ydCAqIGFzIGVudiBmcm9tIFwiLi9ucG1jaS5lbnZcIjtcblxuZXhwb3J0IGxldCB0YWcgPSBmdW5jdGlvbihjb21tYW5kT3B0aW9uQXJnKXtcbiAgICBcbn1cblxuZXhwb3J0IGxldCByZXRhZyA9IGZ1bmN0aW9uKCl7XG4gICAgXG59O1xuIl19

View File

@@ -1,2 +1 @@
import "typings-global"; export declare let test: (versionArg: any) => Promise<void>;
export declare let test: (versionArg: any) => any;

View File

@@ -1 +0,0 @@
export declare let testDocker: () => void;

View File

@@ -1,5 +0,0 @@
"use strict";
exports.testDocker = function () {
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5wbWNpLnRlc3QuZG9ja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFLVyxrQkFBVSxHQUFHO0FBRXhCLENBQUMsQ0FBQyIsImZpbGUiOiJucG1jaS50ZXN0LmRvY2tlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vbnBtY2kucGx1Z2luc1wiXG5pbXBvcnQgKiBhcyBOcG1jaUVudiBmcm9tIFwiLi9ucG1jaS5lbnZcIjtcbmltcG9ydCB7YmFzaEJhcmV9IGZyb20gXCIuL25wbWNpLmJhc2hcIjtcbmltcG9ydCAqIGFzIE5wbWNpQnVpbGREb2NrZXIgZnJvbSBcIi4vbnBtY2kuYnVpbGQuZG9ja2VyXCI7XG5cbmV4cG9ydCBsZXQgdGVzdERvY2tlciA9ICgpID0+IHtcblxufTsiXX0=

77
dist/npmci.test.js vendored
View File

@@ -1,48 +1,43 @@
"use strict"; "use strict";
require("typings-global"); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
var plugins = require("./npmci.plugins"); return new (P || (P = Promise))(function (resolve, reject) {
var npmci_bash_1 = require("./npmci.bash"); function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
var npmci_install_1 = require("./npmci.install"); function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
var NpmciBuildDocker = require("./npmci.build.docker"); function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
exports.test = function (versionArg) { step((generator = generator.apply(thisArg, _arguments || [])).next());
var done = plugins.q.defer();
if (versionArg == "docker") {
testDocker()
.then(function () {
done.resolve();
}); });
};
Object.defineProperty(exports, "__esModule", { value: true });
const plugins = require("./npmci.plugins");
const npmci_bash_1 = require("./npmci.bash");
const npmci_install_1 = require("./npmci.install");
const NpmciBuildDocker = require("./npmci.build.docker");
exports.test = (versionArg) => __awaiter(this, void 0, void 0, function* () {
if (versionArg === 'docker') {
yield testDocker();
} }
else { else {
npmci_install_1.install(versionArg) yield npmci_install_1.install(versionArg)
.then(npmDependencies) .then(npmDependencies)
.then(npmTest) .then(npmTest);
.then(function () {
done.resolve();
});
} }
return done.promise; });
}; let npmDependencies = () => __awaiter(this, void 0, void 0, function* () {
var npmDependencies = function () { plugins.beautylog.info('now installing dependencies:');
var done = plugins.q.defer(); if (yield npmci_bash_1.yarnAvailable.promise) {
plugins.beautylog.info("now installing dependencies:"); yield npmci_bash_1.bash('yarn upgrade');
npmci_bash_1.bash("npm install"); }
done.resolve(); else {
return done.promise; yield npmci_bash_1.bash('npm install');
}; }
var npmTest = function () { });
var done = plugins.q.defer(); let npmTest = () => __awaiter(this, void 0, void 0, function* () {
plugins.beautylog.info("now starting tests:"); plugins.beautylog.info('now starting tests:');
npmci_bash_1.bash("npm test"); yield npmci_bash_1.bash('npm test');
done.resolve(); });
return done.promise; let testDocker = () => __awaiter(this, void 0, void 0, function* () {
}; return yield NpmciBuildDocker.readDockerfiles()
var testDocker = function () {
var done = plugins.q.defer();
NpmciBuildDocker.readDockerfiles()
.then(NpmciBuildDocker.pullDockerfileImages) .then(NpmciBuildDocker.pullDockerfileImages)
.then(NpmciBuildDocker.testDockerfiles) .then(NpmciBuildDocker.testDockerfiles);
.then(done.resolve); });
return done.promise; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWNpLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLDJDQUEwQztBQUMxQyw2Q0FBa0Q7QUFDbEQsbURBQXlDO0FBRXpDLHlEQUF3RDtBQUU3QyxRQUFBLElBQUksR0FBRyxDQUFPLFVBQVU7SUFDakMsRUFBRSxDQUFDLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDNUIsTUFBTSxVQUFVLEVBQUUsQ0FBQTtJQUNwQixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDTixNQUFNLHVCQUFPLENBQUMsVUFBVSxDQUFDO2FBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUM7YUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2xCLENBQUM7QUFDSCxDQUFDLENBQUEsQ0FBQTtBQUVELElBQUksZUFBZSxHQUFHO0lBQ3BCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUE7SUFDdEQsRUFBRSxDQUFDLENBQUMsTUFBTSwwQkFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxpQkFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLE1BQU0saUJBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUMzQixDQUFDO0FBQ0gsQ0FBQyxDQUFBLENBQUE7QUFFRCxJQUFJLE9BQU8sR0FBRztJQUNaLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUE7SUFDN0MsTUFBTSxpQkFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBQ3hCLENBQUMsQ0FBQSxDQUFBO0FBRUQsSUFBSSxVQUFVLEdBQUc7SUFDZixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUU7U0FDNUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDO1NBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQTtBQUMzQyxDQUFDLENBQUEsQ0FBQSJ9
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5wbWNpLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUN4QixJQUFZLE9BQU8sV0FBTSxpQkFBaUIsQ0FBQyxDQUFBO0FBQzNDLDJCQUFtQixjQUFjLENBQUMsQ0FBQTtBQUNsQyw4QkFBc0IsaUJBQWlCLENBQUMsQ0FBQTtBQUV4QyxJQUFZLGdCQUFnQixXQUFNLHNCQUFzQixDQUFDLENBQUE7QUFFOUMsWUFBSSxHQUFHLFVBQUMsVUFBVTtJQUN6QixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLEVBQUUsQ0FBQSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsQ0FBQSxDQUFDO1FBQ3ZCLFVBQVUsRUFBRTthQUNQLElBQUksQ0FBQztZQUNGLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLHVCQUFPLENBQUMsVUFBVSxDQUFDO2FBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQzthQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ2IsSUFBSSxDQUFDO1lBQ0YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQTtBQUVELElBQUksZUFBZSxHQUFHO0lBQ2xCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUN2RCxpQkFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQTtBQUVELElBQUksT0FBTyxHQUFHO0lBQ1YsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzlDLGlCQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQyxDQUFBO0FBRUQsSUFBSSxVQUFVLEdBQUc7SUFDYixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLGdCQUFnQixDQUFDLGVBQWUsRUFBRTtTQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7U0FDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQztTQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQSIsImZpbGUiOiJucG1jaS50ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIjtcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vbnBtY2kucGx1Z2luc1wiO1xuaW1wb3J0IHtiYXNofSBmcm9tIFwiLi9ucG1jaS5iYXNoXCI7XG5pbXBvcnQge2luc3RhbGx9IGZyb20gXCIuL25wbWNpLmluc3RhbGxcIjtcbmltcG9ydCAqIGFzIGVudiBmcm9tIFwiLi9ucG1jaS5lbnZcIjtcbmltcG9ydCAqIGFzIE5wbWNpQnVpbGREb2NrZXIgZnJvbSBcIi4vbnBtY2kuYnVpbGQuZG9ja2VyXCI7XG5cbmV4cG9ydCBsZXQgdGVzdCA9ICh2ZXJzaW9uQXJnKSA9PiB7XG4gICAgbGV0IGRvbmUgPSBwbHVnaW5zLnEuZGVmZXIoKTtcbiAgICBpZih2ZXJzaW9uQXJnID09IFwiZG9ja2VyXCIpe1xuICAgICAgICB0ZXN0RG9ja2VyKClcbiAgICAgICAgICAgIC50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgZG9uZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbnN0YWxsKHZlcnNpb25BcmcpXG4gICAgICAgICAgICAudGhlbihucG1EZXBlbmRlbmNpZXMpXG4gICAgICAgICAgICAudGhlbihucG1UZXN0KVxuICAgICAgICAgICAgLnRoZW4oKCk9PntcbiAgICAgICAgICAgICAgICBkb25lLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xufVxuXG5sZXQgbnBtRGVwZW5kZW5jaWVzID0gZnVuY3Rpb24oKXtcbiAgICBsZXQgZG9uZSA9IHBsdWdpbnMucS5kZWZlcigpO1xuICAgIHBsdWdpbnMuYmVhdXR5bG9nLmluZm8oXCJub3cgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXM6XCIpO1xuICAgIGJhc2goXCJucG0gaW5zdGFsbFwiKTtcbiAgICBkb25lLnJlc29sdmUoKTtcbiAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xufVxuXG5sZXQgbnBtVGVzdCA9ICgpID0+IHtcbiAgICBsZXQgZG9uZSA9IHBsdWdpbnMucS5kZWZlcigpO1xuICAgIHBsdWdpbnMuYmVhdXR5bG9nLmluZm8oXCJub3cgc3RhcnRpbmcgdGVzdHM6XCIpO1xuICAgIGJhc2goXCJucG0gdGVzdFwiKTtcbiAgICBkb25lLnJlc29sdmUoKTtcbiAgICByZXR1cm4gZG9uZS5wcm9taXNlO1xufVxuXG5sZXQgdGVzdERvY2tlciA9IGZ1bmN0aW9uKCl7XG4gICAgbGV0IGRvbmUgPSBwbHVnaW5zLnEuZGVmZXIoKTtcbiAgICBOcG1jaUJ1aWxkRG9ja2VyLnJlYWREb2NrZXJmaWxlcygpXG4gICAgICAgIC50aGVuKE5wbWNpQnVpbGREb2NrZXIucHVsbERvY2tlcmZpbGVJbWFnZXMpXG4gICAgICAgIC50aGVuKE5wbWNpQnVpbGREb2NrZXIudGVzdERvY2tlcmZpbGVzKVxuICAgICAgICAudGhlbihkb25lLnJlc29sdmUpXG4gICAgcmV0dXJuIGRvbmUucHJvbWlzZTtcbn1cblxuIl19

View File

@@ -1,2 +1 @@
import "typings-global"; export declare let trigger: () => Promise<void>;
export declare let trigger: () => any;

59
dist/npmci.trigger.js vendored
View File

@@ -1,35 +1,34 @@
"use strict"; "use strict";
require("typings-global"); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
var plugins = require("./npmci.plugins"); return new (P || (P = Promise))(function (resolve, reject) {
//Variables function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
var triggerEnvPrefix = "NPMCI_TRIGGER_"; function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
exports.trigger = function () { function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
var done = plugins.q.defer(); step((generator = generator.apply(thisArg, _arguments || [])).next());
plugins.beautylog.info("now running triggers"); });
var triggerRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|?([a-zA-Z0-9\.\-\/]*)/; };
for (var i = 0; i < 100; i++) { Object.defineProperty(exports, "__esModule", { value: true });
var iteratorString = i.toString(); const plugins = require("./npmci.plugins");
var triggerName = triggerEnvPrefix + iteratorString; let triggerValueRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|?([a-zA-Z0-9\.\-\/]*)/;
if (process.env[triggerName]) { exports.trigger = () => __awaiter(this, void 0, void 0, function* () {
var triggerRegexResultArray = triggerRegex.exec(process.env[triggerName]); plugins.beautylog.info('now running triggers');
var regexDomain = triggerRegexResultArray[1]; plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_TRIGGER_*', evaluateTrigger);
var regexProjectId = triggerRegexResultArray[2]; });
var regexProjectTriggerToken = triggerRegexResultArray[3]; let evaluateTrigger = (triggerEnvVarArg) => __awaiter(this, void 0, void 0, function* () {
var regexRefName = triggerRegexResultArray[4]; let triggerRegexResultArray = triggerValueRegex.exec(triggerEnvVarArg);
var regexTriggerName = void 0; let regexDomain = triggerRegexResultArray[1];
if (triggerRegexResultArray.length == 6) { let regexProjectId = triggerRegexResultArray[2];
let regexProjectTriggerToken = triggerRegexResultArray[3];
let regexRefName = triggerRegexResultArray[4];
let regexTriggerName;
if (triggerRegexResultArray.length === 6) {
regexTriggerName = triggerRegexResultArray[5]; regexTriggerName = triggerRegexResultArray[5];
} }
else { else {
regexTriggerName = "Unnamed Trigger"; regexTriggerName = 'Unnamed Trigger';
} }
plugins.beautylog.info("Found " + triggerName); plugins.beautylog.info('Found Trigger!');
plugins.beautylog.log("triggering build for ref " + regexRefName + " of " + regexTriggerName); plugins.beautylog.log('triggering build for ref ' + regexRefName + ' of ' + regexTriggerName);
plugins.request.post("https://gitlab.com/api/v3/projects/" + regexProjectId + "/trigger/builds", { form: { token: regexProjectTriggerToken, ref: regexRefName } }); plugins.request.post('https://gitlab.com/api/v3/projects/' + regexProjectId + '/trigger/builds', { form: { token: regexProjectTriggerToken, ref: regexRefName } });
} });
} //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kudHJpZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWNpLnRyaWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLDJDQUEwQztBQUkxQyxJQUFJLGlCQUFpQixHQUFHLGdHQUFnRyxDQUFBO0FBRTdHLFFBQUEsT0FBTyxHQUFHO0lBQ25CLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUE7SUFDOUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFBO0FBQ3RGLENBQUMsQ0FBQSxDQUFBO0FBRUQsSUFBSSxlQUFlLEdBQUcsQ0FBTyxnQkFBZ0I7SUFDM0MsSUFBSSx1QkFBdUIsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUN0RSxJQUFJLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM1QyxJQUFJLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvQyxJQUFJLHdCQUF3QixHQUFHLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3pELElBQUksWUFBWSxHQUFHLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdDLElBQUksZ0JBQWdCLENBQUE7SUFDcEIsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsZ0JBQWdCLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ04sZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUE7SUFDdEMsQ0FBQztJQUNELE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDeEMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEdBQUcsWUFBWSxHQUFHLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQzdGLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxHQUFHLGNBQWMsR0FBRyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQ3BLLENBQUMsQ0FBQSxDQUFBIn0=
done.resolve();
return done.promise;
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5wbWNpLnRyaWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUN4QixJQUFZLE9BQU8sV0FBTSxpQkFBaUIsQ0FBQyxDQUFBO0FBSTNDLFdBQVc7QUFDWCxJQUFJLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBRTdCLGVBQU8sR0FBRztJQUNqQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDL0MsSUFBSSxZQUFZLEdBQUcsZ0dBQWdHLENBQUM7SUFDcEgsR0FBRyxDQUFBLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUMsQ0FBQztRQUN6QixJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEMsSUFBSSxXQUFXLEdBQUcsZ0JBQWdCLEdBQUcsY0FBYyxDQUFBO1FBQ25ELEVBQUUsQ0FBQSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQSxDQUFDO1lBQ3pCLElBQUksdUJBQXVCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDMUUsSUFBSSxXQUFXLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0MsSUFBSSxjQUFjLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsSUFBSSx3QkFBd0IsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxJQUFJLGdCQUFnQixTQUFBLENBQUM7WUFDckIsRUFBRSxDQUFBLENBQUMsdUJBQXVCLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUM7Z0JBQ3BDLGdCQUFnQixHQUFHLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDJCQUEyQixHQUFHLFlBQVksR0FBRyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztZQUM5RixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsR0FBRyxjQUFjLEdBQUcsaUJBQWlCLEVBQUUsRUFBQyxJQUFJLEVBQUMsRUFBQyxLQUFLLEVBQUMsd0JBQXdCLEVBQUMsR0FBRyxFQUFDLFlBQVksRUFBQyxFQUFDLENBQUMsQ0FBQztRQUMvSixDQUFDO0lBQ0wsQ0FBQztJQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQSIsImZpbGUiOiJucG1jaS50cmlnZ2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIjtcbmltcG9ydCAqIGFzIHBsdWdpbnMgZnJvbSBcIi4vbnBtY2kucGx1Z2luc1wiO1xuaW1wb3J0IHtwcmVwYXJlfSBmcm9tIFwiLi9ucG1jaS5wcmVwYXJlXCI7XG5pbXBvcnQge2Jhc2h9IGZyb20gXCIuL25wbWNpLmJhc2hcIjtcblxuLy9WYXJpYWJsZXNcbmxldCB0cmlnZ2VyRW52UHJlZml4ID0gXCJOUE1DSV9UUklHR0VSX1wiO1xuXG5leHBvcnQgbGV0IHRyaWdnZXIgPSBmdW5jdGlvbigpe1xuICAgIGxldCBkb25lID0gcGx1Z2lucy5xLmRlZmVyKCk7XG4gICAgcGx1Z2lucy5iZWF1dHlsb2cuaW5mbyhcIm5vdyBydW5uaW5nIHRyaWdnZXJzXCIpO1xuICAgIGxldCB0cmlnZ2VyUmVnZXggPSAvXihbYS16QS1aMC05XFwuXSopXFx8KFthLXpBLVowLTlcXC5dKilcXHwoW2EtekEtWjAtOVxcLl0qKVxcfChbYS16QS1aMC05XFwuXSopXFx8PyhbYS16QS1aMC05XFwuXFwtXFwvXSopLztcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspe1xuICAgICAgICBsZXQgaXRlcmF0b3JTdHJpbmcgPSBpLnRvU3RyaW5nKCk7XG4gICAgICAgIGxldCB0cmlnZ2VyTmFtZSA9IHRyaWdnZXJFbnZQcmVmaXggKyBpdGVyYXRvclN0cmluZ1xuICAgICAgICBpZihwcm9jZXNzLmVudlt0cmlnZ2VyTmFtZV0pe1xuICAgICAgICAgICAgbGV0IHRyaWdnZXJSZWdleFJlc3VsdEFycmF5ID0gdHJpZ2dlclJlZ2V4LmV4ZWMocHJvY2Vzcy5lbnZbdHJpZ2dlck5hbWVdKTtcbiAgICAgICAgICAgIGxldCByZWdleERvbWFpbiA9IHRyaWdnZXJSZWdleFJlc3VsdEFycmF5WzFdO1xuICAgICAgICAgICAgbGV0IHJlZ2V4UHJvamVjdElkID0gdHJpZ2dlclJlZ2V4UmVzdWx0QXJyYXlbMl07XG4gICAgICAgICAgICBsZXQgcmVnZXhQcm9qZWN0VHJpZ2dlclRva2VuID0gdHJpZ2dlclJlZ2V4UmVzdWx0QXJyYXlbM107XG4gICAgICAgICAgICBsZXQgcmVnZXhSZWZOYW1lID0gdHJpZ2dlclJlZ2V4UmVzdWx0QXJyYXlbNF07XG4gICAgICAgICAgICBsZXQgcmVnZXhUcmlnZ2VyTmFtZTtcbiAgICAgICAgICAgIGlmKHRyaWdnZXJSZWdleFJlc3VsdEFycmF5Lmxlbmd0aCA9PSA2KXtcbiAgICAgICAgICAgICAgICByZWdleFRyaWdnZXJOYW1lID0gdHJpZ2dlclJlZ2V4UmVzdWx0QXJyYXlbNV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlZ2V4VHJpZ2dlck5hbWUgPSBcIlVubmFtZWQgVHJpZ2dlclwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGx1Z2lucy5iZWF1dHlsb2cuaW5mbyhcIkZvdW5kIFwiICsgdHJpZ2dlck5hbWUpO1xuICAgICAgICAgICAgcGx1Z2lucy5iZWF1dHlsb2cubG9nKFwidHJpZ2dlcmluZyBidWlsZCBmb3IgcmVmIFwiICsgcmVnZXhSZWZOYW1lICsgXCIgb2YgXCIgKyByZWdleFRyaWdnZXJOYW1lKTtcbiAgICAgICAgICAgIHBsdWdpbnMucmVxdWVzdC5wb3N0KFwiaHR0cHM6Ly9naXRsYWIuY29tL2FwaS92My9wcm9qZWN0cy9cIiArIHJlZ2V4UHJvamVjdElkICsgXCIvdHJpZ2dlci9idWlsZHNcIiwge2Zvcm06e3Rva2VuOnJlZ2V4UHJvamVjdFRyaWdnZXJUb2tlbixyZWY6cmVnZXhSZWZOYW1lfX0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRvbmUucmVzb2x2ZSgpO1xuICAgIHJldHVybiBkb25lLnByb21pc2U7XG59Il19

16
npmextra.json Normal file
View File

@@ -0,0 +1,16 @@
{
"npmts":{
"mode":"default",
"coverageTreshold": "70",
"cli": true
},
"npmci": {
"globalNpmTools": [
"npmts"
]
},
"npmdocker":{
"baseImage":"hosttoday/ht-docker-node:npmts",
"command": "npmci test stable"
}
}

View File

@@ -1,42 +1,56 @@
{ {
"name": "npmci", "name": "npmci",
"version": "2.1.52", "version": "2.3.52",
"description": "", "description": "",
"main": "dist/index.js", "main": "dist/index.js",
"typings": "dist/index.d.ts",
"bin": { "bin": {
"npmci": "dist/index.js" "npmci": "dist/cli.js"
}, },
"scripts": { "scripts": {
"test": "(npmts)" "test": "(npmts) && (npm run testVersion)",
"testVersion": "(cd test/assets/ && node ../../dist/cli.js -v)"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+ssh://git@github.com/pushrocks/npmci.git" "url": "git+ssh://git@gitlab.com/gitzone/npmci.git"
}, },
"author": "Lossless GmbH", "author": "Lossless GmbH",
"license": "MIT", "license": "MIT",
"bugs": { "bugs": {
"url": "https://gitlab.com/pushrocks/npmci/issues" "url": "https://gitlab.com/gitzone/npmci/issues"
}, },
"homepage": "https://gitlab.com/pushrocks/npmci#README", "homepage": "https://gitlab.com/gitzone/npmci#README",
"devDependencies": { "devDependencies": {
"npmts-g": "^5.2.6", "@types/should": "^8.1.30",
"should": "^9.0.1", "npmts-g": "^6.0.0",
"typings-test": "^1.0.1" "should": "^11.2.1",
"typings-test": "^1.0.3"
}, },
"dependencies": { "dependencies": {
"beautylog": "^5.0.8", "@types/lodash": "^4.14.55",
"commander": "^2.9.0", "@types/node": "^7.0.8",
"@types/request": "0.x.x",
"@types/shelljs": "^0.7.0",
"@types/through2": "^2.0.32",
"beautylog": "^6.1.5",
"gulp": "^3.9.1", "gulp": "^3.9.1",
"gulp-function": "^1.3.5", "gulp-function": "^2.2.3",
"projectinfo": "^1.0.3", "lodash": "^4.17.4",
"q": "^1.4.1", "npmextra": "^2.0.3",
"request": "^2.72.0", "projectinfo": "^3.0.2",
"shelljs": "^0.7.0", "request": "^2.81.0",
"smartfile": "^3.0.10", "shelljs": "^0.7.7",
"smartssh": "^1.0.5", "smartcli": "^2.0.1",
"smartstring": "^2.0.6", "smartdelay": "^1.0.1",
"through2": "^2.0.1", "smartfile": "^4.1.7",
"typings-global": "^1.0.3" "smartparam": "^0.1.1",
"smartq": "^1.1.1",
"smartshell": "^1.0.6",
"smartsocket": "^1.1.7",
"smartssh": "^1.2.1",
"smartstring": "^2.0.24",
"through2": "^2.0.3",
"typings-global": "^1.0.14"
} }
} }

3
test/test.d.ts vendored
View File

@@ -1,2 +1 @@
import "typings-test"; import 'typings-test';
import "should";

File diff suppressed because one or more lines are too long

View File

@@ -1,84 +1,100 @@
import "typings-test"; import 'typings-test'
import "should"; import * as should from 'should'
import path = require("path"); import * as path from 'path'
import * as beautylog from "beautylog"
//set up environment // set up environment
process.env.CI_BUILD_REPO = "https://yyyyyy:xxxxxxxx@gitlab.com/mygroup/myrepo.git"; process.env.CI_BUILD_REPO = 'https://yyyyyy:xxxxxxxx@gitlab.com/mygroup/myrepo.git'
process.env.NPMTS_TEST = "true"; process.env.NPMCI_SSHKEY_1 = 'hostString|somePrivKey|##'
process.env.NPMTS_TEST = 'true'
process.cwd = () => { process.cwd = () => {
return path.join(__dirname,"assets/"); return path.join(__dirname,'assets/')
}; }
//require NPMCI files // require NPMCI files
import npmci = require("../dist/index"); import npmci = require('../dist/index')
import NpmciBuildDocker = require("../dist/npmci.build.docker"); import NpmciBuildDocker = require('../dist/npmci.build.docker')
import NpmciPublish = require("../dist/npmci.publish"); import NpmciPublish = require('../dist/npmci.publish')
import NpmciTest = require("../dist/npmci.test"); import NpmciTest = require('../dist/npmci.test')
import NpmciSsh = require('../dist/npmci.ssh')
let dockerfile1:NpmciBuildDocker.Dockerfile; let dockerfile1: NpmciBuildDocker.Dockerfile
let dockerfile2:NpmciBuildDocker.Dockerfile; let dockerfile2: NpmciBuildDocker.Dockerfile
let sortableArray:NpmciBuildDocker.Dockerfile[]; let sortableArray: NpmciBuildDocker.Dockerfile[]
describe("NPMCI",function(){ describe('NPMCI',function(){
describe("build.docker",function(){ describe('build.docker',function(){
it("should return valid Dockerfiles",function(){ it('should return valid Dockerfiles',function(){
dockerfile1 = new NpmciBuildDocker.Dockerfile({filePath:"./Dockerfile",read:true}); dockerfile1 = new NpmciBuildDocker.Dockerfile({filePath: './Dockerfile', read: true})
dockerfile2 = new NpmciBuildDocker.Dockerfile({filePath:"./Dockerfile_sometag1",read:true}); dockerfile2 = new NpmciBuildDocker.Dockerfile({filePath: './Dockerfile_sometag1', read: true})
dockerfile1.version.should.equal("latest"); should(dockerfile1.version).equal('latest')
dockerfile2.version.should.equal("sometag1"); should(dockerfile2.version).equal('sometag1')
}); })
it("should read a directory of Dockerfiles",function(done){
it('should read a directory of Dockerfiles',function(done){
NpmciBuildDocker.readDockerfiles() NpmciBuildDocker.readDockerfiles()
.then(function(readDockerfilesArrayArg:NpmciBuildDocker.Dockerfile[]){ .then(function(readDockerfilesArrayArg: NpmciBuildDocker.Dockerfile[]){
readDockerfilesArrayArg[1].version.should.equal("sometag1"); should(readDockerfilesArrayArg[1].version).equal('sometag1')
sortableArray = readDockerfilesArrayArg sortableArray = readDockerfilesArrayArg
done(); done()
});
}) })
it("should sort an array of Dockerfiles",function(done){ })
it('should sort an array of Dockerfiles',function(done){
NpmciBuildDocker.sortDockerfiles(sortableArray) NpmciBuildDocker.sortDockerfiles(sortableArray)
.then(function(sortedArrayArg:NpmciBuildDocker.Dockerfile[]){ .then(function(sortedArrayArg: NpmciBuildDocker.Dockerfile[]){
beautylog.success("final result"); console.log(sortedArrayArg)
console.log(sortedArrayArg); done()
done();
}) })
}); })
it("should correctly chain Dockerfile handling",function(done){
it('should correctly chain Dockerfile handling', function(done){
NpmciBuildDocker.build() NpmciBuildDocker.build()
.then(()=>{ .then(() => {
done(); done()
});
}) })
}); })
describe(".publish.docker",function(){ })
it("should publish all built Dockerfiles",function(done){
NpmciPublish.publish("docker") describe('.publish.docker',function(){
it('should publish all built Dockerfiles',function(done){
NpmciPublish.publish('docker')
.then(() => { .then(() => {
done(); done()
});; })
}); })
}); })
describe(".test.npm",function(){
it("should source nvm using bash and install a specific node version, then test it",function(done){ describe('.test.npm',function(){
NpmciTest.test("legacy") it('should source nvm using bash and install a specific node version, then test it',function(done){
NpmciTest.test('legacy')
.then(() => { .then(() => {
return NpmciTest.test("lts"); return NpmciTest.test('lts')
}) })
.then(() => { .then(() => {
return NpmciTest.test("stable"); return NpmciTest.test('stable')
}) })
.then(() => { .then(() => {
done(); done()
});
}) })
}); })
describe("test.docker",function(){ })
it("should test dockerfiles",function(done){
NpmciTest.test("docker") describe('test.docker',function(){
it('should test dockerfiles',function(done){
NpmciTest.test('docker')
.then(() => { .then(() => {
done(); done()
}); })
})
})
describe('npmci prepare ssh',function(){
it('should pick up SSH keys',function(done){
NpmciSsh.ssh()
.then(() => {
done()
})
})
}) })
});
}) })

View File

@@ -1,72 +1,78 @@
#!/usr/bin/env node import * as plugins from './npmci.plugins'
import "typings-global"; import * as paths from './npmci.paths'
import * as plugins from "./npmci.plugins"; let npmciInfo = new plugins.projectinfo.ProjectinfoNpm(paths.NpmciPackageRoot)
import * as paths from "./npmci.paths"; plugins.beautylog.log('npmci version: ' + npmciInfo.version)
let npmciInfo = new plugins.projectinfo.ProjectinfoNpm(paths.NpmciPackageRoot);
plugins.beautylog.log("npmci version: " + npmciInfo.version);
import {build} from "./npmci.build" import { build } from './npmci.build'
import {command as command2} from "./npmci.command"; import { clean } from './npmci.clean'
import {install} from "./npmci.install"; import { command } from './npmci.command'
import {publish} from "./npmci.publish"; import { install } from './npmci.install'
import {prepare} from "./npmci.prepare"; import { publish } from './npmci.publish'
import {tag, retag} from "./npmci.tag"; import { prepare } from './npmci.prepare'
import {test} from "./npmci.test"; import { test } from './npmci.test'
import {trigger} from "./npmci.trigger"; import { trigger } from './npmci.trigger'
import * as NpmciEnv from "./npmci.env"; import * as NpmciEnv from './npmci.env'
export {build} from "./npmci.build" export { build } from './npmci.build'
export {install} from "./npmci.install"; export { install } from './npmci.install';
export {publish} from "./npmci.publish"; export { publish } from './npmci.publish';
let command; let smartcli = new plugins.smartcli.Smartcli()
let commandOption:string; smartcli.addVersion(npmciInfo.version)
plugins.commander // build
.arguments('<commandarg> [commandoptionarg]') smartcli.addCommand('build')
.action(function (commandarg, commandoptionarg) { .then((argv) => {
command = commandarg; build(argv._[ 1 ])
commandOption = commandoptionarg; .then(NpmciEnv.configStore)
}); })
plugins.commander.parse(process.argv); // clean
smartcli.addCommand('clean')
.then((argv) => {
clean()
.then(NpmciEnv.configStore)
})
if (typeof command === 'undefined') { // command
console.error('no command given!'); smartcli.addCommand('command')
process.exit(1); .then((argv) => {
}
switch (command){
case "build":
build(commandOption)
.then(NpmciEnv.configStore);
break;
case "command":
command() command()
.then(NpmciEnv.configStore); .then(NpmciEnv.configStore)
break; })
case "install":
install(commandOption)
.then(NpmciEnv.configStore);;
break;
case "prepare":
prepare(commandOption)
.then(NpmciEnv.configStore);;
break;
case "publish":
publish(commandOption)
.then(NpmciEnv.configStore);;
break;
case "test":
test(commandOption)
.then(NpmciEnv.configStore);
break;
case "trigger":
trigger();
break;
default:
plugins.beautylog.error("command " + commandOption.blue + " not recognised");
process.exit(1);
break;
}
// install
smartcli.addCommand('install')
.then((argv) => {
install(argv._[ 1 ])
.then(NpmciEnv.configStore)
})
// prepare
smartcli.addCommand('prepare')
.then((argv) => {
prepare(argv._[ 1 ])
.then(NpmciEnv.configStore)
})
// publish
smartcli.addCommand('publish')
.then((argv) => {
publish(argv._[ 1 ])
.then(NpmciEnv.configStore)
})
// test
smartcli.addCommand('test')
.then((argv) => {
test(argv._[ 1 ])
.then(NpmciEnv.configStore)
})
// trigger
smartcli.addCommand('trigger')
.then((argv) => {
trigger()
})
smartcli.startParse()

View File

@@ -1,38 +1,111 @@
import "typings-global"; import * as plugins from './npmci.plugins'
import * as plugins from "./npmci.plugins"; import * as paths from './npmci.paths'
export let bash = (commandArg:string,retryArg = 2,bareArg = false) => { import * as smartq from 'smartq'
let exitCode:number;
let stdOut:string; /**
let execResult; * wether nvm is available or not
if(!process.env.NPMTS_TEST){ */
for (let i = 0; i <= retryArg; i++){ export let nvmAvailable = smartq.defer<boolean>()
if(!bareArg){ export let yarnAvailable = smartq.defer<boolean>()
execResult = plugins.shelljs.exec( /**
"bash -c \"source /usr/local/nvm/nvm.sh &&" + * the smartshell instance for npmci
commandArg + */
"\"" let npmciSmartshell = new plugins.smartshell.Smartshell({
); executor: 'bash',
sourceFilePaths: []
})
/**
* check for tools.
*/
let checkToolsAvailable = async () => {
// check for nvm
if (
(await plugins.smartshell.execSilent(`bash -c "source /usr/local/nvm/nvm.sh"`)).exitCode === 0
) {
npmciSmartshell.addSourceFiles([`/usr/local/nvm/nvm.sh`])
nvmAvailable.resolve(true)
} else if (
(await plugins.smartshell.execSilent(`bash -c "source ~/.nvm/nvm.sh"`)).exitCode === 0
) {
npmciSmartshell.addSourceFiles([`~/.nvm/nvm.sh`])
nvmAvailable.resolve(true)
} else { } else {
execResult = plugins.shelljs.exec(commandArg); nvmAvailable.resolve(false)
};
// check for yarn
await plugins.smartshell.which('yarn').then(
() => {
plugins.smartshell.exec(`yarn config set cache-folder ${plugins.path.join(paths.cwd,'.yarn')}`)
yarnAvailable.resolve(true)
},
() => { yarnAvailable.resolve(false) }
)
}
checkToolsAvailable()
/**
* bash() allows using bash with nvm in path
* @param commandArg - The command to execute
* @param retryArg - The retryArg: 0 to any positive number will retry, -1 will always succeed, -2 will return undefined
*/
export let bash = async (commandArg: string, retryArg: number = 2, bareArg: boolean = false): Promise<string> => {
await nvmAvailable.promise // make sure nvm check has run
let execResult: plugins.smartshell.IExecResult
// determine if we fail
let failOnError: boolean = true
if (retryArg === -1) {
failOnError = false
retryArg = 0
} }
exitCode = execResult.code;
stdOut = execResult.stdout; if (!process.env.NPMTS_TEST) { // NPMTS_TEST is used during testing
if(exitCode !== 0 && i == retryArg){ for (let i = 0; i <= retryArg; i++) {
process.exit(1); if (!bareArg) {
} else if(exitCode == 0){ execResult = await npmciSmartshell.exec(commandArg)
i = retryArg + 1; // if everything works out ok retrials are not wanted
} else { } else {
plugins.beautylog.warn("Something went wrong! Exit Code: " + exitCode.toString()); execResult = await plugins.smartshell.exec(commandArg)
plugins.beautylog.info("Retry " + (i + 1).toString() + " of " + retryArg.toString()); }
// determine how bash reacts to error and success
if (execResult.exitCode !== 0 && i === retryArg) { // something went wrong and retries are exhausted
if (failOnError) {
plugins.beautylog.error('something went wrong and retries are exhausted')
process.exit(1)
}
} else if (execResult.exitCode === 0) { // everything went fine, or no error wanted
i = retryArg + 1 // retry +1 breaks for loop, if everything works out ok retrials are not wanted
} else {
plugins.beautylog.warn('Something went wrong! Exit Code: ' + execResult.exitCode.toString())
plugins.beautylog.info('Retry ' + (i + 1).toString() + ' of ' + retryArg.toString())
} }
} }
} else { } else {
plugins.beautylog.log("ShellExec would be: " + commandArg.blue) plugins.beautylog.log('ShellExec would be: ' + commandArg)
await plugins.smartdelay.delayFor(100)
execResult = {
exitCode: 0,
stdout: 'testOutput'
} }
return stdOut; }
return execResult.stdout
} }
export let bashBare = (commandArg,retryArg = 2) => { /**
return bash(commandArg,retryArg,true); * bashBare allows usage of bash without sourcing any files like nvm
*/
export let bashBare = async (commandArg: string, retryArg: number = 2): Promise<string> => {
return await bash(commandArg, retryArg, true)
}
/**
* bashNoError allows executing stuff without throwing an error
*/
export let bashNoError = async (commandArg: string): Promise<string> => {
return await bash(commandArg, -1)
} }

View File

@@ -1,229 +1,275 @@
import * as plugins from "./npmci.plugins"; import * as plugins from './npmci.plugins'
import * as paths from "./npmci.paths"; import * as paths from './npmci.paths'
import * as NpmciEnv from "./npmci.env"; import * as NpmciEnv from './npmci.env'
import {bashBare} from "./npmci.bash"; import { bashBare } from './npmci.bash'
export let build = function(){ /**
let done = plugins.q.defer(); * builds a cwd of Dockerfiles by triggering a promisechain
readDockerfiles() */
export let build = async () => {
await readDockerfiles()
.then(sortDockerfiles) .then(sortDockerfiles)
.then(mapDockerfiles) .then(mapDockerfiles)
.then(buildDockerfiles) .then(buildDockerfiles)
.then(pushDockerfiles) .then(pushDockerfiles)
.then(() => {
done.resolve();
});
return done.promise;
} }
export let readDockerfiles = function(){ /**
let done = plugins.q.defer(); * creates instance of class Dockerfile for all Dockerfiles in cwd
let readDockerfilesArray:Dockerfile[] = [] * @returns Promise<Dockerfile[]>
plugins.gulp.src("./Dockerfile*") */
.pipe(plugins.through2.obj(function(file,enc,cb){ export let readDockerfiles = async (): Promise<Dockerfile[]> => {
let fileTree = await plugins.smartfile.fs.listFileTree(paths.cwd, './Dockerfile*')
// create the Dockerfile array
let readDockerfilesArray: Dockerfile[] = []
for (let dockerfilePath of fileTree) {
let myDockerfile = new Dockerfile({ let myDockerfile = new Dockerfile({
filePath:file.path, filePath: dockerfilePath,
read:true read: true
});
readDockerfilesArray.push(myDockerfile);
cb(null,file);
},function(){
done.resolve(readDockerfilesArray);
}));
return done.promise;
}
export let sortDockerfiles = function(sortableArrayArg:Dockerfile[]){
let done = plugins.q.defer();
let sortedArray:Dockerfile[] = [];
let cleanTagsOriginal = cleanTagsArrayFunction(sortableArrayArg,sortedArray);
let sorterFunctionCounter:number = 0;
let sorterFunction = function(){
sortableArrayArg.forEach((dockerfileArg)=>{
let cleanTags = cleanTagsArrayFunction(sortableArrayArg,sortedArray);
if(cleanTags.indexOf(dockerfileArg.baseImage) == -1 && sortedArray.indexOf(dockerfileArg) == -1){
sortedArray.push(dockerfileArg);
};
if(cleanTagsOriginal.indexOf(dockerfileArg.baseImage) != -1){
dockerfileArg.localBaseImageDependent = true;
};
});
if(sortableArrayArg.length == sortedArray.length){
done.resolve(sortedArray);
} else if (sorterFunctionCounter < 10) {
sorterFunctionCounter++;
sorterFunction();
};
}
sorterFunction();
return done.promise;
};
export let mapDockerfiles = function(sortedArray:Dockerfile[]){
let done = plugins.q.defer();
sortedArray.forEach((dockerfileArg) => {
if(dockerfileArg.localBaseImageDependent){
sortedArray.forEach((dockfile2:Dockerfile) => {
if(dockfile2.cleanTag == dockerfileArg.baseImage){
dockerfileArg.localBaseDockerfile = dockfile2;
}
}) })
}; readDockerfilesArray.push(myDockerfile)
}); }
done.resolve(sortedArray);
return done.promise; return readDockerfilesArray
} }
export let buildDockerfiles = (sortedArrayArg:Dockerfile[]) => { /**
let done = plugins.q.defer(); * sorts Dockerfiles into a dependency chain
sortedArrayArg.forEach(function(dockerfileArg){ * @param sortableArrayArg an array of instances of class Dockerfile
dockerfileArg.build(); * @returns Promise<Dockerfile[]>
}) */
done.resolve(sortedArrayArg); export let sortDockerfiles = (sortableArrayArg: Dockerfile[]): Promise<Dockerfile[]> => {
return done.promise; let done = plugins.q.defer<Dockerfile[]>()
} let sortedArray: Dockerfile[] = []
let cleanTagsOriginal = cleanTagsArrayFunction(sortableArrayArg, sortedArray)
export let pushDockerfiles = function(sortedArrayArg:Dockerfile[]){ let sorterFunctionCounter: number = 0
let done = plugins.q.defer(); let sorterFunction = function () {
sortedArrayArg.forEach(function(dockerfileArg){
dockerfileArg.push(NpmciEnv.buildStage);
});
done.resolve(sortedArrayArg);
return done.promise;
}
export let pullDockerfileImages = (sortableArrayArg:Dockerfile[],registryArg = "registry.gitlab.com") => {
let done = plugins.q.defer();
sortableArrayArg.forEach((dockerfileArg) => { sortableArrayArg.forEach((dockerfileArg) => {
dockerfileArg.pull(registryArg); let cleanTags = cleanTagsArrayFunction(sortableArrayArg, sortedArray)
}); if (cleanTags.indexOf(dockerfileArg.baseImage) === -1 && sortedArray.indexOf(dockerfileArg) === -1) {
done.resolve(sortableArrayArg); sortedArray.push(dockerfileArg)
return done.promise; };
if (cleanTagsOriginal.indexOf(dockerfileArg.baseImage) !== -1) {
dockerfileArg.localBaseImageDependent = true
};
})
if (sortableArrayArg.length === sortedArray.length) {
done.resolve(sortedArray)
} else if (sorterFunctionCounter < 10) {
sorterFunctionCounter++
sorterFunction()
};
}
sorterFunction()
return done.promise
} }
export let testDockerfiles = (sortedArrayArg:Dockerfile[]) => { /**
let done = plugins.q.defer(); * maps local Dockerfiles dependencies to the correspoding Dockerfile class instances
sortedArrayArg.forEach(function(dockerfileArg){ */
dockerfileArg.test(); export let mapDockerfiles = async (sortedArray: Dockerfile[]): Promise<Dockerfile[]> => {
}); sortedArray.forEach((dockerfileArg) => {
done.resolve(sortedArrayArg); if (dockerfileArg.localBaseImageDependent) {
return done.promise; sortedArray.forEach((dockfile2: Dockerfile) => {
}; if (dockfile2.cleanTag === dockerfileArg.baseImage) {
dockerfileArg.localBaseDockerfile = dockfile2
}
})
};
})
return sortedArray
}
/**
* builds the correspoding real docker image for each Dockerfile class instance
*/
export let buildDockerfiles = async (sortedArrayArg: Dockerfile[]) => {
for (let dockerfileArg of sortedArrayArg) {
await dockerfileArg.build()
}
return sortedArrayArg
}
/**
* pushes the real Dockerfile images to a Docker registry
*/
export let pushDockerfiles = async (sortedArrayArg: Dockerfile[]) => {
for (let dockerfileArg of sortedArrayArg) {
await dockerfileArg.push(NpmciEnv.buildStage)
}
return sortedArrayArg
}
/**
* pulls corresponding real Docker images for instances of Dockerfile from a registry.
* This is needed if building, testing, and publishing of Docker images is carried out in seperate CI stages.
*/
export let pullDockerfileImages = async (sortableArrayArg: Dockerfile[], registryArg = 'registry.gitlab.com') => {
for (let dockerfileArg of sortableArrayArg) {
await dockerfileArg.pull(registryArg)
}
return sortableArrayArg
}
/**
* tests all Dockerfiles in by calling class Dockerfile.test();
* @param sortedArrayArg Dockerfile[] that contains all Dockerfiles in cwd
*/
export let testDockerfiles = async (sortedArrayArg: Dockerfile[]) => {
for (let dockerfileArg of sortedArrayArg) {
await dockerfileArg.test()
}
return sortedArrayArg
}
/**
* class Dockerfile represents a Dockerfile on disk in npmci
*/
export class Dockerfile { export class Dockerfile {
filePath:string; filePath: string
repo:string; repo: string
version:string; version: string
cleanTag:string; cleanTag: string
buildTag:string; buildTag: string
testTag:string; testTag: string
releaseTag:string; releaseTag: string
containerName:string containerName: string
content:string; content: string
baseImage:string; baseImage: string
localBaseImageDependent:boolean; localBaseImageDependent: boolean
localBaseDockerfile:Dockerfile; localBaseDockerfile: Dockerfile
constructor(options:{filePath?:string,fileContents?:string|Buffer,read?:boolean}){ constructor(options: { filePath?: string, fileContents?: string | Buffer, read?: boolean }) {
this.filePath = options.filePath; this.filePath = options.filePath
this.repo = NpmciEnv.repo.user + "/" + NpmciEnv.repo.repo; this.repo = NpmciEnv.repo.user + '/' + NpmciEnv.repo.repo
this.version = dockerFileVersion(plugins.path.parse(options.filePath).base); this.version = dockerFileVersion(plugins.path.parse(options.filePath).base)
this.cleanTag = this.repo + ":" + this.version; this.cleanTag = this.repo + ':' + this.version
this.buildTag = this.cleanTag; this.buildTag = this.cleanTag
this.testTag = dockerTag("registry.gitlab.com",this.repo,this.version,"test"); this.testTag = dockerTag('registry.gitlab.com', this.repo, this.version, 'test')
this.releaseTag = dockerTag(NpmciEnv.dockerRegistry,this.repo,this.version); this.releaseTag = dockerTag(NpmciEnv.dockerRegistry, this.repo, this.version)
this.containerName = "dockerfile-" + this.version; this.containerName = 'dockerfile-' + this.version
if(options.filePath && options.read){ if (options.filePath && options.read) {
this.content = plugins.smartfile.local.toStringSync(plugins.path.resolve(options.filePath)); this.content = plugins.smartfile.fs.toStringSync(plugins.path.resolve(options.filePath))
}; };
this.baseImage = dockerBaseImage(this.content); this.baseImage = dockerBaseImage(this.content)
this.localBaseImageDependent = false; this.localBaseImageDependent = false
}; };
build(){
let done = plugins.q.defer(); /**
plugins.beautylog.info("now building Dockerfile for " + this.cleanTag); * builds the Dockerfile
bashBare("docker build -t " + this.buildTag + " -f " + this.filePath + " ."); */
NpmciEnv.dockerFilesBuilt.push(this); async build() {
done.resolve(); plugins.beautylog.info('now building Dockerfile for ' + this.cleanTag)
return done.promise; await bashBare('docker build -t ' + this.buildTag + ' -f ' + this.filePath + ' .')
NpmciEnv.dockerFilesBuilt.push(this)
return
}; };
push(stageArg){
let done = plugins.q.defer(); /**
let pushTag; * pushes the Dockerfile to a registry
switch (stageArg){ */
case "release": async push(stageArg) {
pushTag = this.releaseTag; let pushTag
break; switch (stageArg) {
case "test": case 'release':
pushTag = this.releaseTag
break
case 'test':
default: default:
pushTag = this.testTag; pushTag = this.testTag
break; break
} }
bashBare("docker tag " + this.buildTag + " " + pushTag); await bashBare('docker tag ' + this.buildTag + ' ' + pushTag)
bashBare("docker push " + pushTag); await bashBare('docker push ' + pushTag)
done.resolve();
return done.promise;
}
pull(registryArg:string){
let pullTag = this.testTag;
bashBare("docker pull " + pullTag);
bashBare("docker tag " + pullTag + " " + this.buildTag);
}; };
test(){
let testFile:string = plugins.path.join(paths.NpmciTestDir,"test_" + this.version + ".sh"); /**
let testFileExists:boolean = plugins.smartfile.checks.fileExistsSync(testFile); * pulls the Dockerfile from a registry
if(testFileExists){ */
bashBare("docker run --name npmci_test_container " + this.buildTag + " mkdir /npmci_test"); async pull(registryArg: string) {
bashBare("docker cp " + testFile + " npmci_test_container:/npmci_test/test.sh"); let pullTag = this.testTag
bashBare("docker commit npmci_test_container npmci_test_image"); await bashBare('docker pull ' + pullTag)
bashBare("docker run npmci_test_image sh /npmci_test/test.sh"); await bashBare('docker tag ' + pullTag + ' ' + this.buildTag)
bashBare("docker rm npmci_test_container"); };
bashBare("docker rmi --force npmci_test_image");
/**
* tests the Dockerfile;
*/
async test() {
let testFile: string = plugins.path.join(paths.NpmciTestDir, 'test_' + this.version + '.sh')
let testFileExists: boolean = plugins.smartfile.fs.fileExistsSync(testFile)
if (testFileExists) {
// run tests
await bashBare('docker run --name npmci_test_container ' + this.buildTag + ' mkdir /npmci_test')
await bashBare('docker cp ' + testFile + ' npmci_test_container:/npmci_test/test.sh')
await bashBare('docker commit npmci_test_container npmci_test_image')
await bashBare('docker run npmci_test_image sh /npmci_test/test.sh')
await bashBare('docker rm npmci_test_container')
await bashBare('docker rmi --force npmci_test_image')
} else { } else {
plugins.beautylog.warn("skipping tests for " + this.cleanTag + " because no testfile was found!"); plugins.beautylog.warn('skipping tests for ' + this.cleanTag + ' because no testfile was found!')
} }
}; };
getId(){
let containerId = bashBare("docker inspect --type=image --format=\"{{.Id}}\" " + this.buildTag); /**
return containerId; * gets the id of a Dockerfile
*/
async getId() {
let containerId = await bashBare('docker inspect --type=image --format=\"{{.Id}}\" ' + this.buildTag)
return containerId
}; };
} }
export let dockerFileVersion = function(dockerfileNameArg:string):string{ /**
let versionString:string; * returns a version for a docker file
let versionRegex = /Dockerfile_([a-zA-Z0-9\.]*)$/; * @execution SYNC
let regexResultArray = versionRegex.exec(dockerfileNameArg); */
if(regexResultArray && regexResultArray.length == 2){ export let dockerFileVersion = (dockerfileNameArg: string): string => {
versionString = regexResultArray[1]; let versionString: string
let versionRegex = /Dockerfile_([a-zA-Z0-9\.]*)$/
let regexResultArray = versionRegex.exec(dockerfileNameArg)
if (regexResultArray && regexResultArray.length === 2) {
versionString = regexResultArray[1]
} else { } else {
versionString = "latest"; versionString = 'latest'
} }
return versionString; return versionString
} }
export let dockerBaseImage = function(dockerfileContentArg:string){ /**
*
*/
export let dockerBaseImage = function (dockerfileContentArg: string) {
let baseImageRegex = /FROM\s([a-zA-z0-9\/\-\:]*)\n?/ let baseImageRegex = /FROM\s([a-zA-z0-9\/\-\:]*)\n?/
let regexResultArray = baseImageRegex.exec(dockerfileContentArg) let regexResultArray = baseImageRegex.exec(dockerfileContentArg)
return regexResultArray[1]; return regexResultArray[1]
} }
export let dockerTag = function(registryArg:string,repoArg:string,versionArg:string,suffixArg?:string):string{ /**
let tagString:string; *
let registry = registryArg; */
let repo = repoArg; export let dockerTag = function (registryArg: string, repoArg: string, versionArg: string, suffixArg?: string): string {
let version = versionArg; let tagString: string
if(suffixArg){ let registry = registryArg
version = versionArg + "_" + suffixArg; let repo = repoArg
let version = versionArg
if (suffixArg) {
version = versionArg + '_' + suffixArg
}; };
tagString = registry + "/" + repo + ":" + version; tagString = registry + '/' + repo + ':' + version
return tagString; return tagString
}; }
export let cleanTagsArrayFunction = function(dockerfileArrayArg:Dockerfile[],trackingArrayArg:Dockerfile[]):string[]{ /**
let cleanTagsArray:string[] = []; *
dockerfileArrayArg.forEach(function(dockerfileArg){ */
if(trackingArrayArg.indexOf(dockerfileArg) == -1){ export let cleanTagsArrayFunction = function (dockerfileArrayArg: Dockerfile[], trackingArrayArg: Dockerfile[]): string[] {
cleanTagsArray.push(dockerfileArg.cleanTag); let cleanTagsArray: string[] = []
} dockerfileArrayArg.forEach(function (dockerfileArg) {
}); if (trackingArrayArg.indexOf(dockerfileArg) === -1) {
return cleanTagsArray; cleanTagsArray.push(dockerfileArg.cleanTag)
}
})
return cleanTagsArray
} }

View File

@@ -1,17 +1,23 @@
import "typings-global"; import * as plugins from './npmci.plugins'
import * as plugins from "./npmci.plugins"; import { bash } from './npmci.bash'
import {bash} from "./npmci.bash"; import * as env from './npmci.env'
import * as env from "./npmci.env"; import * as buildDocker from './npmci.build.docker'
import * as buildDocker from "./npmci.build.docker"
export let build = function(commandArg){ /**
switch(commandArg){ * defines possible build services
case "docker": */
return buildDocker.build(); export type TBuildService = 'docker'
/**
* builds for a specific service
*/
export let build = async (commandArg): Promise<void> => {
switch (commandArg) {
case 'docker':
await buildDocker.build()
break
default: default:
plugins.beautylog.log("build target " + commandArg + " not recognised!"); plugins.beautylog.log('build target ' + commandArg + ' not recognised!')
} };
return
} }

10
ts/npmci.clean.ts Normal file
View File

@@ -0,0 +1,10 @@
import * as plugins from './npmci.plugins'
import * as paths from './npmci.paths'
/**
* cleans npmci config files
*/
export let clean = async (): Promise<void> => {
plugins.smartfile.fs.removeSync(paths.NpmciPackageConfig)
return
}

View File

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

17
ts/npmci.config.ts Normal file
View File

@@ -0,0 +1,17 @@
import * as q from 'q'
import * as plugins from './npmci.plugins'
import * as paths from './npmci.paths'
export interface INpmciOptions {
globalNpmTools: string[]
}
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)
return npmciConfig
}

View File

@@ -1,46 +1,57 @@
import "typings-global"; import * as plugins from './npmci.plugins'
import * as plugins from "./npmci.plugins"; import * as paths from './npmci.paths'
import * as paths from "./npmci.paths"; import { GitRepo } from 'smartstring'
import {GitRepo} from "smartstring"; import { Dockerfile } from './npmci.build.docker'
import {Dockerfile} from "./npmci.build.docker"
export let repo:GitRepo; export let repo: GitRepo
if(process.env.CI_BUILD_REPO) repo = new GitRepo(process.env.CI_BUILD_REPO); if (process.env.CI_BUILD_REPO) repo = new GitRepo(process.env.CI_BUILD_REPO)
export let buildStage:string = process.env.CI_BUILD_STAGE; export let buildStage: string = process.env.CI_BUILD_STAGE
// handling config between commands // handling config between commands
export let dockerRegistry; // will be set by npmci.prepare export let dockerRegistry: string // will be set by npmci.prepare
export let dockerFilesBuilt:Dockerfile[] = []; export let setDockerRegistry = (dockerRegistryArg: string) => {
export let dockerFiles:Dockerfile[] = []; dockerRegistry = dockerRegistryArg
}
export let dockerFilesBuilt: Dockerfile[] = []
export let dockerFiles: Dockerfile[] = []
export let config = {
dockerRegistry: undefined, // this will be set later on store
dockerFilesBuilt: dockerFilesBuilt,
dockerFiles: dockerFiles,
project: undefined
}
export let configStore = () => { export let configStore = () => {
let config = { config.dockerRegistry = dockerRegistry
dockerRegistry: dockerRegistry,
dockerFilesBuilt: dockerFilesBuilt,
dockerFiles: dockerFiles
}
plugins.smartfile.memory.toFsSync( plugins.smartfile.memory.toFsSync(
JSON.stringify(config), JSON.stringify(config),
{ paths.NpmciPackageConfig
fileName:"config.json", )
filePath:paths.NpmciPackageRoot
}
);
} }
export let configLoad = () => { let configLoad = () => {
let config; // internal config to transfer information in between npmci shell calls
try { try {
config = plugins.smartfile.local.toObjectSync(paths.NpmciPackageConfig,"json"); plugins.lodash.assign(config, plugins.smartfile.fs.toObjectSync(paths.NpmciPackageConfig, 'json'))
} } catch (err) {
catch(err){ configStore()
config = {}; plugins.beautylog.log('config initialized!')
configStore();
plugins.beautylog.log("config initialized!");
} }
config.dockerRegistry ? dockerRegistry = config.dockerRegistry : void(0); // project config
config.dockerFilesBuilt ? dockerFilesBuilt = config.dockerFilesBuilt : void(0); try {
if (!config.project) {
config.project = plugins.smartfile.fs.toObjectSync(paths.NpmciProjectDir, 'npmci.json')
plugins.beautylog.ok('project config found!')
};
}
catch (err) {
config.project = {}
plugins.beautylog.log('no project config found, so proceeding with default behaviour!')
}
config.dockerRegistry ? dockerRegistry = config.dockerRegistry : void (0)
config.dockerFilesBuilt ? dockerFilesBuilt = config.dockerFilesBuilt : void (0)
} }
configLoad(); configLoad()

View File

@@ -1,25 +1,54 @@
import "typings-global"; import * as plugins from './npmci.plugins'
import * as plugins from "./npmci.plugins"; import * as configModule from './npmci.config'
import {bash} from "./npmci.bash"; import {
bash,
bashNoError,
nvmAvailable,
yarnAvailable } from './npmci.bash'
export let install = (versionArg) => { /**
let done = plugins.q.defer(); * Install a specific version of node
plugins.beautylog.log("now installing " + "node ".green + ("version " + versionArg).yellow); * @param versionArg
let version:string; */
if(versionArg == "lts"){ export let install = async (versionArg) => {
version = "4"; plugins.beautylog.log(`now installing node version ${versionArg}`)
} else if(versionArg == "legacy"){ let version: string
version = "4.0.0" if (versionArg === 'stable') {
version = 'stable'
} else if (versionArg === 'lts') {
version = '6'
} else if (versionArg === 'legacy') {
version = '6'
} else { } else {
version = versionArg; version = versionArg
}; };
bash( if (await nvmAvailable.promise) {
"nvm install " + version + await bash(`nvm install ${version} && nvm alias default ${version}`)
" && nvm alias default " + version plugins.beautylog.success(`Node version ${version} successfully installed!`)
); } else {
plugins.beautylog.success("Node version " + version + " successfully installed!"); plugins.beautylog.warn('Nvm not in path so staying at installed node version!')
bash("node -v"); };
bash("npm -v"); await bash('node -v')
done.resolve(); await bash('npm -v')
return done.promise; // lets look for further config
await configModule.getConfig()
.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: 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`)
if (await yarnAvailable.promise) {
await bash(`yarn global add ${npmTool}`)
} else {
await bash(`npm install ${npmTool} -q -g`)
}
}
}
plugins.beautylog.success('all global npm tools specified in npmextra.json are now available!')
})
} }

View File

@@ -1,9 +1,8 @@
import "typings-global"; import * as plugins from './npmci.plugins'
import * as plugins from "./npmci.plugins";
export let cwd = process.cwd(); export let cwd = process.cwd()
export let NpmciPackageRoot = plugins.path.join(__dirname,"../"); export let NpmciPackageRoot = plugins.path.join(__dirname,'../')
export let NpmciPackageConfig = plugins.path.join(NpmciPackageRoot,"./config.json"); export let NpmciPackageConfig = plugins.path.join(NpmciPackageRoot,'./config.json')
export let NpmciProjectDir = cwd; export let NpmciProjectDir = cwd
export let NpmciTestDir = plugins.path.join(cwd,"./test"); export let NpmciTestDir = plugins.path.join(cwd,'./test')

View File

@@ -1,14 +1,20 @@
import "typings-global"; export import beautylog = require('beautylog')
export import beautylog = require("beautylog"); export let gulp = require('gulp')
export let commander = require("commander"); export import gulpFunction = require('gulp-function')
export let gulp = require("gulp"); export import lodash = require('lodash')
export let gulpFunction = require("gulp-function"); export import npmextra = require('npmextra')
export import path = require("path"); export import path = require('path')
export import projectinfo = require("projectinfo"); export import projectinfo = require('projectinfo')
export let q = require("q"); export import q = require('smartq')
export let request = require("request"); export let request = require('request')
export let shelljs = require("shelljs"); export import smartcli = require('smartcli')
export import smartssh = require("smartssh"); export import smartdelay = require('smartdelay')
export import smartstring = require("smartstring"); export import smartfile = require('smartfile')
export import smartfile = require("smartfile"); export import shelljs = require('shelljs')
export let through2 = require("through2"); export import smartparam = require('smartparam')
export import smartq = require('smartq')
export import smartshell = require('smartshell')
export import smartsocket = require('smartsocket')
export import smartssh = require('smartssh')
export import smartstring = require('smartstring')
export import through2 = require('through2')

View File

@@ -1,60 +1,82 @@
import "typings-global"; import * as plugins from './npmci.plugins'
import * as plugins from "./npmci.plugins"; import { bash } from './npmci.bash'
import {bash} from "./npmci.bash"; import * as env from './npmci.env'
import * as env from "./npmci.env" import * as sshModule from './npmci.ssh'
let npm = function(){
let done = plugins.q.defer();
let npmrcPrefix:string = "//registry.npmjs.org/:_authToken="; // types
let npmToken:string = process.env.NPMCI_TOKEN_NPM;
let npmrcFileString = npmrcPrefix + npmToken;
if(npmToken){ /**
plugins.beautylog.info("found access token"); * defines possible prepare services
*/
export type TPrepService = 'npm' | 'docker' | 'docker-gitlab' | 'ssh'
/**
* authenticates npm with token from env var
*/
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 { } else {
plugins.beautylog.error("no access token found! Exiting!"); plugins.beautylog.error('no access token found! Exiting!')
process.exit(1); process.exit(1)
} }
plugins.smartfile.memory.toFsSync(npmrcFileString,{fileName:".npmrc",filePath:"/root"}); plugins.smartfile.memory.toFsSync(npmrcFileString, '/root/.npmrc')
done.resolve(); return
return done.promise; }
};
let docker = function(){ /**
let done = plugins.q.defer(); * logs in docker
env.dockerRegistry = "docker.io" */
let docker = async () => {
env.setDockerRegistry('docker.io')
let dockerRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)/ let dockerRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)/
if(!process.env.NPMCI_LOGIN_DOCKER){ if (!process.env.NPMCI_LOGIN_DOCKER) {
plugins.beautylog.error("You have to specify Login Data to the Docker Registry"); plugins.beautylog.error('You have to specify Login Data to the Docker Registry')
process.exit(1); 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 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 dockerRegexResultArray = dockerRegex.exec(process.env.NPMCI_LOGIN_DOCKER)
let username = dockerRegexResultArray[1]; let username = dockerRegexResultArray[1]
let password = dockerRegexResultArray[2]; let password = dockerRegexResultArray[2]
plugins.shelljs.exec("docker login -u " + username + " -p " + password); await bash('docker login -u ' + username + ' -p ' + password)
done.resolve(); return
return done.promise;
} }
let dockerGitlab = function(){ /**
let done = plugins.q.defer(); * prepare docker for gitlab registry
env.dockerRegistry = "registry.gitlab.com"; */
plugins.shelljs.exec("docker login -u gitlab-ci-token -p " + process.env.CI_BUILD_TOKEN + " " + "registry.gitlab.com"); let dockerGitlab = async () => {
done.resolve(); env.setDockerRegistry('registry.gitlab.com')
return done.promise; plugins.shelljs.exec('docker login -u gitlab-ci-token -p ' + process.env.CI_BUILD_TOKEN + ' ' + 'registry.gitlab.com')
return
} }
export let prepare = function(serviceArg:string){ /**
* prepare ssh
*/
let ssh = async () => {
await sshModule.ssh()
}
/**
* the main exported prepare function
* @param servieArg describes the service to prepare
*/
export let prepare = async (serviceArg: TPrepService) => {
switch (serviceArg) { switch (serviceArg) {
case "npm": case 'npm':
return npm(); return await npm()
case "docker": case 'docker':
return docker(); return await docker()
case "docker-gitlab": case 'docker-gitlab':
return dockerGitlab() return await dockerGitlab()
case 'ssh':
return await ssh()
default: default:
break; break
} }
} }

View File

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

32
ts/npmci.servezone.ts Normal file
View File

@@ -0,0 +1,32 @@
import * as plugins from './npmci.plugins'
/**
* servezoneRegex is the regex that parses the servezone connection data
* parses strings in the form of "servezone.example.com|3000|somepassword"
*/
let servezoneRegex = /^(.*)\|(.*)\|(.*)/
/**
* holds the results of the parsed servezone env string
*/
let servezoneRegexResultArray = servezoneRegex.exec(process.env.NPMCI_SERVEZONE)
/**
* the data object that is used for the smartsocket client object
*/
let smartsocketClientConstructorOptions = {
alias: 'npmci',
password: servezoneRegexResultArray[3],
port: parseInt(servezoneRegexResultArray[2]),
role: 'ci',
url: servezoneRegexResultArray[1]
}
/**
* the main run function to submit a service to a servezone
*/
export let run = async (configArg) => {
new plugins.smartsocket.SmartsocketClient(
smartsocketClientConstructorOptions
)
}

48
ts/npmci.ssh.ts Normal file
View File

@@ -0,0 +1,48 @@
import * as plugins from './npmci.plugins'
let sshRegex = /^(.*)\|(.*)\|(.*)/
let sshInstance: plugins.smartssh.SshInstance
/**
* checks for ENV vars in form of NPMCI_SSHKEY_* and deploys any found ones
*/
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) {
sshInstance.writeToDisk()
} else {
plugins.beautylog.log('In test mode, so not storing SSH keys to disk!')
};
}
/**
* gets called for each found SSH ENV Var and deploys it
*/
let evaluateSshEnv = async (sshkeyEnvVarArg) => {
let resultArray = sshRegex.exec(sshkeyEnvVarArg)
let sshKey = new plugins.smartssh.SshKey()
plugins.beautylog.info('Found SSH identity for ' + resultArray[1])
if (notUndefined(resultArray[1])) {
plugins.beautylog.log('---> host defined!')
sshKey.host = resultArray[1]
}
if (notUndefined(resultArray[2])) {
plugins.beautylog.log('---> privKey defined!')
sshKey.privKeyBase64 = resultArray[2]
};
if (notUndefined(resultArray[3])) {
'---> pubKey defined!'
sshKey.pubKeyBase64 = resultArray[3]
};
sshInstance.addKey(sshKey)
return
}
/**
* checks if not undefined
*/
let notUndefined = (stringArg: string) => {
return (stringArg && stringArg !== 'undefined' && stringArg !== '##')
}

View File

@@ -1,13 +0,0 @@
import "typings-global";
import * as plugins from "./npmci.plugins";
import {prepare} from "./npmci.prepare";
import {bash} from "./npmci.bash";
import * as env from "./npmci.env";
export let tag = function(commandOptionArg){
}
export let retag = function(){
};

View File

@@ -1,8 +0,0 @@
import * as plugins from "./npmci.plugins"
import * as NpmciEnv from "./npmci.env";
import {bashBare} from "./npmci.bash";
import * as NpmciBuildDocker from "./npmci.build.docker";
export let testDocker = () => {
};

View File

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

View File

@@ -1,35 +1,27 @@
import "typings-global"; import * as plugins from './npmci.plugins'
import * as plugins from "./npmci.plugins"; import { prepare } from './npmci.prepare'
import {prepare} from "./npmci.prepare"; import { bash } from './npmci.bash'
import {bash} from "./npmci.bash";
//Variables let triggerValueRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|?([a-zA-Z0-9\.\-\/]*)/
let triggerEnvPrefix = "NPMCI_TRIGGER_";
export let trigger = function(){ export let trigger = async () => {
let done = plugins.q.defer(); plugins.beautylog.info('now running triggers')
plugins.beautylog.info("now running triggers"); plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_TRIGGER_*', evaluateTrigger)
let triggerRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|?([a-zA-Z0-9\.\-\/]*)/; }
for(let i = 0; i < 100; i++){
let iteratorString = i.toString(); let evaluateTrigger = async (triggerEnvVarArg) => {
let triggerName = triggerEnvPrefix + iteratorString let triggerRegexResultArray = triggerValueRegex.exec(triggerEnvVarArg)
if(process.env[triggerName]){ let regexDomain = triggerRegexResultArray[1]
let triggerRegexResultArray = triggerRegex.exec(process.env[triggerName]); let regexProjectId = triggerRegexResultArray[2]
let regexDomain = triggerRegexResultArray[1]; let regexProjectTriggerToken = triggerRegexResultArray[3]
let regexProjectId = triggerRegexResultArray[2]; let regexRefName = triggerRegexResultArray[4]
let regexProjectTriggerToken = triggerRegexResultArray[3]; let regexTriggerName
let regexRefName = triggerRegexResultArray[4]; if (triggerRegexResultArray.length === 6) {
let regexTriggerName; regexTriggerName = triggerRegexResultArray[5]
if(triggerRegexResultArray.length == 6){ } else {
regexTriggerName = triggerRegexResultArray[5]; regexTriggerName = 'Unnamed Trigger'
} else { }
regexTriggerName = "Unnamed Trigger"; plugins.beautylog.info('Found Trigger!')
} plugins.beautylog.log('triggering build for ref ' + regexRefName + ' of ' + regexTriggerName)
plugins.beautylog.info("Found " + triggerName); plugins.request.post('https://gitlab.com/api/v3/projects/' + regexProjectId + '/trigger/builds', { form: { token: regexProjectTriggerToken, ref: regexRefName } })
plugins.beautylog.log("triggering build for ref " + regexRefName + " of " + regexTriggerName);
plugins.request.post("https://gitlab.com/api/v3/projects/" + regexProjectId + "/trigger/builds", {form:{token:regexProjectTriggerToken,ref:regexRefName}});
}
}
done.resolve();
return done.promise;
} }

3
tslint.json Normal file
View File

@@ -0,0 +1,3 @@
{
"extends": "tslint-config-standard"
}

2758
yarn.lock Normal file

File diff suppressed because it is too large Load Diff