Compare commits

...

11 Commits

Author SHA1 Message Date
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
34 changed files with 381 additions and 91 deletions

2
.gitignore vendored
View File

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

View File

@@ -4,14 +4,18 @@ stages:
- test - test
- release - release
- trigger - trigger
- page
before_script: before_script:
- npm uninstall -g npmci
- npm install -g npmci - npm install -g npmci
testLTS: testLTS:
stage: test stage: test
script: script:
- npmci install lts
- npmci command npm install -g npmts
- npmci test lts - npmci test lts
tags: tags:
- docker - docker
@@ -19,6 +23,8 @@ testLTS:
testSTABLE: testSTABLE:
stage: test stage: test
script: script:
- npmci install stable
- npmci command npm install -g npmts
- npmci test stable - npmci test stable
tags: tags:
- docker - docker
@@ -26,6 +32,8 @@ testSTABLE:
testLEGACY: testLEGACY:
stage: test stage: test
script: script:
- npmci install legacy
- npmci command npm install -g npmts
- npmci test legacy - npmci test legacy
tags: tags:
- docker - docker
@@ -47,4 +55,16 @@ trigger:
only: only:
- tags - tags
tags: tags:
- docker - docker
pages:
image: hosttoday/ht-docker-node:npmpage
stage: page
script:
- 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
[![npm](https://push.rocks/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmci)
[![git](https://push.rocks/assets/repo-button-git.svg)](https://gitlab.com/pushrocks/npmci)
[![git](https://push.rocks/assets/repo-button-mirror.svg)](https://github.com/pushrocks/npmci)
[![docs](https://push.rocks/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/npmci/docs)
## Status for master
[![build status](https://gitlab.com/pushrocks/npmci/badges/master/build.svg)](https://gitlab.com/pushrocks/npmci/commits/master) [![build status](https://gitlab.com/pushrocks/npmci/badges/master/build.svg)](https://gitlab.com/pushrocks/npmci/commits/master)
[![coverage report](https://gitlab.com/pushrocks/npmci/badges/master/coverage.svg)](https://gitlab.com/pushrocks/npmci/commits/master)
[![Dependency Status](https://david-dm.org/pushrocks/npmci.svg)](https://david-dm.org/pushrocks/npmci)
[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/npmci/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/npmci/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/pushrocks/npmci/badges/code.svg)](https://www.bithound.io/github/pushrocks/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:

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

View File

@@ -1,3 +1,4 @@
import "typings-global"; import "typings-global";
export declare let nvmAvailable: boolean;
export declare let bash: (commandArg: string, retryArg?: number, bareArg?: boolean) => string; export declare let bash: (commandArg: string, retryArg?: number, bareArg?: boolean) => string;
export declare let bashBare: (commandArg: any, retryArg?: number) => string; export declare let bashBare: (commandArg: any, retryArg?: number) => string;

22
dist/npmci.bash.js vendored
View File

@@ -1,6 +1,20 @@
"use strict"; "use strict";
require("typings-global"); require("typings-global");
const plugins = require("./npmci.plugins"); const plugins = require("./npmci.plugins");
let nvmSourceString = "";
exports.nvmAvailable = false;
let checkNvm = () => {
if (plugins.shelljs.exec(`bash -c "source /usr/local/nvm/nvm.sh"`, { silent: true }).code === 0) {
nvmSourceString = `source /usr/local/nvm/nvm.sh && `;
exports.nvmAvailable = true;
}
else if (plugins.shelljs.exec(`bash -c "source ~/.nvm/nvm.sh"`, { silent: true }).code === 0) {
nvmSourceString = `source ~/.nvm/nvm.sh && `;
exports.nvmAvailable = true;
}
;
};
checkNvm();
exports.bash = (commandArg, retryArg = 2, bareArg = false) => { exports.bash = (commandArg, retryArg = 2, bareArg = false) => {
let exitCode; let exitCode;
let stdOut; let stdOut;
@@ -8,9 +22,7 @@ exports.bash = (commandArg, retryArg = 2, bareArg = false) => {
if (!process.env.NPMTS_TEST) { if (!process.env.NPMTS_TEST) {
for (let i = 0; i <= retryArg; i++) { for (let i = 0; i <= retryArg; i++) {
if (!bareArg) { if (!bareArg) {
execResult = plugins.shelljs.exec("bash -c \"source /usr/local/nvm/nvm.sh &&" + execResult = plugins.shelljs.exec(`bash -c "${nvmSourceString} ${commandArg}"`);
commandArg +
"\"");
} }
else { else {
execResult = plugins.shelljs.exec(commandArg); execResult = plugins.shelljs.exec(commandArg);
@@ -30,11 +42,11 @@ exports.bash = (commandArg, retryArg = 2, bareArg = false) => {
} }
} }
else { else {
plugins.beautylog.log("ShellExec would be: " + commandArg.blue); plugins.beautylog.log("ShellExec would be: " + commandArg);
} }
return stdOut; return stdOut;
}; };
exports.bashBare = (commandArg, retryArg = 2) => { exports.bashBare = (commandArg, retryArg = 2) => {
return exports.bash(commandArg, retryArg, true); return exports.bash(commandArg, retryArg, true);
}; };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuYmFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWNpLmJhc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUN4QixNQUFZLE9BQU8sV0FBTSxpQkFBaUIsQ0FBQyxDQUFBO0FBRWhDLFlBQUksR0FBRyxDQUFDLFVBQWlCLEVBQUMsUUFBUSxHQUFHLENBQUMsRUFBQyxPQUFPLEdBQUcsS0FBSztJQUM3RCxJQUFJLFFBQWUsQ0FBQztJQUNwQixJQUFJLE1BQWEsQ0FBQztJQUNsQixJQUFJLFVBQVUsQ0FBQztJQUNmLEVBQUUsQ0FBQSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQSxDQUFDO1FBQ3hCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFDLENBQUM7WUFDaEMsRUFBRSxDQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQSxDQUFDO2dCQUNULFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDN0IsMkNBQTJDO29CQUMzQyxVQUFVO29CQUNWLElBQUksQ0FDUCxDQUFDO1lBQ04sQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNKLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsUUFBUSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDM0IsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDM0IsRUFBRSxDQUFBLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUEsQ0FBQztnQkFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixDQUFDO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQSxDQUFDO2dCQUNyQixDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLHFEQUFxRDtZQUMzRSxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ0osT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ2xGLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxNQUFNLEdBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDMUYsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbkUsQ0FBQztJQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFBO0FBRVUsZ0JBQVEsR0FBRyxDQUFDLFVBQVUsRUFBQyxRQUFRLEdBQUcsQ0FBQztJQUMxQyxNQUFNLENBQUMsWUFBSSxDQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFBIn0= //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuYmFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWNpLmJhc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUN4QixNQUFZLE9BQU8sV0FBTSxpQkFBaUIsQ0FBQyxDQUFBO0FBRzNDLElBQUksZUFBZSxHQUFXLEVBQUUsQ0FBQztBQUN0QixvQkFBWSxHQUFZLEtBQUssQ0FBQztBQUN6QyxJQUFJLFFBQVEsR0FBRztJQUNYLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxFQUFDLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUYsZUFBZSxHQUFHLGtDQUFrQyxDQUFBO1FBQ3BELG9CQUFZLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RixlQUFlLEdBQUcsMEJBQTBCLENBQUE7UUFDNUMsb0JBQVksR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUFBLENBQUM7QUFDTixDQUFDLENBQUM7QUFDRixRQUFRLEVBQUUsQ0FBQztBQUVBLFlBQUksR0FBRyxDQUFDLFVBQWtCLEVBQUUsUUFBUSxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsS0FBSztJQUNoRSxJQUFJLFFBQWdCLENBQUM7SUFDckIsSUFBSSxNQUFjLENBQUM7SUFDbkIsSUFBSSxVQUFVLENBQUM7SUFDZixFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUMxQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDWCxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQzdCLFlBQVksZUFBZSxJQUFJLFVBQVUsR0FBRyxDQUMvQyxDQUFDO1lBQ04sQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNKLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsUUFBUSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDM0IsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDM0IsRUFBRSxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixDQUFDO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QixDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLHFEQUFxRDtZQUMzRSxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ0osT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ2xGLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDekYsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUE7QUFFVSxnQkFBUSxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsR0FBRyxDQUFDO0lBQzNDLE1BQU0sQ0FBQyxZQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUEifQ==

View File

@@ -1,2 +1,4 @@
/// <reference types="q" />
import "typings-global"; import "typings-global";
export declare let build: (commandArg: any) => any; import * as plugins from "./npmci.plugins";
export declare let build: (commandArg: any) => plugins.q.Promise<{}>;

View File

@@ -1,12 +1,14 @@
/// <reference types="q" />
/// <reference types="node" /> /// <reference types="node" />
export declare let build: () => any; import * as plugins from "./npmci.plugins";
export declare let readDockerfiles: () => any; export declare let build: () => plugins.q.Promise<{}>;
export declare let sortDockerfiles: (sortableArrayArg: Dockerfile[]) => any; export declare let readDockerfiles: () => plugins.q.Promise<{}>;
export declare let mapDockerfiles: (sortedArray: Dockerfile[]) => any; export declare let sortDockerfiles: (sortableArrayArg: Dockerfile[]) => plugins.q.Promise<{}>;
export declare let buildDockerfiles: (sortedArrayArg: Dockerfile[]) => any; export declare let mapDockerfiles: (sortedArray: Dockerfile[]) => plugins.q.Promise<{}>;
export declare let pushDockerfiles: (sortedArrayArg: Dockerfile[]) => any; export declare let buildDockerfiles: (sortedArrayArg: Dockerfile[]) => plugins.q.Promise<{}>;
export declare let pullDockerfileImages: (sortableArrayArg: Dockerfile[], registryArg?: string) => any; export declare let pushDockerfiles: (sortedArrayArg: Dockerfile[]) => plugins.q.Promise<{}>;
export declare let testDockerfiles: (sortedArrayArg: Dockerfile[]) => any; export declare let pullDockerfileImages: (sortableArrayArg: Dockerfile[], registryArg?: string) => plugins.q.Promise<{}>;
export declare let testDockerfiles: (sortedArrayArg: Dockerfile[]) => plugins.q.Promise<{}>;
export declare class Dockerfile { export declare class Dockerfile {
filePath: string; filePath: string;
repo: string; repo: string;
@@ -25,8 +27,8 @@ export declare class Dockerfile {
fileContents?: string | Buffer; fileContents?: string | Buffer;
read?: boolean; read?: boolean;
}); });
build(): any; build(): plugins.q.Promise<{}>;
push(stageArg: any): any; push(stageArg: any): plugins.q.Promise<{}>;
pull(registryArg: string): void; pull(registryArg: string): void;
test(): void; test(): void;
getId(): string; getId(): string;

View File

@@ -1,5 +1,7 @@
/// <reference types="q" />
import "typings-global"; import "typings-global";
import * as plugins from "./npmci.plugins";
/** /**
* cleans npmci config files * cleans npmci config files
*/ */
export declare let clean: () => any; export declare let clean: () => plugins.q.Promise<{}>;

View File

@@ -1,2 +1,4 @@
/// <reference types="q" />
import "typings-global"; import "typings-global";
export declare let command: () => any; import * as plugins from "./npmci.plugins";
export declare let command: () => plugins.q.Promise<{}>;

View File

@@ -1,2 +1,4 @@
/// <reference types="q" />
import "typings-global"; import "typings-global";
export declare let install: (versionArg: any) => any; import * as plugins from "./npmci.plugins";
export declare let install: (versionArg: any) => plugins.q.Promise<{}>;

16
dist/npmci.install.js vendored
View File

@@ -2,9 +2,10 @@
require("typings-global"); require("typings-global");
const plugins = require("./npmci.plugins"); const plugins = require("./npmci.plugins");
const npmci_bash_1 = require("./npmci.bash"); const npmci_bash_1 = require("./npmci.bash");
const npmci_bash_2 = require("./npmci.bash");
exports.install = (versionArg) => { exports.install = (versionArg) => {
let done = plugins.q.defer(); let done = plugins.q.defer();
plugins.beautylog.log("now installing " + "node ".green + ("version " + versionArg).yellow); plugins.beautylog.log(`now installing node version ${versionArg}`);
let version; let version;
if (versionArg == "stable") { if (versionArg == "stable") {
version = "6.3.0"; version = "6.3.0";
@@ -19,12 +20,17 @@ exports.install = (versionArg) => {
version = versionArg; version = versionArg;
} }
; ;
npmci_bash_1.bash("nvm install " + version + if (npmci_bash_2.nvmAvailable) {
" && nvm alias default " + version); 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!`);
}
else {
plugins.beautylog.warn("Nvm not in path so staying at installed node version!");
}
;
npmci_bash_1.bash("node -v"); npmci_bash_1.bash("node -v");
npmci_bash_1.bash("npm -v"); npmci_bash_1.bash("npm -v");
done.resolve(); done.resolve();
return done.promise; return done.promise;
}; };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuaW5zdGFsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWNpLmluc3RhbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUN4QixNQUFZLE9BQU8sV0FBTSxpQkFBaUIsQ0FBQyxDQUFBO0FBQzNDLDZCQUFtQixjQUFjLENBQUMsQ0FBQTtBQUV2QixlQUFPLEdBQUcsQ0FBQyxVQUFVO0lBQzVCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RixJQUFJLE9BQWMsQ0FBQztJQUNuQixFQUFFLENBQUEsQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLENBQUEsQ0FBQztRQUN2QixPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFBQyxJQUFJLENBQUMsRUFBRSxDQUFBLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxDQUFBLENBQUM7UUFDM0IsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsQ0FBQSxDQUFDO1FBQzlCLE9BQU8sR0FBRyxPQUFPLENBQUE7SUFDckIsQ0FBQztJQUFDLElBQUksQ0FBRSxDQUFDO1FBQ0wsT0FBTyxHQUFHLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBQUEsQ0FBQztJQUNGLGlCQUFJLENBQ0EsY0FBYyxHQUFHLE9BQU87UUFDeEIsd0JBQXdCLEdBQUcsT0FBTyxDQUNyQyxDQUFDO0lBQ0YsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLE9BQU8sR0FBRywwQkFBMEIsQ0FBQyxDQUFDO0lBQ2xGLGlCQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEIsaUJBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNmLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQSJ9 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuaW5zdGFsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWNpLmluc3RhbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUN4QixNQUFZLE9BQU8sV0FBTSxpQkFBaUIsQ0FBQyxDQUFBO0FBQzNDLDZCQUFxQixjQUFjLENBQUMsQ0FBQTtBQUNwQyw2QkFBNkIsY0FFN0IsQ0FBQyxDQUYwQztBQUVoQyxlQUFPLEdBQUcsQ0FBQyxVQUFVO0lBQzVCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsK0JBQStCLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDbkUsSUFBSSxPQUFlLENBQUM7SUFDcEIsRUFBRSxDQUFDLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDekIsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzdCLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNoQyxPQUFPLEdBQUcsT0FBTyxDQUFBO0lBQ3JCLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE9BQU8sR0FBRyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUFBLENBQUM7SUFDRixFQUFFLENBQUMsQ0FBQyx5QkFBWSxDQUFDLENBQUMsQ0FBQztRQUNmLGlCQUFJLENBQUMsZUFBZSxPQUFPLHlCQUF5QixPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQzlELE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGdCQUFnQixPQUFPLDBCQUEwQixDQUFDLENBQUM7SUFDakYsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ0osT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsdURBQXVELENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQUEsQ0FBQztJQUNGLGlCQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEIsaUJBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNmLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQSJ9

View File

@@ -5,12 +5,13 @@ export declare let gulpFunction: any;
export declare let lodash: any; export declare let lodash: any;
export import path = require("path"); export import path = require("path");
export import projectinfo = require("projectinfo"); export import projectinfo = require("projectinfo");
export declare let q: any; export import q = require("q");
export declare let request: any; export declare let request: any;
export declare let shelljs: any; export import shelljs = require("shelljs");
export import smartcli = require("smartcli"); export import smartcli = require("smartcli");
export import smartfile = require("smartfile"); export import smartfile = require("smartfile");
export import smartparam = require("smartparam"); export import smartparam = require("smartparam");
export import smartsocket = require("smartsocket");
export import smartssh = require("smartssh"); export import smartssh = require("smartssh");
export import smartstring = require("smartstring"); export import smartstring = require("smartstring");
export declare let through2: any; export declare let through2: any;

View File

@@ -12,7 +12,8 @@ exports.shelljs = require("shelljs");
exports.smartcli = require("smartcli"); exports.smartcli = require("smartcli");
exports.smartfile = require("smartfile"); exports.smartfile = require("smartfile");
exports.smartparam = require("smartparam"); exports.smartparam = require("smartparam");
exports.smartsocket = require("smartsocket");
exports.smartssh = require("smartssh"); exports.smartssh = require("smartssh");
exports.smartstring = require("smartstring"); exports.smartstring = require("smartstring");
exports.through2 = require("through2"); exports.through2 = require("through2");
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWNpLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUNWLGlCQUFTLFdBQVcsV0FBVyxDQUFDLENBQUM7QUFDcEMsWUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QixvQkFBWSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUN4QyxjQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hCLFlBQUksV0FBVyxNQUFNLENBQUMsQ0FBQztBQUN2QixtQkFBVyxXQUFXLGFBQWEsQ0FBQyxDQUFDO0FBQ3hDLFNBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsZUFBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QixlQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFCLGdCQUFRLFdBQVcsVUFBVSxDQUFDLENBQUM7QUFDL0IsaUJBQVMsV0FBVyxXQUFXLENBQUMsQ0FBQztBQUNqQyxrQkFBVSxXQUFXLFlBQVksQ0FBQyxDQUFDO0FBQ25DLGdCQUFRLFdBQVcsVUFBVSxDQUFDLENBQUM7QUFDL0IsbUJBQVcsV0FBVyxhQUFhLENBQUMsQ0FBQztBQUN4QyxnQkFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyJ9 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWNpLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUNWLGlCQUFTLFdBQVcsV0FBVyxDQUFDLENBQUM7QUFDcEMsWUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QixvQkFBWSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUN4QyxjQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hCLFlBQUksV0FBVyxNQUFNLENBQUMsQ0FBQztBQUN2QixtQkFBVyxXQUFXLGFBQWEsQ0FBQyxDQUFDO0FBQ3JDLFNBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNwQixlQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFCLGVBQU8sV0FBVyxTQUFTLENBQUMsQ0FBQztBQUM3QixnQkFBUSxXQUFXLFVBQVUsQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLFdBQVcsV0FBVyxDQUFDLENBQUM7QUFDakMsa0JBQVUsV0FBVyxZQUFZLENBQUMsQ0FBQztBQUNuQyxtQkFBVyxXQUFXLGFBQWEsQ0FBQyxDQUFDO0FBQ3JDLGdCQUFRLFdBQVcsVUFBVSxDQUFDLENBQUM7QUFDL0IsbUJBQVcsV0FBVyxhQUFhLENBQUMsQ0FBQztBQUN4QyxnQkFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyJ9

View File

@@ -1,2 +1,4 @@
/// <reference types="q" />
import "typings-global"; import "typings-global";
export declare let prepare: (serviceArg: string) => any; import * as plugins from "./npmci.plugins";
export declare let prepare: (serviceArg: string) => plugins.q.Promise<{}>;

View File

@@ -1,2 +1,12 @@
/// <reference types="q" />
import "typings-global"; import "typings-global";
export declare let publish: (serviceArg?: string) => any; import * as plugins from "./npmci.plugins";
/**
* type of supported services
*/
export declare type registryService = "npm" | "docker";
/**
* the main exported publish function.
* @param registryServiceArg the serviceArg
*/
export declare let publish: (registryServiceArg?: registryService) => plugins.q.Promise<{}>;

16
dist/npmci.publish.js vendored
View File

@@ -4,14 +4,21 @@ const plugins = require("./npmci.plugins");
const npmci_prepare_1 = require("./npmci.prepare"); const npmci_prepare_1 = require("./npmci.prepare");
const npmci_bash_1 = require("./npmci.bash"); const npmci_bash_1 = require("./npmci.bash");
const NpmciBuildDocker = require("./npmci.build.docker"); const NpmciBuildDocker = require("./npmci.build.docker");
exports.publish = (serviceArg = "npm") => { /**
switch (serviceArg) { * the main exported publish function.
* @param registryServiceArg the serviceArg
*/
exports.publish = (registryServiceArg = "npm") => {
switch (registryServiceArg) {
case "npm": case "npm":
return publishNpm(); return publishNpm();
case "docker": case "docker":
return publishDocker(); return publishDocker();
} }
}; };
/**
* tries to publish project at cwd to npm
*/
let publishNpm = function () { let publishNpm = function () {
let done = plugins.q.defer(); let done = plugins.q.defer();
npmci_prepare_1.prepare("npm") npmci_prepare_1.prepare("npm")
@@ -22,6 +29,9 @@ let publishNpm = function () {
}); });
return done.promise; return done.promise;
}; };
/**
* tries to pubish current cwd to Docker registry
*/
let publishDocker = function () { let publishDocker = function () {
let done = plugins.q.defer(); let done = plugins.q.defer();
NpmciBuildDocker.readDockerfiles() NpmciBuildDocker.readDockerfiles()
@@ -30,4 +40,4 @@ let publishDocker = function () {
.then(done.resolve); .then(done.resolve);
return done.promise; return done.promise;
}; };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kucHVibGlzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWNpLnB1Ymxpc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUN4QixNQUFZLE9BQU8sV0FBTSxpQkFBaUIsQ0FBQyxDQUFBO0FBQzNDLGdDQUFzQixpQkFBaUIsQ0FBQyxDQUFBO0FBQ3hDLDZCQUFtQixjQUFjLENBQUMsQ0FBQTtBQUVsQyxNQUFZLGdCQUFnQixXQUFNLHNCQUVsQyxDQUFDLENBRnVEO0FBRTdDLGVBQU8sR0FBRyxDQUFDLFVBQVUsR0FBVSxLQUFLO0lBQzNDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFBLENBQUM7UUFDaEIsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssUUFBUTtZQUNULE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvQixDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsSUFBSSxVQUFVLEdBQUk7SUFDZCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLHVCQUFPLENBQUMsS0FBSyxDQUFDO1NBQ1QsSUFBSSxDQUFDO1FBQ0YsaUJBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwQixPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBRTtRQUMvQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDUixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN2QixDQUFDLENBQUE7QUFFRCxJQUFJLGFBQWEsR0FBRztJQUNoQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLGdCQUFnQixDQUFDLGVBQWUsRUFBRTtTQUNqQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7U0FDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQztTQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQyJ9 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kucHVibGlzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL25wbWNpLnB1Ymxpc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUN4QixNQUFZLE9BQU8sV0FBTSxpQkFBaUIsQ0FBQyxDQUFBO0FBQzNDLGdDQUFzQixpQkFBaUIsQ0FBQyxDQUFBO0FBQ3hDLDZCQUFtQixjQUFjLENBQUMsQ0FBQTtBQUVsQyxNQUFZLGdCQUFnQixXQUFNLHNCQUtsQyxDQUFDLENBTHVEO0FBT3hEOzs7R0FHRztBQUNRLGVBQU8sR0FBRyxDQUFDLGtCQUFrQixHQUFtQixLQUFLO0lBQzVELE1BQU0sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUEsQ0FBQztRQUN4QixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDeEIsS0FBSyxRQUFRO1lBQ1QsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQy9CLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILElBQUksVUFBVSxHQUFJO0lBQ2QsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3Qix1QkFBTyxDQUFDLEtBQUssQ0FBQztTQUNULElBQUksQ0FBQztRQUNGLGlCQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUU7UUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ1IsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDdkIsQ0FBQyxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxJQUFJLGFBQWEsR0FBRztJQUNoQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLGdCQUFnQixDQUFDLGVBQWUsRUFBRTtTQUNqQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7U0FDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQztTQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQyJ9

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) => void;

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

@@ -0,0 +1,28 @@
"use strict";
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) => {
new plugins.smartsocket.SmartsocketClient(smartsocketClientConstructorOptions);
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuc2VydmV6b25lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtY2kuc2VydmV6b25lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFZLE9BQU8sV0FBTSxpQkFBaUIsQ0FBQyxDQUFBO0FBRTNDOzs7R0FHRztBQUNILElBQUksY0FBYyxHQUFHLG1CQUFtQixDQUFDO0FBRXpDOztHQUVHO0FBQ0gsSUFBSSx5QkFBeUIsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFakY7O0dBRUc7QUFDSCxJQUFJLG1DQUFtQyxHQUFHO0lBQ3RDLEtBQUssRUFBRSxPQUFPO0lBQ2QsUUFBUSxFQUFFLHlCQUF5QixDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEVBQUUsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLElBQUksRUFBRSxJQUFJO0lBQ1YsR0FBRyxFQUFFLHlCQUF5QixDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDO0FBRUY7O0dBRUc7QUFDUSxXQUFHLEdBQUcsQ0FBQyxTQUFTO0lBQ3ZCLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FDckMsbUNBQW1DLENBQ3RDLENBQUM7QUFDTixDQUFDLENBQUMifQ==

7
dist/npmci.ssh.d.ts vendored
View File

@@ -1,2 +1,7 @@
/// <reference types="q" />
import "typings-global"; import "typings-global";
export declare let ssh: () => any; import * as plugins from "./npmci.plugins";
/**
* checks for ENV vars in form of NPMCI_SSHKEY_* and deploys any found ones
*/
export declare let ssh: () => plugins.q.Promise<{}>;

13
dist/npmci.ssh.js vendored
View File

@@ -3,9 +3,12 @@ require("typings-global");
const plugins = require("./npmci.plugins"); const plugins = require("./npmci.plugins");
let sshRegex = /^(.*)\|(.*)\|(.*)/; let sshRegex = /^(.*)\|(.*)\|(.*)/;
let sshInstance; let sshInstance;
/**
* checks for ENV vars in form of NPMCI_SSHKEY_* and deploys any found ones
*/
exports.ssh = () => { exports.ssh = () => {
let done = plugins.q.defer(); let done = plugins.q.defer();
sshInstance = new plugins.smartssh.SshInstance(); sshInstance = new plugins.smartssh.SshInstance(); // init ssh instance
plugins.smartparam.forEachMinimatch(process.env, "NPMCI_SSHKEY_*", evaluateSshEnv); plugins.smartparam.forEachMinimatch(process.env, "NPMCI_SSHKEY_*", evaluateSshEnv);
if (!process.env.NPMTS_TEST) { if (!process.env.NPMTS_TEST) {
sshInstance.writeToDisk(); sshInstance.writeToDisk();
@@ -17,6 +20,9 @@ exports.ssh = () => {
done.resolve(); done.resolve();
return done.promise; return done.promise;
}; };
/**
* gets called for each found SSH ENV Var and deploys it
*/
let evaluateSshEnv = (sshkeyEnvVarArg) => { let evaluateSshEnv = (sshkeyEnvVarArg) => {
let resultArray = sshRegex.exec(sshkeyEnvVarArg); let resultArray = sshRegex.exec(sshkeyEnvVarArg);
let sshKey = new plugins.smartssh.SshKey(); let sshKey = new plugins.smartssh.SshKey();
@@ -37,7 +43,10 @@ let evaluateSshEnv = (sshkeyEnvVarArg) => {
; ;
sshInstance.addKey(sshKey); sshInstance.addKey(sshKey);
}; };
/**
* checks if not undefined
*/
let notUndefined = (stringArg) => { let notUndefined = (stringArg) => {
return (stringArg && stringArg != "undefined" && stringArg != "##"); return (stringArg && stringArg != "undefined" && stringArg != "##");
}; };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuc3NoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtY2kuc3NoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUFnQixDQUFDLENBQUE7QUFDeEIsTUFBWSxPQUFPLFdBQU0saUJBQWlCLENBQUMsQ0FBQTtBQUUzQyxJQUFJLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQTtBQUNsQyxJQUFJLFdBQXdDLENBQUM7QUFFbEMsV0FBRyxHQUFHO0lBQ2IsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pELE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBQyxnQkFBZ0IsRUFBQyxjQUFjLENBQUMsQ0FBQztJQUNqRixFQUFFLENBQUEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUEsQ0FBQztRQUN4QixXQUFXLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDN0IsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ0osT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0RBQWdELENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQUEsQ0FBQztJQUNGLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGLElBQUksY0FBYyxHQUFHLENBQUMsZUFBZTtJQUNqQyxJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2pELElBQUksTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRSxFQUFFLENBQUEsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDM0MsTUFBTSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELEVBQUUsQ0FBQSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUM7UUFDN0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtRQUM5QyxNQUFNLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQUEsQ0FBQztJQUNGLEVBQUUsQ0FBQSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUM7UUFDN0Isc0JBQXNCLENBQUE7UUFDdEIsTUFBTSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUFBLENBQUM7SUFFRixXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUVGLElBQUksWUFBWSxHQUFHLENBQUMsU0FBZ0I7SUFDaEMsTUFBTSxDQUFDLENBQUMsU0FBUyxJQUFJLFNBQVMsSUFBSSxXQUFXLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3hFLENBQUMsQ0FBQSJ9 //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuc3NoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtY2kuc3NoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUFnQixDQUFDLENBQUE7QUFDeEIsTUFBWSxPQUFPLFdBQU0saUJBQWlCLENBQUMsQ0FBQTtBQUUzQyxJQUFJLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQTtBQUNsQyxJQUFJLFdBQXdDLENBQUM7QUFFN0M7O0dBRUc7QUFDUSxXQUFHLEdBQUc7SUFDYixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzdCLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxvQkFBb0I7SUFDdEUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFDLGdCQUFnQixFQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pGLEVBQUUsQ0FBQSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQSxDQUFDO1FBQ3hCLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxJQUFJLGNBQWMsR0FBRyxDQUFDLGVBQWU7SUFDakMsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNqRCxJQUFJLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDM0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkUsRUFBRSxDQUFBLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQztRQUM3QixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO1FBQzNDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxFQUFFLENBQUEsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUE7UUFDOUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUFBLENBQUM7SUFDRixFQUFFLENBQUEsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDO1FBQzdCLHNCQUFzQixDQUFBO1FBQ3RCLE1BQU0sQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFBQSxDQUFDO0lBRUYsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILElBQUksWUFBWSxHQUFHLENBQUMsU0FBZ0I7SUFDaEMsTUFBTSxDQUFDLENBQUMsU0FBUyxJQUFJLFNBQVMsSUFBSSxXQUFXLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3hFLENBQUMsQ0FBQSJ9

View File

@@ -1,2 +1,4 @@
/// <reference types="q" />
import "typings-global"; import "typings-global";
export declare let test: (versionArg: any) => any; import * as plugins from "./npmci.plugins";
export declare let test: (versionArg: any) => plugins.q.Promise<{}>;

View File

@@ -1,2 +1,4 @@
/// <reference types="q" />
import "typings-global"; import "typings-global";
export declare let trigger: () => any; import * as plugins from "./npmci.plugins";
export declare let trigger: () => plugins.q.Promise<{}>;

15
docs/book.json Normal file
View File

@@ -0,0 +1,15 @@
{
"structure": {
"readme": "index.md"
},
"plugins": [
"tonic",
"edit-link"
],
"pluginsConfig": {
"edit-link": {
"base": "https://gitlab.com/pushrocks/npmts/edit/master/docs/",
"label": "Edit on GitLab"
}
}
}

65
docs/index.md Normal file
View File

@@ -0,0 +1,65 @@
# NPMCI
npmci is your friend when it comes to handling npm packages during CI builds. It is optimized for GitLab CI
## Availabililty
[![npm](https://push.rocks/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmci)
[![git](https://push.rocks/assets/repo-button-git.svg)](https://gitlab.com/pushrocks/npmci)
[![git](https://push.rocks/assets/repo-button-mirror.svg)](https://github.com/pushrocks/npmci)
[![docs](https://push.rocks/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/npmci/docs)
## Status for master
[![build status](https://gitlab.com/pushrocks/npmci/badges/master/build.svg)](https://gitlab.com/pushrocks/npmci/commits/master)
[![coverage report](https://gitlab.com/pushrocks/npmci/badges/master/coverage.svg)](https://gitlab.com/pushrocks/npmci/commits/master)
[![Dependency Status](https://david-dm.org/pushrocks/npmci.svg)](https://david-dm.org/pushrocks/npmci)
[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/npmci/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/npmci/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/pushrocks/npmci/badges/code.svg)](https://www.bithound.io/github/pushrocks/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
npmci is designed to work in docker CI environments. The following docker images come with npmci presinstalled:
Docker Hub:
* [hosttoday/ht-docker-node:npmci](https://hub.docker.com/r/hosttoday/ht-docker-node/)
has LTS node version and npmci preinstalled.
* [hosttoday/ht-docker-dbase](https://hub.docker.com/r/hosttoday/ht-docker-dbase/)
based on docker:git, can be used to build docker images in conjunction with docker:dind
npmci can be called from commandline:
```shell
# Install any node version:
npmci install lts # will install latest LTS node version and update PATH for node and npm versions
npmci install stable # will install latest stable node version and update PATH for node and npm
npmci install legacy # will install latest legacy node version and update PATH for node and npm
npmci install x.x.x # will install any specific node version.
# Install any node version, install dependencies and run test in cwd:
npmci test lts # will install latest lts node version and run "npm install" and "npm test".
npmci test stable # will install latest stable node version and run "npm install" and "npm test".
npmci test legacy # will install latest legacy node version and run "npm install" and "npm test".
npmci test x.x.x # will install any specific node version and run "npm install" and "npm test".
npmci test docker # will test any build image with tests defined in ./npmci/dockertest_1.sh to ./npmci/dockertest_100.sh
## npmci test docker will look at all Dockerfiles and look for according tags on GitLab container registry
# prepare tools
npmci prepare npm # will look for $NPMCI_TOKEN_NPM env var and create .npmrc, so npm is authenticated
npmci prepare docker # will look for $NPMCI_LOGIN_DOCKER in form username|password and authenticate docker
npmci prepare docker-gitlab # will authenticate docker for gitlab container registry
# build containers
npmci build docker # will build containers
## all Dockerfiles named DOckerfile* are picked up.
## specify tags lake this Dockerfile_[tag]
## uploads all built images as [username]/[reponame]:[tag]_test to GitLab
## then test in next step with "npmci test docker"
# publish npm module
npmci publish npm # will look vor $NPMCI_TOKEN_NPM env var and push any module in cwd to npm
npmci publish docker
# trigger webhooks
npmci trigger # will look for NPMCI_TRIGGER_1 to NPMCI_TRIGGER_100 in form domain|id|token|ref|name
```

8
npmextra.json Normal file
View File

@@ -0,0 +1,8 @@
{
"npmts":{
"mode":"default"
},
"npmdocker":{
"baseImage":"hosttoday/ht-docker-node:npmts"
}
}

View File

@@ -1,8 +1,9 @@
{ {
"name": "npmci", "name": "npmci",
"version": "2.3.11", "version": "2.3.15",
"description": "", "description": "",
"main": "dist/index.js", "main": "dist/index.js",
"typings": "dist/index.d.ts",
"bin": { "bin": {
"npmci": "dist/index.js" "npmci": "dist/index.js"
}, },
@@ -21,22 +22,27 @@
}, },
"homepage": "https://gitlab.com/pushrocks/npmci#README", "homepage": "https://gitlab.com/pushrocks/npmci#README",
"devDependencies": { "devDependencies": {
"npmts-g": "^5.2.6", "npmts-g": "^5.2.8",
"should": "^10.0.0", "should": "^10.0.0",
"typings-test": "^1.0.1" "typings-test": "^1.0.1"
}, },
"dependencies": { "dependencies": {
"beautylog": "^5.0.14", "@types/lodash": "^0.0.28",
"@types/q": "^0.0.27",
"@types/request": "^0.0.27",
"@types/shelljs": "^0.3.27",
"beautylog": "^5.0.18",
"gulp": "^3.9.1", "gulp": "^3.9.1",
"gulp-function": "^1.3.6", "gulp-function": "^1.3.6",
"lodash": "^4.13.1", "lodash": "^4.14.1",
"projectinfo": "^1.0.3", "projectinfo": "^1.0.3",
"q": "^1.4.1", "q": "^1.4.1",
"request": "^2.73.0", "request": "^2.74.0",
"shelljs": "^0.7.0", "shelljs": "^0.7.3",
"smartcli": "^1.0.4", "smartcli": "^1.0.4",
"smartfile": "^4.0.11", "smartfile": "^4.0.12",
"smartparam": "^0.1.1", "smartparam": "^0.1.1",
"smartsocket": "^1.1.4",
"smartssh": "^1.1.5", "smartssh": "^1.1.5",
"smartstring": "^2.0.15", "smartstring": "^2.0.15",
"through2": "^2.0.1", "through2": "^2.0.1",

View File

@@ -1,38 +1,50 @@
import "typings-global"; import "typings-global";
import * as plugins from "./npmci.plugins"; import * as plugins from "./npmci.plugins";
export let bash = (commandArg:string,retryArg = 2,bareArg = false) => {
let exitCode:number; let nvmSourceString: string = "";
let stdOut:string; export let nvmAvailable: boolean = false;
let checkNvm = () => {
if (plugins.shelljs.exec(`bash -c "source /usr/local/nvm/nvm.sh"`,{silent:true}).code === 0) {
nvmSourceString = `source /usr/local/nvm/nvm.sh && `
nvmAvailable = true;
} else if (plugins.shelljs.exec(`bash -c "source ~/.nvm/nvm.sh"`,{silent:true}).code === 0) {
nvmSourceString = `source ~/.nvm/nvm.sh && `
nvmAvailable = true;
};
};
checkNvm();
export let bash = (commandArg: string, retryArg = 2, bareArg = false) => {
let exitCode: number;
let stdOut: string;
let execResult; let execResult;
if(!process.env.NPMTS_TEST){ if (!process.env.NPMTS_TEST) { // NPMTS_TEST is used during testing
for (let i = 0; i <= retryArg; i++){ for (let i = 0; i <= retryArg; i++) {
if(!bareArg){ if (!bareArg) {
execResult = plugins.shelljs.exec( execResult = plugins.shelljs.exec(
"bash -c \"source /usr/local/nvm/nvm.sh &&" + `bash -c "${nvmSourceString} ${commandArg}"`
commandArg +
"\""
); );
} else { } else {
execResult = plugins.shelljs.exec(commandArg); execResult = plugins.shelljs.exec(commandArg);
} }
exitCode = execResult.code; exitCode = execResult.code;
stdOut = execResult.stdout; stdOut = execResult.stdout;
if(exitCode !== 0 && i == retryArg){ if (exitCode !== 0 && i == retryArg) {
process.exit(1); process.exit(1);
} else if(exitCode == 0){ } else if (exitCode == 0) {
i = retryArg + 1; // if everything works out ok retrials are not wanted i = retryArg + 1; // 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: " + 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)
} }
return stdOut; return stdOut;
} }
export let bashBare = (commandArg,retryArg = 2) => { export let bashBare = (commandArg, retryArg = 2) => {
return bash(commandArg,retryArg,true); return bash(commandArg, retryArg, true);
} }

View File

@@ -1,25 +1,27 @@
import "typings-global"; 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 { nvmAvailable } from "./npmci.bash"
export let install = (versionArg) => { export let install = (versionArg) => {
let done = plugins.q.defer(); let done = plugins.q.defer();
plugins.beautylog.log("now installing " + "node ".green + ("version " + versionArg).yellow); plugins.beautylog.log(`now installing node version ${versionArg}`);
let version:string; let version: string;
if(versionArg == "stable"){ if (versionArg == "stable") {
version = "6.3.0"; version = "6.3.0";
} else if(versionArg == "lts"){ } else if (versionArg == "lts") {
version = "6.3.0"; version = "6.3.0";
} else if(versionArg == "legacy"){ } else if (versionArg == "legacy") {
version = "6.3.0" version = "6.3.0"
} else { } else {
version = versionArg; version = versionArg;
}; };
bash( if (nvmAvailable) {
"nvm install " + version + 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("node -v");
bash("npm -v"); bash("npm -v");
done.resolve(); done.resolve();

View File

@@ -5,12 +5,13 @@ export let gulpFunction = require("gulp-function");
export let lodash = require("lodash"); export let lodash = require("lodash");
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("q");
export let request = require("request"); export let request = require("request");
export let shelljs = require("shelljs"); export import shelljs = require("shelljs");
export import smartcli = require("smartcli"); export import smartcli = require("smartcli");
export import smartfile = require("smartfile"); export import smartfile = require("smartfile");
export import smartparam = require("smartparam"); export import smartparam = require("smartparam");
export import smartsocket = require("smartsocket");
export import smartssh = require("smartssh"); export import smartssh = require("smartssh");
export import smartstring = require("smartstring"); export import smartstring = require("smartstring");
export let through2 = require("through2"); export let through2 = require("through2");

View File

@@ -5,8 +5,17 @@ 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
*/
export type registryService = "npm" | "docker";
/**
* the main exported publish function.
* @param registryServiceArg the serviceArg
*/
export let publish = (registryServiceArg:registryService = "npm") => {
switch (registryServiceArg){
case "npm": case "npm":
return publishNpm(); return publishNpm();
case "docker": case "docker":
@@ -14,6 +23,9 @@ export let publish = (serviceArg:string = "npm") => {
} }
}; };
/**
* tries to publish project at cwd to npm
*/
let publishNpm = function(){ let publishNpm = function(){
let done = plugins.q.defer(); let done = plugins.q.defer();
prepare("npm") prepare("npm")
@@ -25,6 +37,9 @@ let publishNpm = function(){
return done.promise; return done.promise;
} }
/**
* tries to pubish current cwd to Docker registry
*/
let publishDocker = function(){ let publishDocker = function(){
let done = plugins.q.defer(); let done = plugins.q.defer();
NpmciBuildDocker.readDockerfiles() NpmciBuildDocker.readDockerfiles()

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 = (configArg) => {
new plugins.smartsocket.SmartsocketClient(
smartsocketClientConstructorOptions
);
};

View File

@@ -4,12 +4,15 @@ import * as plugins from "./npmci.plugins";
let sshRegex = /^(.*)\|(.*)\|(.*)/ let sshRegex = /^(.*)\|(.*)\|(.*)/
let sshInstance:plugins.smartssh.SshInstance; let sshInstance:plugins.smartssh.SshInstance;
/**
* checks for ENV vars in form of NPMCI_SSHKEY_* and deploys any found ones
*/
export let ssh = () => { export let ssh = () => {
let done = plugins.q.defer(); let done = plugins.q.defer();
sshInstance = new plugins.smartssh.SshInstance(); sshInstance = new plugins.smartssh.SshInstance(); // init ssh instance
plugins.smartparam.forEachMinimatch(process.env,"NPMCI_SSHKEY_*",evaluateSshEnv); plugins.smartparam.forEachMinimatch(process.env,"NPMCI_SSHKEY_*",evaluateSshEnv);
if(!process.env.NPMTS_TEST){ if(!process.env.NPMTS_TEST){
sshInstance.writeToDisk() sshInstance.writeToDisk();
} else { } else {
plugins.beautylog.log("In test mode, so not storing SSH keys to disk!"); plugins.beautylog.log("In test mode, so not storing SSH keys to disk!");
}; };
@@ -17,6 +20,9 @@ export let ssh = () => {
return done.promise; return done.promise;
}; };
/**
* gets called for each found SSH ENV Var and deploys it
*/
let evaluateSshEnv = (sshkeyEnvVarArg) => { let evaluateSshEnv = (sshkeyEnvVarArg) => {
let resultArray = sshRegex.exec(sshkeyEnvVarArg); let resultArray = sshRegex.exec(sshkeyEnvVarArg);
let sshKey = new plugins.smartssh.SshKey(); let sshKey = new plugins.smartssh.SshKey();
@@ -37,6 +43,9 @@ let evaluateSshEnv = (sshkeyEnvVarArg) => {
sshInstance.addKey(sshKey); sshInstance.addKey(sshKey);
}; };
/**
* checks if not undefined
*/
let notUndefined = (stringArg:string) => { let notUndefined = (stringArg:string) => {
return (stringArg && stringArg != "undefined" && stringArg != "##"); return (stringArg && stringArg != "undefined" && stringArg != "##");
} }