Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3666b35ce0 | |||
| 45c91f3dc1 | |||
| 4646862fd6 | |||
| fb95bdfdc0 | |||
| dca4010f97 | |||
| 3b3a303c55 | |||
| 563414882e | |||
| 71c30e7563 | |||
| d89cc90c4b |
6
dist/mod_cloudflare/index.js
vendored
6
dist/mod_cloudflare/index.js
vendored
@@ -19,11 +19,11 @@ exports.handleCli = (argvArg) => __awaiter(this, void 0, void 0, function* () {
|
||||
let action = argvArg._[1];
|
||||
switch (action) {
|
||||
default:
|
||||
plugins.beautylog.error(`>>npmci node ...<< action >>${action}<< not supported`);
|
||||
plugins.beautylog.error(`>>npmci cloudflare ...<< action >>${action}<< not supported`);
|
||||
}
|
||||
}
|
||||
else {
|
||||
plugins.beautylog.log(`>>npmci node ...<< cli arguments invalid... Please read the documentation.`);
|
||||
plugins.beautylog.log(`>>npmci cloudflare ...<< cli arguments invalid... Please read the documentation.`);
|
||||
}
|
||||
});
|
||||
exports.purge = (argvArg) => __awaiter(this, void 0, void 0, function* () {
|
||||
@@ -33,4 +33,4 @@ exports.purge = (argvArg) => __awaiter(this, void 0, void 0, function* () {
|
||||
});
|
||||
npmciCflare.purgeZone(argvArg._[1]);
|
||||
});
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfY2xvdWRmbGFyZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEseUNBQXdDO0FBRXhDLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQTtBQUVwRDs7O0dBR0c7QUFDUSxRQUFBLFNBQVMsR0FBRyxDQUFPLE9BQU87SUFDbkMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLE1BQU0sR0FBVyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDZjtnQkFDRSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsTUFBTSxrQkFBa0IsQ0FBQyxDQUFBO1FBQ3BGLENBQUM7SUFDSCxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDTixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyw0RUFBNEUsQ0FBQyxDQUFBO0lBQ3JHLENBQUM7QUFDSCxDQUFDLENBQUEsQ0FBQTtBQUVVLFFBQUEsS0FBSyxHQUFHLENBQU8sT0FBTztJQUMvQixXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ2YsS0FBSyxFQUFFLEVBQUU7UUFDVCxHQUFHLEVBQUUsRUFBRTtLQUNSLENBQUMsQ0FBQTtJQUNGLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3JDLENBQUMsQ0FBQSxDQUFBIn0=
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfY2xvdWRmbGFyZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEseUNBQXdDO0FBRXhDLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQTtBQUVwRDs7O0dBR0c7QUFDUSxRQUFBLFNBQVMsR0FBRyxDQUFPLE9BQU87SUFDbkMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLE1BQU0sR0FBVyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDZjtnQkFDRSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsTUFBTSxrQkFBa0IsQ0FBQyxDQUFBO1FBQzFGLENBQUM7SUFDSCxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDTixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxrRkFBa0YsQ0FBQyxDQUFBO0lBQzNHLENBQUM7QUFDSCxDQUFDLENBQUEsQ0FBQTtBQUVVLFFBQUEsS0FBSyxHQUFHLENBQU8sT0FBTztJQUMvQixXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ2YsS0FBSyxFQUFFLEVBQUU7UUFDVCxHQUFHLEVBQUUsRUFBRTtLQUNSLENBQUMsQ0FBQTtJQUNGLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3JDLENBQUMsQ0FBQSxDQUFBIn0=
|
||||
113
dist/mod_docker/index.d.ts
vendored
113
dist/mod_docker/index.d.ts
vendored
@@ -1,111 +1,24 @@
|
||||
/// <reference types="node" />
|
||||
import * as helpers from './mod.helpers';
|
||||
import { Dockerfile } from './mod.classes.dockerfile';
|
||||
export { Dockerfile, helpers };
|
||||
export declare let modArgvArg: any;
|
||||
/**
|
||||
* handle cli input
|
||||
* @param argvArg
|
||||
*/
|
||||
export declare let handleCli: (argvArg: any) => Promise<void>;
|
||||
/**
|
||||
* logs in docker
|
||||
*/
|
||||
export declare let prepare: () => Promise<void>;
|
||||
/**
|
||||
* builds a cwd of Dockerfiles by triggering a promisechain
|
||||
*/
|
||||
export declare let build: () => Promise<void>;
|
||||
export declare let push: () => Promise<void>;
|
||||
export declare let pull: () => Promise<Dockerfile[]>;
|
||||
/**
|
||||
* login to the DockerRegistries
|
||||
*/
|
||||
export declare let login: () => Promise<void>;
|
||||
/**
|
||||
* logs in docker
|
||||
*/
|
||||
export declare let prepare: () => Promise<void>;
|
||||
export declare let push: (argvArg: any) => Promise<void>;
|
||||
export declare let pull: (argvArg: any) => Promise<void>;
|
||||
export declare let test: () => Promise<Dockerfile[]>;
|
||||
/**
|
||||
* creates instance of class Dockerfile for all Dockerfiles in cwd
|
||||
* @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 {
|
||||
filePath: string;
|
||||
repo: string;
|
||||
version: string;
|
||||
cleanTag: string;
|
||||
buildTag: string;
|
||||
gitlabTestTag: string;
|
||||
gitlabReleaseTag: string;
|
||||
releaseTag: string;
|
||||
containerName: string;
|
||||
content: string;
|
||||
baseImage: string;
|
||||
localBaseImageDependent: boolean;
|
||||
localBaseDockerfile: Dockerfile;
|
||||
constructor(options: {
|
||||
filePath?: string;
|
||||
fileContents?: string | Buffer;
|
||||
read?: boolean;
|
||||
});
|
||||
/**
|
||||
* builds the Dockerfile
|
||||
*/
|
||||
build(): Promise<void>;
|
||||
/**
|
||||
* 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;
|
||||
/**
|
||||
* returns the docker base image for a Dockerfile
|
||||
*/
|
||||
export declare let dockerBaseImage: (dockerfileContentArg: string) => string;
|
||||
/**
|
||||
* returns the docker tag
|
||||
*/
|
||||
export declare let getDockerTagString: (registryArg: string, repoArg: string, versionArg: string, suffixArg?: string) => string;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
export declare let cleanTagsArrayFunction: (dockerfileArrayArg: Dockerfile[], trackingArrayArg: Dockerfile[]) => string[];
|
||||
|
||||
380
dist/mod_docker/index.js
vendored
380
dist/mod_docker/index.js
vendored
File diff suppressed because one or more lines are too long
42
dist/mod_docker/mod.classes.dockerfile.d.ts
vendored
Normal file
42
dist/mod_docker/mod.classes.dockerfile.d.ts
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
/// <reference types="node" />
|
||||
import { DockerRegistry } from './mod.classes.dockerregistry';
|
||||
/**
|
||||
* class Dockerfile represents a Dockerfile on disk in npmci
|
||||
*/
|
||||
export declare class Dockerfile {
|
||||
filePath: string;
|
||||
repo: string;
|
||||
version: string;
|
||||
cleanTag: string;
|
||||
buildTag: string;
|
||||
containerName: string;
|
||||
content: string;
|
||||
baseImage: string;
|
||||
localBaseImageDependent: boolean;
|
||||
localBaseDockerfile: Dockerfile;
|
||||
constructor(options: {
|
||||
filePath?: string;
|
||||
fileContents?: string | Buffer;
|
||||
read?: boolean;
|
||||
});
|
||||
/**
|
||||
* builds the Dockerfile
|
||||
*/
|
||||
build(): Promise<void>;
|
||||
/**
|
||||
* pushes the Dockerfile to a registry
|
||||
*/
|
||||
push(dockerRegistryArg: DockerRegistry, versionSuffix?: string): Promise<void>;
|
||||
/**
|
||||
* pulls the Dockerfile from a registry
|
||||
*/
|
||||
pull(registryArg: DockerRegistry, versionSuffixArg?: string): Promise<void>;
|
||||
/**
|
||||
* tests the Dockerfile;
|
||||
*/
|
||||
test(): Promise<void>;
|
||||
/**
|
||||
* gets the id of a Dockerfile
|
||||
*/
|
||||
getId(): Promise<string>;
|
||||
}
|
||||
95
dist/mod_docker/mod.classes.dockerfile.js
vendored
Normal file
95
dist/mod_docker/mod.classes.dockerfile.js
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
"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("./mod.plugins");
|
||||
const NpmciEnv = require("../npmci.env");
|
||||
const npmci_bash_1 = require("../npmci.bash");
|
||||
const paths = require("../npmci.paths");
|
||||
const helpers = require("./mod.helpers");
|
||||
/**
|
||||
* class Dockerfile represents a Dockerfile on disk in npmci
|
||||
*/
|
||||
class Dockerfile {
|
||||
constructor(options) {
|
||||
this.filePath = options.filePath;
|
||||
this.repo = NpmciEnv.repo.user + '/' + NpmciEnv.repo.repo;
|
||||
this.version = helpers.dockerFileVersion(plugins.path.parse(options.filePath).base);
|
||||
this.cleanTag = this.repo + ':' + this.version;
|
||||
this.buildTag = this.cleanTag;
|
||||
this.containerName = 'dockerfile-' + this.version;
|
||||
if (options.filePath && options.read) {
|
||||
this.content = plugins.smartfile.fs.toStringSync(plugins.path.resolve(options.filePath));
|
||||
}
|
||||
this.baseImage = helpers.dockerBaseImage(this.content);
|
||||
this.localBaseImageDependent = false;
|
||||
}
|
||||
/**
|
||||
* builds the Dockerfile
|
||||
*/
|
||||
build() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
plugins.beautylog.info('now building Dockerfile for ' + this.cleanTag);
|
||||
let buildCommand = `docker build -t ${this.buildTag} -f ${this.filePath} .`;
|
||||
yield npmci_bash_1.bash(buildCommand);
|
||||
return;
|
||||
});
|
||||
}
|
||||
/**
|
||||
* pushes the Dockerfile to a registry
|
||||
*/
|
||||
push(dockerRegistryArg, versionSuffix = null) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let pushTag = helpers.getDockerTagString(dockerRegistryArg.registryUrl, this.repo, this.version, versionSuffix);
|
||||
yield npmci_bash_1.bash(`docker tag ${this.buildTag} ${pushTag}`);
|
||||
yield npmci_bash_1.bash(`docker push ${pushTag}`);
|
||||
});
|
||||
}
|
||||
/**
|
||||
* pulls the Dockerfile from a registry
|
||||
*/
|
||||
pull(registryArg, versionSuffixArg = null) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let pullTag = helpers.getDockerTagString(registryArg.registryUrl, this.repo, this.version, versionSuffixArg);
|
||||
yield npmci_bash_1.bash(`docker tag ${pullTag} ${this.buildTag}`);
|
||||
});
|
||||
}
|
||||
/**
|
||||
* tests the Dockerfile;
|
||||
*/
|
||||
test() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let testFile = plugins.path.join(paths.NpmciTestDir, 'test_' + this.version + '.sh');
|
||||
let testFileExists = plugins.smartfile.fs.fileExistsSync(testFile);
|
||||
if (testFileExists) {
|
||||
// run tests
|
||||
yield npmci_bash_1.bash('docker run --name npmci_test_container ' + this.buildTag + ' mkdir /npmci_test');
|
||||
yield npmci_bash_1.bash('docker cp ' + testFile + ' npmci_test_container:/npmci_test/test.sh');
|
||||
yield npmci_bash_1.bash('docker commit npmci_test_container npmci_test_image');
|
||||
yield npmci_bash_1.bash('docker run npmci_test_image sh /npmci_test/test.sh');
|
||||
yield npmci_bash_1.bash('docker rm npmci_test_container');
|
||||
yield npmci_bash_1.bash('docker rmi --force npmci_test_image');
|
||||
}
|
||||
else {
|
||||
plugins.beautylog.warn('skipping tests for ' + this.cleanTag + ' because no testfile was found!');
|
||||
}
|
||||
});
|
||||
}
|
||||
/**
|
||||
* gets the id of a Dockerfile
|
||||
*/
|
||||
getId() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
let containerId = yield npmci_bash_1.bash('docker inspect --type=image --format=\"{{.Id}}\" ' + this.buildTag);
|
||||
return containerId;
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.Dockerfile = Dockerfile;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kLmNsYXNzZXMuZG9ja2VyZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL21vZF9kb2NrZXIvbW9kLmNsYXNzZXMuZG9ja2VyZmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEseUNBQXdDO0FBQ3hDLHlDQUF3QztBQUN4Qyw4Q0FBb0M7QUFDcEMsd0NBQXVDO0FBR3ZDLHlDQUF3QztBQUV4Qzs7R0FFRztBQUNIO0lBV0UsWUFBYSxPQUE4RTtRQUN6RixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUE7UUFDaEMsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUE7UUFDekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ25GLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtRQUM5QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7UUFFN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtRQUNqRCxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO1FBQzFGLENBQUM7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
|
||||
13
dist/mod_docker/mod.classes.dockerregistry.d.ts
vendored
Normal file
13
dist/mod_docker/mod.classes.dockerregistry.d.ts
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
export interface IDockerRegistryConstructorOptions {
|
||||
registryUrl: string;
|
||||
username: string;
|
||||
password: string;
|
||||
}
|
||||
export declare class DockerRegistry {
|
||||
registryUrl: string;
|
||||
username: string;
|
||||
password: string;
|
||||
constructor(optionsArg: IDockerRegistryConstructorOptions);
|
||||
static fromEnvString(envString: string): DockerRegistry;
|
||||
login(): Promise<void>;
|
||||
}
|
||||
50
dist/mod_docker/mod.classes.dockerregistry.js
vendored
Normal file
50
dist/mod_docker/mod.classes.dockerregistry.js
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
"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("./mod.plugins");
|
||||
const npmci_bash_1 = require("../npmci.bash");
|
||||
class DockerRegistry {
|
||||
constructor(optionsArg) {
|
||||
this.registryUrl = optionsArg.registryUrl;
|
||||
this.username = optionsArg.username;
|
||||
this.password = optionsArg.password;
|
||||
plugins.beautylog.info(`created DockerRegistry for ${this.registryUrl}`);
|
||||
}
|
||||
static fromEnvString(envString) {
|
||||
let dockerRegexResultArray = envString.split('|');
|
||||
if (dockerRegexResultArray.length !== 3) {
|
||||
plugins.beautylog.error('malformed docker env var...');
|
||||
process.exit(1);
|
||||
return;
|
||||
}
|
||||
let registryUrl = dockerRegexResultArray[0];
|
||||
let username = dockerRegexResultArray[1];
|
||||
let password = dockerRegexResultArray[2];
|
||||
return new DockerRegistry({
|
||||
registryUrl: registryUrl,
|
||||
username: username,
|
||||
password: password
|
||||
});
|
||||
}
|
||||
login() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (this.registryUrl === 'docker.io') {
|
||||
yield npmci_bash_1.bash(`docker login -u ${this.username} -p ${this.password}`);
|
||||
plugins.beautylog.info('Logged in to standard docker hub');
|
||||
}
|
||||
else {
|
||||
yield npmci_bash_1.bash(`docker login -u ${this.username} -p ${this.password} ${this.registryUrl}`);
|
||||
}
|
||||
plugins.beautylog.ok(`docker authenticated for ${this.registryUrl}!`);
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.DockerRegistry = DockerRegistry;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kLmNsYXNzZXMuZG9ja2VycmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfZG9ja2VyL21vZC5jbGFzc2VzLmRvY2tlcnJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSx5Q0FBd0M7QUFDeEMsOENBQW9DO0FBUXBDO0lBSUUsWUFBYSxVQUE2QztRQUN4RCxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUE7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFBO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQTtRQUNuQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7SUFDMUUsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUUsU0FBaUI7UUFDckMsSUFBSSxzQkFBc0IsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2pELEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUE7WUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNmLE1BQU0sQ0FBQTtRQUNSLENBQUM7UUFDRCxJQUFJLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMzQyxJQUFJLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN4QyxJQUFJLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN4QyxNQUFNLENBQUMsSUFBSSxjQUFjLENBQUM7WUFDeEIsV0FBVyxFQUFFLFdBQVc7WUFDeEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVLLEtBQUs7O1lBQ1QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLGlCQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxRQUFRLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7Z0JBQ2xFLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUE7WUFDNUQsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNOLE1BQU0saUJBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLFFBQVEsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO1lBQ3hGLENBQUM7WUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyw0QkFBNEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUE7UUFDdkUsQ0FBQztLQUFBO0NBQ0Y7QUFyQ0Qsd0NBcUNDIn0=
|
||||
9
dist/mod_docker/mod.classes.registrystorage.d.ts
vendored
Normal file
9
dist/mod_docker/mod.classes.registrystorage.d.ts
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
import { Objectmap } from 'lik';
|
||||
import { DockerRegistry } from './mod.classes.dockerregistry';
|
||||
export declare class RegistryStorage {
|
||||
objectMap: Objectmap<DockerRegistry>;
|
||||
constructor();
|
||||
addRegistry(registryArg: DockerRegistry): void;
|
||||
getRegistryByUrl(registryUrlArg: string): DockerRegistry;
|
||||
loginAll(): Promise<void>;
|
||||
}
|
||||
36
dist/mod_docker/mod.classes.registrystorage.js
vendored
Normal file
36
dist/mod_docker/mod.classes.registrystorage.js
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
"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("./mod.plugins");
|
||||
const lik_1 = require("lik");
|
||||
class RegistryStorage {
|
||||
constructor() {
|
||||
this.objectMap = new lik_1.Objectmap();
|
||||
// Nothing here
|
||||
}
|
||||
addRegistry(registryArg) {
|
||||
this.objectMap.add(registryArg);
|
||||
}
|
||||
getRegistryByUrl(registryUrlArg) {
|
||||
return this.objectMap.find(registryArg => {
|
||||
return registryArg.registryUrl === registryUrlArg;
|
||||
});
|
||||
}
|
||||
loginAll() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
yield this.objectMap.forEach((registryArg) => __awaiter(this, void 0, void 0, function* () {
|
||||
yield registryArg.login();
|
||||
}));
|
||||
plugins.beautylog.success('logged in successfully into all available DockerRegistries!');
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.RegistryStorage = RegistryStorage;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kLmNsYXNzZXMucmVnaXN0cnlzdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbW9kX2RvY2tlci9tb2QuY2xhc3Nlcy5yZWdpc3RyeXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLHlDQUF3QztBQUN4Qyw2QkFBK0I7QUFJL0I7SUFFRTtRQURBLGNBQVMsR0FBRyxJQUFJLGVBQVMsRUFBa0IsQ0FBQTtRQUV6QyxlQUFlO0lBQ2pCLENBQUM7SUFFRCxXQUFXLENBQUUsV0FBMkI7UUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDakMsQ0FBQztJQUVELGdCQUFnQixDQUFFLGNBQXNCO1FBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQ3BDLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxLQUFLLGNBQWMsQ0FBQTtRQUNuRCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFSyxRQUFROztZQUNaLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBTSxXQUFXO2dCQUM1QyxNQUFNLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUMzQixDQUFDLENBQUEsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsNkRBQTZELENBQUMsQ0FBQTtRQUMxRixDQUFDO0tBQUE7Q0FDRjtBQXRCRCwwQ0FzQkMifQ==
|
||||
42
dist/mod_docker/mod.helpers.d.ts
vendored
Normal file
42
dist/mod_docker/mod.helpers.d.ts
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
import { Dockerfile } from './mod.classes.dockerfile';
|
||||
/**
|
||||
* creates instance of class Dockerfile for all Dockerfiles in cwd
|
||||
* @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[]>;
|
||||
/**
|
||||
* 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[]>;
|
||||
/**
|
||||
* returns a version for a docker file
|
||||
* @execution SYNC
|
||||
*/
|
||||
export declare let dockerFileVersion: (dockerfileNameArg: string) => string;
|
||||
/**
|
||||
* returns the docker base image for a Dockerfile
|
||||
*/
|
||||
export declare let dockerBaseImage: (dockerfileContentArg: string) => string;
|
||||
/**
|
||||
* returns the docker tag
|
||||
*/
|
||||
export declare let getDockerTagString: (registryArg: string, repoArg: string, versionArg: string, suffixArg?: string) => string;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
export declare let cleanTagsArrayFunction: (dockerfileArrayArg: Dockerfile[], trackingArrayArg: Dockerfile[]) => string[];
|
||||
152
dist/mod_docker/mod.helpers.js
vendored
Normal file
152
dist/mod_docker/mod.helpers.js
vendored
Normal file
File diff suppressed because one or more lines are too long
6
dist/mod_npm/index.js
vendored
6
dist/mod_npm/index.js
vendored
@@ -28,11 +28,11 @@ exports.handleCli = (argvArg) => __awaiter(this, void 0, void 0, function* () {
|
||||
yield exports.test();
|
||||
break;
|
||||
default:
|
||||
plugins.beautylog.error(`>>npmci node ...<< action >>${action}<< not supported`);
|
||||
plugins.beautylog.error(`>>npmci npm ...<< action >>${action}<< not supported`);
|
||||
}
|
||||
}
|
||||
else {
|
||||
plugins.beautylog.log(`>>npmci node ...<< cli arguments invalid... Please read the documentation.`);
|
||||
plugins.beautylog.log(`>>npmci npm ...<< cli arguments invalid... Please read the documentation.`);
|
||||
}
|
||||
});
|
||||
/**
|
||||
@@ -65,4 +65,4 @@ exports.test = () => __awaiter(this, void 0, void 0, function* () {
|
||||
plugins.beautylog.info('now starting tests:');
|
||||
yield npmci_bash_1.bash('yarn test');
|
||||
});
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfbnBtL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSx5Q0FBd0M7QUFFeEMsOENBS3NCO0FBRXRCOzs7R0FHRztBQUNRLFFBQUEsU0FBUyxHQUFHLENBQU8sT0FBTztJQUNuQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksTUFBTSxHQUFXLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDakMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNmLEtBQUssU0FBUztnQkFDWixNQUFNLE9BQU8sRUFBRSxDQUFBO2dCQUNmLEtBQUssQ0FBQTtZQUNQLEtBQUssU0FBUztnQkFDWixNQUFNLE9BQU8sRUFBRSxDQUFBO2dCQUNmLEtBQUssQ0FBQTtZQUNQLEtBQUssTUFBTTtnQkFDVCxNQUFNLFlBQUksRUFBRSxDQUFBO2dCQUNaLEtBQUssQ0FBQTtZQUNQO2dCQUNFLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLCtCQUErQixNQUFNLGtCQUFrQixDQUFDLENBQUE7UUFDcEYsQ0FBQztJQUNILENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDRFQUE0RSxDQUFDLENBQUE7SUFDckcsQ0FBQztBQUNILENBQUMsQ0FBQSxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxJQUFJLE9BQU8sR0FBRztJQUNaLElBQUksV0FBVyxHQUFXLG1DQUFtQyxDQUFBO0lBQzdELElBQUksUUFBUSxHQUFXLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFBO0lBQ2xELElBQUksZUFBZSxHQUFXLFdBQVcsR0FBRyxRQUFRLENBQUE7SUFDcEQsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNiLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFDOUMsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ04sT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQTtRQUMxRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pCLENBQUM7SUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFBO0lBQ2xFLE1BQU0sQ0FBQTtBQUNSLENBQUMsQ0FBQSxDQUFBO0FBRUQsSUFBSSxPQUFPLEdBQUc7SUFDWixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO0lBQ3RELEVBQUUsQ0FBQyxDQUFDLE1BQU0sMEJBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0saUJBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDTixNQUFNLGlCQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDM0IsQ0FBQztBQUNILENBQUMsQ0FBQSxDQUFBO0FBRVUsUUFBQSxJQUFJLEdBQUc7SUFDaEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUM3QyxNQUFNLGlCQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7QUFDekIsQ0FBQyxDQUFBLENBQUEifQ==
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfbnBtL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSx5Q0FBd0M7QUFFeEMsOENBS3NCO0FBRXRCOzs7R0FHRztBQUNRLFFBQUEsU0FBUyxHQUFHLENBQU8sT0FBTztJQUNuQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksTUFBTSxHQUFXLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDakMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNmLEtBQUssU0FBUztnQkFDWixNQUFNLE9BQU8sRUFBRSxDQUFBO2dCQUNmLEtBQUssQ0FBQTtZQUNQLEtBQUssU0FBUztnQkFDWixNQUFNLE9BQU8sRUFBRSxDQUFBO2dCQUNmLEtBQUssQ0FBQTtZQUNQLEtBQUssTUFBTTtnQkFDVCxNQUFNLFlBQUksRUFBRSxDQUFBO2dCQUNaLEtBQUssQ0FBQTtZQUNQO2dCQUNFLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLDhCQUE4QixNQUFNLGtCQUFrQixDQUFDLENBQUE7UUFDbkYsQ0FBQztJQUNILENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDJFQUEyRSxDQUFDLENBQUE7SUFDcEcsQ0FBQztBQUNILENBQUMsQ0FBQSxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxJQUFJLE9BQU8sR0FBRztJQUNaLElBQUksV0FBVyxHQUFXLG1DQUFtQyxDQUFBO0lBQzdELElBQUksUUFBUSxHQUFXLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFBO0lBQ2xELElBQUksZUFBZSxHQUFXLFdBQVcsR0FBRyxRQUFRLENBQUE7SUFDcEQsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNiLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFDOUMsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ04sT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQTtRQUMxRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pCLENBQUM7SUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFBO0lBQ2xFLE1BQU0sQ0FBQTtBQUNSLENBQUMsQ0FBQSxDQUFBO0FBRUQsSUFBSSxPQUFPLEdBQUc7SUFDWixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO0lBQ3RELEVBQUUsQ0FBQyxDQUFDLE1BQU0sMEJBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0saUJBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDTixNQUFNLGlCQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDM0IsQ0FBQztBQUNILENBQUMsQ0FBQSxDQUFBO0FBRVUsUUFBQSxJQUFJLEdBQUc7SUFDaEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUM3QyxNQUFNLGlCQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7QUFDekIsQ0FBQyxDQUFBLENBQUEifQ==
|
||||
11
dist/npmci.cli.js
vendored
11
dist/npmci.cli.js
vendored
@@ -12,7 +12,6 @@ const plugins = require("./npmci.plugins");
|
||||
const paths = require("./npmci.paths");
|
||||
let npmciInfo = new plugins.projectinfo.ProjectinfoNpm(paths.NpmciPackageRoot);
|
||||
plugins.beautylog.log('npmci version: ' + npmciInfo.version);
|
||||
const NpmciEnv = require("./npmci.env");
|
||||
const npmciMods = require("./npmci.mods");
|
||||
let smartcli = new plugins.smartcli.Smartcli();
|
||||
smartcli.addVersion(npmciInfo.version);
|
||||
@@ -21,7 +20,6 @@ smartcli.addCommand('clean')
|
||||
.then((argv) => __awaiter(this, void 0, void 0, function* () {
|
||||
let modClean = yield npmciMods.modClean.load();
|
||||
yield modClean.clean();
|
||||
yield NpmciEnv.configStore();
|
||||
})).catch(err => {
|
||||
console.log(err);
|
||||
process.exit(1);
|
||||
@@ -31,7 +29,6 @@ smartcli.addCommand('cloudflare')
|
||||
.then((argvArg) => __awaiter(this, void 0, void 0, function* () {
|
||||
let modPurge = yield npmciMods.modCloudflare.load();
|
||||
yield modPurge.handleCli(argvArg);
|
||||
yield NpmciEnv.configStore();
|
||||
})).catch(err => {
|
||||
console.log(err);
|
||||
});
|
||||
@@ -40,7 +37,6 @@ smartcli.addCommand('command')
|
||||
.then((argv) => __awaiter(this, void 0, void 0, function* () {
|
||||
let modCommand = yield npmciMods.modCommand.load();
|
||||
yield modCommand.command();
|
||||
yield NpmciEnv.configStore();
|
||||
})).catch(err => {
|
||||
console.log(err);
|
||||
process.exit(1);
|
||||
@@ -50,7 +46,6 @@ smartcli.addCommand('docker')
|
||||
.then((argvArg) => __awaiter(this, void 0, void 0, function* () {
|
||||
let modDocker = yield npmciMods.modDocker.load();
|
||||
yield modDocker.handleCli(argvArg);
|
||||
NpmciEnv.configStore();
|
||||
})).catch(err => {
|
||||
console.log(err);
|
||||
process.exit(1);
|
||||
@@ -60,7 +55,6 @@ smartcli.addCommand('node')
|
||||
.then((argvArg) => __awaiter(this, void 0, void 0, function* () {
|
||||
let modNode = yield npmciMods.modNode.load();
|
||||
yield modNode.handleCli(argvArg);
|
||||
yield NpmciEnv.configStore();
|
||||
})).catch(err => {
|
||||
console.log(err);
|
||||
});
|
||||
@@ -69,7 +63,6 @@ smartcli.addCommand('npm')
|
||||
.then((argvArg) => __awaiter(this, void 0, void 0, function* () {
|
||||
let modNpm = yield npmciMods.modNpm.load();
|
||||
yield modNpm.handleCli(argvArg);
|
||||
yield NpmciEnv.configStore();
|
||||
})).catch(err => {
|
||||
console.log(err);
|
||||
});
|
||||
@@ -78,7 +71,6 @@ smartcli.addCommand('ssh')
|
||||
.then((argvArg) => __awaiter(this, void 0, void 0, function* () {
|
||||
let modSsh = yield npmciMods.modSsh.load();
|
||||
yield modSsh.handleCli(argvArg);
|
||||
yield NpmciEnv.configStore();
|
||||
})).catch(err => {
|
||||
console.log(err);
|
||||
process.exit(1);
|
||||
@@ -88,10 +80,9 @@ smartcli.addCommand('trigger')
|
||||
.then((argv) => __awaiter(this, void 0, void 0, function* () {
|
||||
let modTrigger = yield npmciMods.modTrigger.load();
|
||||
yield modTrigger.trigger();
|
||||
yield NpmciEnv.configStore();
|
||||
})).catch(err => {
|
||||
console.log(err);
|
||||
process.exit(1);
|
||||
});
|
||||
smartcli.startParse();
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtY2kuY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSwyQ0FBMEM7QUFDMUMsdUNBQXNDO0FBQ3RDLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUE7QUFDOUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBRTVELHdDQUF1QztBQUV2QywwQ0FBeUM7QUFFekMsSUFBSSxRQUFRLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFBO0FBQzlDLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBRXRDLFFBQVE7QUFDUixRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztLQUN6QixJQUFJLENBQUMsQ0FBTyxJQUFJO0lBQ2YsSUFBSSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzlDLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ3RCLE1BQU0sUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBQzlCLENBQUMsQ0FBQSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUc7SUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDakIsQ0FBQyxDQUFDLENBQUE7QUFFSixhQUFhO0FBQ2IsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7S0FDaEMsSUFBSSxDQUFDLENBQU8sT0FBTztJQUNsQixJQUFJLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDbkQsTUFBTSxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBQzlCLENBQUMsQ0FBQSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUc7SUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ2xCLENBQUMsQ0FBQyxDQUFBO0FBRUYsVUFBVTtBQUNWLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO0tBQzNCLElBQUksQ0FBQyxDQUFPLElBQUk7SUFDZixJQUFJLFVBQVUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDbEQsTUFBTSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDMUIsTUFBTSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUE7QUFDOUIsQ0FBQyxDQUFBLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRztJQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNqQixDQUFDLENBQUMsQ0FBQTtBQUVKLFFBQVE7QUFDUixRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztLQUMxQixJQUFJLENBQUMsQ0FBTSxPQUFPO0lBQ2pCLElBQUksU0FBUyxHQUFHLE1BQU0sU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUNoRCxNQUFNLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDbEMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBQ3hCLENBQUMsQ0FBQSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUc7SUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDakIsQ0FBQyxDQUFDLENBQUE7QUFFSixPQUFPO0FBQ1AsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7S0FDeEIsSUFBSSxDQUFDLENBQU8sT0FBTztJQUNsQixJQUFJLE9BQU8sR0FBRyxNQUFNLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDNUMsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2hDLE1BQU0sUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBQzlCLENBQUMsQ0FBQSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUc7SUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ2xCLENBQUMsQ0FBQyxDQUFBO0FBRUosTUFBTTtBQUNOLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO0tBQ3ZCLElBQUksQ0FBQyxDQUFPLE9BQU87SUFDbEIsSUFBSSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzFDLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMvQixNQUFNLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtBQUM5QixDQUFDLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO0lBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNsQixDQUFDLENBQUMsQ0FBQTtBQUVKLFVBQVU7QUFDVixRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztLQUN2QixJQUFJLENBQUMsQ0FBTyxPQUFPO0lBQ2xCLElBQUksTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUMxQyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDL0IsTUFBTSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUE7QUFDOUIsQ0FBQyxDQUFBLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRztJQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNqQixDQUFDLENBQUMsQ0FBQTtBQUVKLFVBQVU7QUFDVixRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztLQUMzQixJQUFJLENBQUMsQ0FBTyxJQUFJO0lBQ2YsSUFBSSxVQUFVLEdBQUcsTUFBTSxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ2xELE1BQU0sVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQzFCLE1BQU0sUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBQzlCLENBQUMsQ0FBQSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUc7SUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDakIsQ0FBQyxDQUFDLENBQUE7QUFFSixRQUFRLENBQUMsVUFBVSxFQUFFLENBQUEifQ==
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtY2kuY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSwyQ0FBMEM7QUFDMUMsdUNBQXNDO0FBQ3RDLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUE7QUFDOUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBSTVELDBDQUF5QztBQUV6QyxJQUFJLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUE7QUFDOUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7QUFFdEMsUUFBUTtBQUNSLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO0tBQ3pCLElBQUksQ0FBQyxDQUFPLElBQUk7SUFDZixJQUFJLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDOUMsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUE7QUFDeEIsQ0FBQyxDQUFBLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRztJQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNqQixDQUFDLENBQUMsQ0FBQTtBQUVKLGFBQWE7QUFDYixRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztLQUNoQyxJQUFJLENBQUMsQ0FBTyxPQUFPO0lBQ2xCLElBQUksUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUNuRCxNQUFNLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FB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
|
||||
22
dist/npmci.env.d.ts
vendored
22
dist/npmci.env.d.ts
vendored
@@ -1,27 +1,5 @@
|
||||
import { GitRepo } from 'smartstring';
|
||||
import { Dockerfile } from './mod_docker/index';
|
||||
/**
|
||||
* a info instance about the git respoitory at cwd :)
|
||||
*/
|
||||
export declare let repo: GitRepo;
|
||||
/**
|
||||
* the build stage
|
||||
*/
|
||||
export declare let buildStage: string;
|
||||
export declare let dockerRegistry: string;
|
||||
export declare let setDockerRegistry: (dockerRegistryArg: string) => void;
|
||||
export declare let dockerFilesBuilt: Dockerfile[];
|
||||
export declare let dockerFiles: Dockerfile[];
|
||||
/**
|
||||
* the config
|
||||
*/
|
||||
export declare let config: {
|
||||
dockerRegistry: any;
|
||||
dockerFilesBuilt: Dockerfile[];
|
||||
dockerFiles: Dockerfile[];
|
||||
project: any;
|
||||
};
|
||||
/**
|
||||
* the configuration store
|
||||
*/
|
||||
export declare let configStore: () => Promise<void>;
|
||||
|
||||
64
dist/npmci.env.js
vendored
64
dist/npmci.env.js
vendored
@@ -1,69 +1,7 @@
|
||||
"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");
|
||||
const smartstring_1 = require("smartstring");
|
||||
if (process.env.CI_REPOSITORY_URL) {
|
||||
exports.repo = new smartstring_1.GitRepo(process.env.CI_REPOSITORY_URL);
|
||||
}
|
||||
/**
|
||||
* the build stage
|
||||
*/
|
||||
exports.buildStage = process.env.CI_BUILD_STAGE;
|
||||
exports.setDockerRegistry = (dockerRegistryArg) => {
|
||||
exports.dockerRegistry = dockerRegistryArg;
|
||||
};
|
||||
exports.dockerFilesBuilt = [];
|
||||
exports.dockerFiles = [];
|
||||
/**
|
||||
* the config
|
||||
*/
|
||||
exports.config = {
|
||||
dockerRegistry: undefined,
|
||||
dockerFilesBuilt: exports.dockerFilesBuilt,
|
||||
dockerFiles: exports.dockerFiles,
|
||||
project: undefined
|
||||
};
|
||||
/**
|
||||
* the configuration store
|
||||
*/
|
||||
exports.configStore = () => __awaiter(this, void 0, void 0, function* () {
|
||||
exports.config.dockerRegistry = exports.dockerRegistry;
|
||||
plugins.smartfile.memory.toFsSync(JSON.stringify(exports.config), paths.NpmciPackageConfig);
|
||||
});
|
||||
/**
|
||||
* load the config in case a previous run has stored it
|
||||
*/
|
||||
let configLoad = () => {
|
||||
// internal config to transfer information in between npmci shell calls
|
||||
try {
|
||||
plugins.lodash.assign(exports.config, plugins.smartfile.fs.toObjectSync(paths.NpmciPackageConfig, 'json'));
|
||||
}
|
||||
catch (err) {
|
||||
exports.configStore();
|
||||
plugins.beautylog.log('config initialized!');
|
||||
}
|
||||
// project config
|
||||
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);
|
||||
};
|
||||
configLoad();
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtY2kuZW52LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSwyQ0FBMEM7QUFDMUMsdUNBQXNDO0FBQ3RDLDZDQUFxQztBQU9yQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUNsQyxZQUFJLEdBQUcsSUFBSSxxQkFBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtBQUNuRCxDQUFDO0FBRUQ7O0dBRUc7QUFDUSxRQUFBLFVBQVUsR0FBVyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQTtBQUkvQyxRQUFBLGlCQUFpQixHQUFHLENBQUMsaUJBQXlCO0lBQ3ZELHNCQUFjLEdBQUcsaUJBQWlCLENBQUE7QUFDcEMsQ0FBQyxDQUFBO0FBQ1UsUUFBQSxnQkFBZ0IsR0FBaUIsRUFBRSxDQUFBO0FBQ25DLFFBQUEsV0FBVyxHQUFpQixFQUFFLENBQUE7QUFFekM7O0dBRUc7QUFDUSxRQUFBLE1BQU0sR0FBRztJQUNsQixjQUFjLEVBQUUsU0FBUztJQUN6QixnQkFBZ0IsRUFBRSx3QkFBZ0I7SUFDbEMsV0FBVyxFQUFFLG1CQUFXO0lBQ3hCLE9BQU8sRUFBRSxTQUFTO0NBQ25CLENBQUE7QUFFRDs7R0FFRztBQUNRLFFBQUEsV0FBVyxHQUFHO0lBQ3ZCLGNBQU0sQ0FBQyxjQUFjLEdBQUcsc0JBQWMsQ0FBQTtJQUN0QyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBTSxDQUFDLEVBQ3RCLEtBQUssQ0FBQyxrQkFBa0IsQ0FDekIsQ0FBQTtBQUNILENBQUMsQ0FBQSxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxJQUFJLFVBQVUsR0FBRztJQUNmLHVFQUF1RTtJQUN2RSxJQUFJLENBQUM7UUFDSCxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFNLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ3BHLENBQUM7SUFBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2IsbUJBQVcsRUFBRSxDQUFBO1FBQ2IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLElBQUksQ0FBQztRQUNILEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDcEIsY0FBTSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQTtZQUN2RixPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNiLGNBQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFBO1FBQ25CLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxDQUFDLENBQUE7SUFDekYsQ0FBQztJQUVELGNBQU0sQ0FBQyxjQUFjLEdBQUcsc0JBQWMsR0FBRyxjQUFNLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN6RSxjQUFNLENBQUMsZ0JBQWdCLEdBQUcsd0JBQWdCLEdBQUcsY0FBTSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNqRixDQUFDLENBQUE7QUFDRCxVQUFVLEVBQUUsQ0FBQSJ9
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtY2kuZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvbnBtY2kuZW52LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsNkNBQXFDO0FBT3JDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLFlBQUksR0FBRyxJQUFJLHFCQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0FBQ25ELENBQUMifQ==
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "npmci",
|
||||
"version": "3.0.0",
|
||||
"version": "3.0.4",
|
||||
"description": "node and docker in gitlab ci on steroids",
|
||||
"main": "dist/index.js",
|
||||
"typings": "dist/index.d.ts",
|
||||
@@ -33,6 +33,7 @@
|
||||
"cflare": "^1.0.5",
|
||||
"gulp": "^3.9.1",
|
||||
"gulp-function": "^2.2.9",
|
||||
"lik": "^1.0.40",
|
||||
"lodash": "^4.17.4",
|
||||
"npmextra": "^2.0.9",
|
||||
"projectinfo": "^3.0.2",
|
||||
@@ -42,7 +43,7 @@
|
||||
"smartdelay": "^1.0.3",
|
||||
"smartfile": "^4.2.20",
|
||||
"smartmonitor": "^1.0.3",
|
||||
"smartparam": "^1.0.1",
|
||||
"smartparam": "^1.0.2",
|
||||
"smartq": "^1.1.6",
|
||||
"smartshell": "^1.0.13",
|
||||
"smartsocket": "^1.1.10",
|
||||
|
||||
23
test/test.ts
23
test/test.ts
@@ -1,10 +1,19 @@
|
||||
import { tap, expect } from 'tapbundle'
|
||||
import * as path from 'path'
|
||||
|
||||
// Setup test
|
||||
process.env.NPMTS_TEST = 'true'
|
||||
|
||||
// set up environment
|
||||
process.env.CI_REPOSITORY_URL = 'https://yyyyyy:xxxxxxxx@gitlab.com/mygroup/myrepo.git'
|
||||
process.env.CI_BUILD_TOKEN = 'kjlkjfiudofiufs'
|
||||
|
||||
// Docker
|
||||
process.env.NPMCI_LOGIN_DOCKER = 'docker.io|someuser|somepass'
|
||||
|
||||
// SSH env
|
||||
process.env.NPMCI_SSHKEY_1 = 'hostString|somePrivKey|##'
|
||||
process.env.NPMTS_TEST = 'true'
|
||||
|
||||
process.cwd = () => {
|
||||
return path.join(__dirname, 'assets/')
|
||||
}
|
||||
@@ -33,7 +42,7 @@ tap.test('should return valid Dockerfiles', async () => {
|
||||
})
|
||||
|
||||
tap.test('should read a directory of Dockerfiles', async () => {
|
||||
return npmciModDocker.readDockerfiles()
|
||||
return npmciModDocker.helpers.readDockerfiles()
|
||||
.then(async (readDockerfilesArrayArg: npmciModDocker.Dockerfile[]) => {
|
||||
sortableArray = readDockerfilesArrayArg
|
||||
return expect(readDockerfilesArrayArg[1].version).to.equal('sometag1')
|
||||
@@ -41,7 +50,7 @@ tap.test('should read a directory of Dockerfiles', async () => {
|
||||
})
|
||||
|
||||
tap.test('should sort an array of Dockerfiles', async () => {
|
||||
return npmciModDocker.sortDockerfiles(sortableArray)
|
||||
return npmciModDocker.helpers.sortDockerfiles(sortableArray)
|
||||
.then(async (sortedArrayArg: npmciModDocker.Dockerfile[]) => {
|
||||
console.log(sortedArrayArg)
|
||||
})
|
||||
@@ -74,11 +83,11 @@ tap.test('should test dockerfiles', async () => {
|
||||
})
|
||||
})
|
||||
|
||||
tap.test('should prepare docker daemon', async () => {
|
||||
tap.test('should login docker daemon', async () => {
|
||||
return await npmciModDocker.handleCli({
|
||||
_: [
|
||||
'docker',
|
||||
'prepare'
|
||||
'login'
|
||||
]
|
||||
})
|
||||
})
|
||||
@@ -129,8 +138,4 @@ tap.test('reset paths', async () => {
|
||||
}
|
||||
})
|
||||
|
||||
tap.test('', async () => {
|
||||
await npmciEnv.configStore()
|
||||
})
|
||||
|
||||
tap.start()
|
||||
|
||||
@@ -11,10 +11,10 @@ export let handleCli = async (argvArg) => {
|
||||
let action: string = argvArg._[1]
|
||||
switch (action) {
|
||||
default:
|
||||
plugins.beautylog.error(`>>npmci node ...<< action >>${action}<< not supported`)
|
||||
plugins.beautylog.error(`>>npmci cloudflare ...<< action >>${action}<< not supported`)
|
||||
}
|
||||
} else {
|
||||
plugins.beautylog.log(`>>npmci node ...<< cli arguments invalid... Please read the documentation.`)
|
||||
plugins.beautylog.log(`>>npmci cloudflare ...<< cli arguments invalid... Please read the documentation.`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,22 @@
|
||||
import * as plugins from './mod.plugins'
|
||||
import * as paths from '../npmci.paths'
|
||||
import * as NpmciEnv from '../npmci.env'
|
||||
import { bash } from '../npmci.bash'
|
||||
|
||||
import * as helpers from './mod.helpers'
|
||||
|
||||
// classes
|
||||
import { Dockerfile } from './mod.classes.dockerfile'
|
||||
import { DockerRegistry } from './mod.classes.dockerregistry'
|
||||
import { RegistryStorage } from './mod.classes.registrystorage'
|
||||
|
||||
// instances
|
||||
let npmciRegistryStorage = new RegistryStorage()
|
||||
|
||||
export {
|
||||
Dockerfile,
|
||||
helpers
|
||||
}
|
||||
|
||||
export let modArgvArg // will be set through the build command
|
||||
|
||||
/**
|
||||
@@ -17,360 +31,108 @@ export let handleCli = async (argvArg) => {
|
||||
case 'build':
|
||||
await build()
|
||||
break
|
||||
case 'prepare':
|
||||
await prepare()
|
||||
case 'login':
|
||||
await login()
|
||||
break
|
||||
case 'test':
|
||||
await test()
|
||||
break
|
||||
case 'push':
|
||||
await push(argvArg)
|
||||
break
|
||||
case 'pull':
|
||||
await pull(argvArg)
|
||||
break
|
||||
default:
|
||||
plugins.beautylog.error(`>>npmci node ...<< action >>${action}<< not supported`)
|
||||
plugins.beautylog.error(`>>npmci docker ...<< action >>${action}<< not supported`)
|
||||
}
|
||||
} else {
|
||||
plugins.beautylog.log(`>>npmci node ...<< cli arguments invalid... Please read the documentation.`)
|
||||
plugins.beautylog.log(`>>npmci docker ...<< cli arguments invalid... Please read the documentation.`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* logs in docker
|
||||
*/
|
||||
export let prepare = async () => {
|
||||
NpmciEnv.setDockerRegistry('docker.io') // TODO: checkup why we set this here
|
||||
|
||||
// handle registries
|
||||
plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_LOGIN_DOCKER*', async (envString) => {
|
||||
let dockerRegexResultArray = envString.split('|')
|
||||
if (dockerRegexResultArray.length !== 3) {
|
||||
plugins.beautylog.error('malformed docker env var...')
|
||||
process.exit(1)
|
||||
return
|
||||
}
|
||||
let registry = dockerRegexResultArray[0]
|
||||
let username = dockerRegexResultArray[1]
|
||||
let password = dockerRegexResultArray[2]
|
||||
if (registry === 'docker.io') {
|
||||
await bash(`docker login -u ${username} -p ${password}`)
|
||||
plugins.beautylog.info('Logged in to standard docker hub')
|
||||
} else {
|
||||
await bash(`docker login -u ${username} -p ${password} ${registry}`)
|
||||
}
|
||||
plugins.beautylog.success(`docker authenticated for ${registry}!`)
|
||||
})
|
||||
|
||||
// Always login to GitLab Registry
|
||||
if (!process.env.CI_BUILD_TOKEN || process.env.CI_BUILD_TOKEN === '') {
|
||||
plugins.beautylog.error('No registry token specified by gitlab!')
|
||||
return
|
||||
}
|
||||
await bash(`docker login -u gitlab-ci-token -p ${process.env.CI_BUILD_TOKEN} registry.gitlab.com`)
|
||||
plugins.beautylog.success(`docker authenticated for registry.gitlab.com!`)
|
||||
return
|
||||
}
|
||||
|
||||
/**
|
||||
* builds a cwd of Dockerfiles by triggering a promisechain
|
||||
*/
|
||||
export let build = async () => {
|
||||
await prepare()
|
||||
plugins.beautylog.log('now building Dockerfiles...')
|
||||
await readDockerfiles()
|
||||
.then(sortDockerfiles)
|
||||
.then(mapDockerfiles)
|
||||
.then(buildDockerfiles)
|
||||
}
|
||||
|
||||
export let push = async () => {
|
||||
await readDockerfiles()
|
||||
.then(sortDockerfiles)
|
||||
.then(mapDockerfiles)
|
||||
.then(pushDockerfiles)
|
||||
}
|
||||
|
||||
export let pull = async () => {
|
||||
return await readDockerfiles()
|
||||
.then(pullDockerfileImages)
|
||||
}
|
||||
|
||||
export let test = async () => {
|
||||
return await readDockerfiles()
|
||||
.then(testDockerfiles)
|
||||
await helpers.readDockerfiles()
|
||||
.then(helpers.sortDockerfiles)
|
||||
.then(helpers.mapDockerfiles)
|
||||
.then(helpers.buildDockerfiles)
|
||||
}
|
||||
|
||||
/**
|
||||
* creates instance of class Dockerfile for all Dockerfiles in cwd
|
||||
* @returns Promise<Dockerfile[]>
|
||||
* login to the DockerRegistries
|
||||
*/
|
||||
export let readDockerfiles = async (): Promise<Dockerfile[]> => {
|
||||
let fileTree = await plugins.smartfile.fs.listFileTree(paths.cwd, 'Dockerfile*')
|
||||
export let login = async () => {
|
||||
await prepare()
|
||||
await npmciRegistryStorage.loginAll()
|
||||
}
|
||||
|
||||
// create the Dockerfile array
|
||||
let readDockerfilesArray: Dockerfile[] = []
|
||||
plugins.beautylog.info(`found ${fileTree.length} Dockerfiles:`)
|
||||
console.log(fileTree)
|
||||
for (let dockerfilePath of fileTree) {
|
||||
let myDockerfile = new Dockerfile({
|
||||
filePath: dockerfilePath,
|
||||
read: true
|
||||
/**
|
||||
* logs in docker
|
||||
*/
|
||||
export let prepare = async () => {
|
||||
// Always login to GitLab Registry
|
||||
if (!process.env.CI_BUILD_TOKEN || process.env.CI_BUILD_TOKEN === '') {
|
||||
plugins.beautylog.error('No registry token specified by gitlab!')
|
||||
process.exit(1)
|
||||
}
|
||||
npmciRegistryStorage.addRegistry(new DockerRegistry({
|
||||
registryUrl: 'registry.gitlab.com',
|
||||
username: 'gitlab-ci-token',
|
||||
password: process.env.CI_BUILD_TOKEN
|
||||
}))
|
||||
|
||||
// handle registries
|
||||
await plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_LOGIN_DOCKER*', async (envString) => {
|
||||
npmciRegistryStorage.addRegistry(
|
||||
DockerRegistry.fromEnvString(envString)
|
||||
)
|
||||
})
|
||||
readDockerfilesArray.push(myDockerfile)
|
||||
}
|
||||
|
||||
return readDockerfilesArray
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* sorts Dockerfiles into a dependency chain
|
||||
* @param sortableArrayArg an array of instances of class Dockerfile
|
||||
* @returns Promise<Dockerfile[]>
|
||||
*/
|
||||
export let sortDockerfiles = (sortableArrayArg: Dockerfile[]): Promise<Dockerfile[]> => {
|
||||
let done = plugins.q.defer<Dockerfile[]>()
|
||||
plugins.beautylog.info('sorting Dockerfiles:')
|
||||
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) {
|
||||
let counter = 1
|
||||
for (let dockerfile of sortedArray) {
|
||||
plugins.beautylog.log(`tag ${counter}: -> ${dockerfile.cleanTag}`)
|
||||
counter++
|
||||
}
|
||||
done.resolve(sortedArray)
|
||||
} else if (sorterFunctionCounter < 10) {
|
||||
sorterFunctionCounter++
|
||||
sorterFunction()
|
||||
}
|
||||
}
|
||||
sorterFunction()
|
||||
return done.promise
|
||||
}
|
||||
|
||||
/**
|
||||
* maps local Dockerfiles dependencies to the correspoding Dockerfile class instances
|
||||
*/
|
||||
export let mapDockerfiles = async (sortedArray: Dockerfile[]): Promise<Dockerfile[]> => {
|
||||
sortedArray.forEach((dockerfileArg) => {
|
||||
if (dockerfileArg.localBaseImageDependent) {
|
||||
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[]) => {
|
||||
let stageArg = (function () {
|
||||
if (modArgvArg._ && modArgvArg._.length >= 3) {
|
||||
return modArgvArg._[ 2 ]
|
||||
} else {
|
||||
return NpmciEnv.buildStage
|
||||
}
|
||||
})()
|
||||
for (let dockerfileArg of sortedArrayArg) {
|
||||
await dockerfileArg.push(stageArg)
|
||||
}
|
||||
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 {
|
||||
filePath: string
|
||||
repo: string
|
||||
version: string
|
||||
cleanTag: string
|
||||
buildTag: string
|
||||
gitlabTestTag: string
|
||||
gitlabReleaseTag: string
|
||||
releaseTag: string
|
||||
containerName: string
|
||||
content: string
|
||||
baseImage: string
|
||||
localBaseImageDependent: boolean
|
||||
localBaseDockerfile: Dockerfile
|
||||
constructor(options: { filePath?: string, fileContents?: string | Buffer, read?: boolean }) {
|
||||
this.filePath = options.filePath
|
||||
this.repo = NpmciEnv.repo.user + '/' + NpmciEnv.repo.repo
|
||||
this.version = dockerFileVersion(plugins.path.parse(options.filePath).base)
|
||||
this.cleanTag = this.repo + ':' + this.version
|
||||
this.buildTag = this.cleanTag
|
||||
this.gitlabTestTag = getDockerTagString('docker.io', this.repo, this.version, 'test') // TODO: using docker.io until gitlab is fixed
|
||||
this.gitlabReleaseTag = getDockerTagString('docker.io', this.repo, this.version) // TODO: using docker.io until gitlab is fixed
|
||||
|
||||
// the releaseTag determines where the image gets released
|
||||
this.releaseTag = getDockerTagString('docker.io', this.repo, this.version)
|
||||
|
||||
this.containerName = 'dockerfile-' + this.version
|
||||
if (options.filePath && options.read) {
|
||||
this.content = plugins.smartfile.fs.toStringSync(plugins.path.resolve(options.filePath))
|
||||
}
|
||||
this.baseImage = dockerBaseImage(this.content)
|
||||
this.localBaseImageDependent = false
|
||||
}
|
||||
|
||||
/**
|
||||
* builds the Dockerfile
|
||||
*/
|
||||
async build () {
|
||||
plugins.beautylog.info('now building Dockerfile for ' + this.cleanTag)
|
||||
let buildCommand = `docker build -t ${this.buildTag} -f ${this.filePath} .`
|
||||
await bash(buildCommand)
|
||||
NpmciEnv.dockerFilesBuilt.push(this)
|
||||
return
|
||||
}
|
||||
|
||||
/**
|
||||
* pushes the Dockerfile to a registry
|
||||
*/
|
||||
async push (stageArg) {
|
||||
await bash(`docker tag ${this.buildTag} ${this.releaseTag}`)
|
||||
await bash(`docker tag ${this.buildTag} ${this.gitlabReleaseTag}`)
|
||||
await bash(`docker tag ${this.buildTag} ${this.gitlabTestTag}`)
|
||||
switch (stageArg) {
|
||||
case 'release':
|
||||
await bash(`docker push ${this.gitlabReleaseTag}`)
|
||||
await bash(`docker push ${this.releaseTag}`)
|
||||
break
|
||||
case 'test':
|
||||
default:
|
||||
await bash(`docker push ${this.gitlabTestTag}`)
|
||||
break
|
||||
export let push = async (argvArg) => {
|
||||
await prepare()
|
||||
let registryUrlArg = argvArg._[ 2 ]
|
||||
let suffix = null
|
||||
if (argvArg._.length >= 4) {
|
||||
suffix = argvArg._[ 3 ]
|
||||
}
|
||||
let dockerfileArray = await helpers.readDockerfiles()
|
||||
.then(helpers.sortDockerfiles)
|
||||
.then(helpers.mapDockerfiles)
|
||||
let localDockerRegistry = npmciRegistryStorage.getRegistryByUrl(registryUrlArg)
|
||||
if (!localDockerRegistry) {
|
||||
plugins.beautylog.error(`Cannot push to registry ${registryUrlArg}, because it was not found in the authenticated registry list.`)
|
||||
process.exit(1)
|
||||
}
|
||||
for (let dockerfile of dockerfileArray) {
|
||||
await dockerfile.push(localDockerRegistry, suffix)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* pulls the Dockerfile from a registry
|
||||
*/
|
||||
async pull (registryArg: string) {
|
||||
await bash(`docker pull ${this.gitlabTestTag}`)
|
||||
await bash(`docker tag ${this.gitlabTestTag} ${this.buildTag}`)
|
||||
export let pull = async (argvArg) => {
|
||||
await prepare()
|
||||
let registryUrlArg = argvArg._[ 2 ]
|
||||
let suffix = null
|
||||
if (argvArg._.length >= 4) {
|
||||
suffix = argvArg._[ 3 ]
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 bash('docker run --name npmci_test_container ' + this.buildTag + ' mkdir /npmci_test')
|
||||
await bash('docker cp ' + testFile + ' npmci_test_container:/npmci_test/test.sh')
|
||||
await bash('docker commit npmci_test_container npmci_test_image')
|
||||
await bash('docker run npmci_test_image sh /npmci_test/test.sh')
|
||||
await bash('docker rm npmci_test_container')
|
||||
await bash('docker rmi --force npmci_test_image')
|
||||
} else {
|
||||
plugins.beautylog.warn('skipping tests for ' + this.cleanTag + ' because no testfile was found!')
|
||||
let localDockerRegistry = npmciRegistryStorage.getRegistryByUrl(registryUrlArg)
|
||||
let dockerfileArray = await helpers.readDockerfiles()
|
||||
.then(helpers.sortDockerfiles)
|
||||
.then(helpers.mapDockerfiles)
|
||||
for (let dockerfile of dockerfileArray) {
|
||||
await dockerfile.pull(localDockerRegistry, suffix)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the id of a Dockerfile
|
||||
*/
|
||||
async getId () {
|
||||
let containerId = await bash('docker inspect --type=image --format=\"{{.Id}}\" ' + this.buildTag)
|
||||
return containerId
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a version for a docker file
|
||||
* @execution SYNC
|
||||
*/
|
||||
export let dockerFileVersion = (dockerfileNameArg: string): string => {
|
||||
let versionString: string
|
||||
let versionRegex = /Dockerfile_([a-zA-Z0-9\.]*)$/
|
||||
let regexResultArray = versionRegex.exec(dockerfileNameArg)
|
||||
if (regexResultArray && regexResultArray.length === 2) {
|
||||
versionString = regexResultArray[ 1 ]
|
||||
} else {
|
||||
versionString = 'latest'
|
||||
}
|
||||
return versionString
|
||||
}
|
||||
|
||||
/**
|
||||
* returns the docker base image for a Dockerfile
|
||||
*/
|
||||
export let dockerBaseImage = function (dockerfileContentArg: string) {
|
||||
let baseImageRegex = /FROM\s([a-zA-z0-9\/\-\:]*)\n?/
|
||||
let regexResultArray = baseImageRegex.exec(dockerfileContentArg)
|
||||
return regexResultArray[ 1 ]
|
||||
}
|
||||
|
||||
/**
|
||||
* returns the docker tag
|
||||
*/
|
||||
export let getDockerTagString = function (registryArg: string, repoArg: string, versionArg: string, suffixArg?: string): string {
|
||||
// determine wether the suffix is needed
|
||||
let version = versionArg
|
||||
if (suffixArg) {
|
||||
version = versionArg + '_' + suffixArg
|
||||
}
|
||||
let tagString = `${registryArg}/${repoArg}:${version}`
|
||||
return tagString
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
export let cleanTagsArrayFunction = function (dockerfileArrayArg: Dockerfile[], trackingArrayArg: Dockerfile[]): string[] {
|
||||
let cleanTagsArray: string[] = []
|
||||
dockerfileArrayArg.forEach(function (dockerfileArg) {
|
||||
if (trackingArrayArg.indexOf(dockerfileArg) === -1) {
|
||||
cleanTagsArray.push(dockerfileArg.cleanTag)
|
||||
}
|
||||
})
|
||||
return cleanTagsArray
|
||||
export let test = async () => {
|
||||
await prepare()
|
||||
return await helpers.readDockerfiles()
|
||||
.then(helpers.testDockerfiles)
|
||||
}
|
||||
|
||||
91
ts/mod_docker/mod.classes.dockerfile.ts
Normal file
91
ts/mod_docker/mod.classes.dockerfile.ts
Normal file
@@ -0,0 +1,91 @@
|
||||
import * as plugins from './mod.plugins'
|
||||
import * as NpmciEnv from '../npmci.env'
|
||||
import { bash } from '../npmci.bash'
|
||||
import * as paths from '../npmci.paths'
|
||||
|
||||
import { DockerRegistry } from './mod.classes.dockerregistry'
|
||||
import * as helpers from './mod.helpers'
|
||||
|
||||
/**
|
||||
* class Dockerfile represents a Dockerfile on disk in npmci
|
||||
*/
|
||||
export class Dockerfile {
|
||||
filePath: string
|
||||
repo: string
|
||||
version: string
|
||||
cleanTag: string
|
||||
buildTag: string
|
||||
containerName: string
|
||||
content: string
|
||||
baseImage: string
|
||||
localBaseImageDependent: boolean
|
||||
localBaseDockerfile: Dockerfile
|
||||
constructor (options: { filePath?: string, fileContents?: string | Buffer, read?: boolean }) {
|
||||
this.filePath = options.filePath
|
||||
this.repo = NpmciEnv.repo.user + '/' + NpmciEnv.repo.repo
|
||||
this.version = helpers.dockerFileVersion(plugins.path.parse(options.filePath).base)
|
||||
this.cleanTag = this.repo + ':' + this.version
|
||||
this.buildTag = this.cleanTag
|
||||
|
||||
this.containerName = 'dockerfile-' + this.version
|
||||
if (options.filePath && options.read) {
|
||||
this.content = plugins.smartfile.fs.toStringSync(plugins.path.resolve(options.filePath))
|
||||
}
|
||||
this.baseImage = helpers.dockerBaseImage(this.content)
|
||||
this.localBaseImageDependent = false
|
||||
}
|
||||
|
||||
/**
|
||||
* builds the Dockerfile
|
||||
*/
|
||||
async build () {
|
||||
plugins.beautylog.info('now building Dockerfile for ' + this.cleanTag)
|
||||
let buildCommand = `docker build -t ${this.buildTag} -f ${this.filePath} .`
|
||||
await bash(buildCommand)
|
||||
return
|
||||
}
|
||||
|
||||
/**
|
||||
* pushes the Dockerfile to a registry
|
||||
*/
|
||||
async push (dockerRegistryArg: DockerRegistry, versionSuffix: string = null) {
|
||||
let pushTag = helpers.getDockerTagString(dockerRegistryArg.registryUrl, this.repo, this.version, versionSuffix)
|
||||
await bash(`docker tag ${this.buildTag} ${pushTag}`)
|
||||
await bash(`docker push ${pushTag}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* pulls the Dockerfile from a registry
|
||||
*/
|
||||
async pull (registryArg: DockerRegistry, versionSuffixArg: string = null) {
|
||||
let pullTag = helpers.getDockerTagString(registryArg.registryUrl,this.repo, this.version, versionSuffixArg)
|
||||
await bash(`docker tag ${pullTag} ${this.buildTag}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 bash('docker run --name npmci_test_container ' + this.buildTag + ' mkdir /npmci_test')
|
||||
await bash('docker cp ' + testFile + ' npmci_test_container:/npmci_test/test.sh')
|
||||
await bash('docker commit npmci_test_container npmci_test_image')
|
||||
await bash('docker run npmci_test_image sh /npmci_test/test.sh')
|
||||
await bash('docker rm npmci_test_container')
|
||||
await bash('docker rmi --force npmci_test_image')
|
||||
} else {
|
||||
plugins.beautylog.warn('skipping tests for ' + this.cleanTag + ' because no testfile was found!')
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the id of a Dockerfile
|
||||
*/
|
||||
async getId () {
|
||||
let containerId = await bash('docker inspect --type=image --format=\"{{.Id}}\" ' + this.buildTag)
|
||||
return containerId
|
||||
}
|
||||
}
|
||||
47
ts/mod_docker/mod.classes.dockerregistry.ts
Normal file
47
ts/mod_docker/mod.classes.dockerregistry.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import * as plugins from './mod.plugins'
|
||||
import { bash } from '../npmci.bash'
|
||||
|
||||
export interface IDockerRegistryConstructorOptions {
|
||||
registryUrl: string,
|
||||
username: string,
|
||||
password: string
|
||||
}
|
||||
|
||||
export class DockerRegistry {
|
||||
registryUrl: string
|
||||
username: string
|
||||
password: string
|
||||
constructor (optionsArg: IDockerRegistryConstructorOptions) {
|
||||
this.registryUrl = optionsArg.registryUrl
|
||||
this.username = optionsArg.username
|
||||
this.password = optionsArg.password
|
||||
plugins.beautylog.info(`created DockerRegistry for ${this.registryUrl}`)
|
||||
}
|
||||
|
||||
static fromEnvString (envString: string): DockerRegistry {
|
||||
let dockerRegexResultArray = envString.split('|')
|
||||
if (dockerRegexResultArray.length !== 3) {
|
||||
plugins.beautylog.error('malformed docker env var...')
|
||||
process.exit(1)
|
||||
return
|
||||
}
|
||||
let registryUrl = dockerRegexResultArray[0]
|
||||
let username = dockerRegexResultArray[1]
|
||||
let password = dockerRegexResultArray[2]
|
||||
return new DockerRegistry({
|
||||
registryUrl: registryUrl,
|
||||
username: username,
|
||||
password: password
|
||||
})
|
||||
}
|
||||
|
||||
async login () {
|
||||
if (this.registryUrl === 'docker.io') {
|
||||
await bash(`docker login -u ${this.username} -p ${this.password}`)
|
||||
plugins.beautylog.info('Logged in to standard docker hub')
|
||||
} else {
|
||||
await bash(`docker login -u ${this.username} -p ${this.password} ${this.registryUrl}`)
|
||||
}
|
||||
plugins.beautylog.ok(`docker authenticated for ${this.registryUrl}!`)
|
||||
}
|
||||
}
|
||||
28
ts/mod_docker/mod.classes.registrystorage.ts
Normal file
28
ts/mod_docker/mod.classes.registrystorage.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import * as plugins from './mod.plugins'
|
||||
import { Objectmap } from 'lik'
|
||||
|
||||
import { DockerRegistry } from './mod.classes.dockerregistry'
|
||||
|
||||
export class RegistryStorage {
|
||||
objectMap = new Objectmap<DockerRegistry>()
|
||||
constructor () {
|
||||
// Nothing here
|
||||
}
|
||||
|
||||
addRegistry (registryArg: DockerRegistry) {
|
||||
this.objectMap.add(registryArg)
|
||||
}
|
||||
|
||||
getRegistryByUrl (registryUrlArg: string) {
|
||||
return this.objectMap.find(registryArg => {
|
||||
return registryArg.registryUrl === registryUrlArg
|
||||
})
|
||||
}
|
||||
|
||||
async loginAll () {
|
||||
await this.objectMap.forEach(async registryArg => {
|
||||
await registryArg.login()
|
||||
})
|
||||
plugins.beautylog.success('logged in successfully into all available DockerRegistries!')
|
||||
}
|
||||
}
|
||||
154
ts/mod_docker/mod.helpers.ts
Normal file
154
ts/mod_docker/mod.helpers.ts
Normal file
@@ -0,0 +1,154 @@
|
||||
import * as plugins from './mod.plugins'
|
||||
import * as paths from '../npmci.paths'
|
||||
import * as NpmciEnv from '../npmci.env'
|
||||
import { bash } from '../npmci.bash'
|
||||
|
||||
import { Dockerfile } from './mod.classes.dockerfile'
|
||||
|
||||
/**
|
||||
* creates instance of class Dockerfile for all Dockerfiles in cwd
|
||||
* @returns Promise<Dockerfile[]>
|
||||
*/
|
||||
export let readDockerfiles = async (): Promise<Dockerfile[]> => {
|
||||
let fileTree = await plugins.smartfile.fs.listFileTree(paths.cwd, 'Dockerfile*')
|
||||
|
||||
// create the Dockerfile array
|
||||
let readDockerfilesArray: Dockerfile[] = []
|
||||
plugins.beautylog.info(`found ${fileTree.length} Dockerfiles:`)
|
||||
console.log(fileTree)
|
||||
for (let dockerfilePath of fileTree) {
|
||||
let myDockerfile = new Dockerfile({
|
||||
filePath: dockerfilePath,
|
||||
read: true
|
||||
})
|
||||
readDockerfilesArray.push(myDockerfile)
|
||||
}
|
||||
|
||||
return readDockerfilesArray
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* sorts Dockerfiles into a dependency chain
|
||||
* @param sortableArrayArg an array of instances of class Dockerfile
|
||||
* @returns Promise<Dockerfile[]>
|
||||
*/
|
||||
export let sortDockerfiles = (sortableArrayArg: Dockerfile[]): Promise<Dockerfile[]> => {
|
||||
let done = plugins.q.defer<Dockerfile[]>()
|
||||
plugins.beautylog.info('sorting Dockerfiles:')
|
||||
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) {
|
||||
let counter = 1
|
||||
for (let dockerfile of sortedArray) {
|
||||
plugins.beautylog.log(`tag ${counter}: -> ${dockerfile.cleanTag}`)
|
||||
counter++
|
||||
}
|
||||
done.resolve(sortedArray)
|
||||
} else if (sorterFunctionCounter < 10) {
|
||||
sorterFunctionCounter++
|
||||
sorterFunction()
|
||||
}
|
||||
}
|
||||
sorterFunction()
|
||||
return done.promise
|
||||
}
|
||||
|
||||
/**
|
||||
* maps local Dockerfiles dependencies to the correspoding Dockerfile class instances
|
||||
*/
|
||||
export let mapDockerfiles = async (sortedArray: Dockerfile[]): Promise<Dockerfile[]> => {
|
||||
sortedArray.forEach((dockerfileArg) => {
|
||||
if (dockerfileArg.localBaseImageDependent) {
|
||||
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
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a version for a docker file
|
||||
* @execution SYNC
|
||||
*/
|
||||
export let dockerFileVersion = (dockerfileNameArg: string): string => {
|
||||
let versionString: string
|
||||
let versionRegex = /Dockerfile_([a-zA-Z0-9\.]*)$/
|
||||
let regexResultArray = versionRegex.exec(dockerfileNameArg)
|
||||
if (regexResultArray && regexResultArray.length === 2) {
|
||||
versionString = regexResultArray[ 1 ]
|
||||
} else {
|
||||
versionString = 'latest'
|
||||
}
|
||||
return versionString
|
||||
}
|
||||
|
||||
/**
|
||||
* returns the docker base image for a Dockerfile
|
||||
*/
|
||||
export let dockerBaseImage = function (dockerfileContentArg: string) {
|
||||
let baseImageRegex = /FROM\s([a-zA-z0-9\/\-\:]*)\n?/
|
||||
let regexResultArray = baseImageRegex.exec(dockerfileContentArg)
|
||||
return regexResultArray[ 1 ]
|
||||
}
|
||||
|
||||
/**
|
||||
* returns the docker tag
|
||||
*/
|
||||
export let getDockerTagString = function (registryArg: string, repoArg: string, versionArg: string, suffixArg?: string): string {
|
||||
// determine wether the suffix is needed
|
||||
let version = versionArg
|
||||
if (suffixArg) {
|
||||
version = versionArg + '_' + suffixArg
|
||||
}
|
||||
let tagString = `${registryArg}/${repoArg}:${version}`
|
||||
return tagString
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
export let cleanTagsArrayFunction = function (dockerfileArrayArg: Dockerfile[], trackingArrayArg: Dockerfile[]): string[] {
|
||||
let cleanTagsArray: string[] = []
|
||||
dockerfileArrayArg.forEach(function (dockerfileArg) {
|
||||
if (trackingArrayArg.indexOf(dockerfileArg) === -1) {
|
||||
cleanTagsArray.push(dockerfileArg.cleanTag)
|
||||
}
|
||||
})
|
||||
return cleanTagsArray
|
||||
}
|
||||
@@ -25,10 +25,10 @@ export let handleCli = async (argvArg) => {
|
||||
await test()
|
||||
break
|
||||
default:
|
||||
plugins.beautylog.error(`>>npmci node ...<< action >>${action}<< not supported`)
|
||||
plugins.beautylog.error(`>>npmci npm ...<< action >>${action}<< not supported`)
|
||||
}
|
||||
} else {
|
||||
plugins.beautylog.log(`>>npmci node ...<< cli arguments invalid... Please read the documentation.`)
|
||||
plugins.beautylog.log(`>>npmci npm ...<< cli arguments invalid... Please read the documentation.`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@ smartcli.addCommand('clean')
|
||||
.then(async (argv) => {
|
||||
let modClean = await npmciMods.modClean.load()
|
||||
await modClean.clean()
|
||||
await NpmciEnv.configStore()
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
process.exit(1)
|
||||
@@ -26,7 +25,6 @@ smartcli.addCommand('cloudflare')
|
||||
.then(async (argvArg) => {
|
||||
let modPurge = await npmciMods.modCloudflare.load()
|
||||
await modPurge.handleCli(argvArg)
|
||||
await NpmciEnv.configStore()
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
@@ -36,7 +34,6 @@ smartcli.addCommand('command')
|
||||
.then(async (argv) => {
|
||||
let modCommand = await npmciMods.modCommand.load()
|
||||
await modCommand.command()
|
||||
await NpmciEnv.configStore()
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
process.exit(1)
|
||||
@@ -47,7 +44,6 @@ smartcli.addCommand('docker')
|
||||
.then(async argvArg => {
|
||||
let modDocker = await npmciMods.modDocker.load()
|
||||
await modDocker.handleCli(argvArg)
|
||||
NpmciEnv.configStore()
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
process.exit(1)
|
||||
@@ -58,7 +54,6 @@ smartcli.addCommand('node')
|
||||
.then(async (argvArg) => {
|
||||
let modNode = await npmciMods.modNode.load()
|
||||
await modNode.handleCli(argvArg)
|
||||
await NpmciEnv.configStore()
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
@@ -68,7 +63,6 @@ smartcli.addCommand('npm')
|
||||
.then(async (argvArg) => {
|
||||
let modNpm = await npmciMods.modNpm.load()
|
||||
await modNpm.handleCli(argvArg)
|
||||
await NpmciEnv.configStore()
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
@@ -78,7 +72,6 @@ smartcli.addCommand('ssh')
|
||||
.then(async (argvArg) => {
|
||||
let modSsh = await npmciMods.modSsh.load()
|
||||
await modSsh.handleCli(argvArg)
|
||||
await NpmciEnv.configStore()
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
process.exit(1)
|
||||
@@ -89,7 +82,6 @@ smartcli.addCommand('trigger')
|
||||
.then(async (argv) => {
|
||||
let modTrigger = await npmciMods.modTrigger.load()
|
||||
await modTrigger.trigger()
|
||||
await NpmciEnv.configStore()
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
process.exit(1)
|
||||
|
||||
@@ -10,65 +10,3 @@ export let repo: GitRepo
|
||||
if (process.env.CI_REPOSITORY_URL) {
|
||||
repo = new GitRepo(process.env.CI_REPOSITORY_URL)
|
||||
}
|
||||
|
||||
/**
|
||||
* the build stage
|
||||
*/
|
||||
export let buildStage: string = process.env.CI_BUILD_STAGE
|
||||
|
||||
// handling config between commands
|
||||
export let dockerRegistry: string // will be set by npmci.prepare
|
||||
export let setDockerRegistry = (dockerRegistryArg: string) => {
|
||||
dockerRegistry = dockerRegistryArg
|
||||
}
|
||||
export let dockerFilesBuilt: Dockerfile[] = []
|
||||
export let dockerFiles: Dockerfile[] = []
|
||||
|
||||
/**
|
||||
* the config
|
||||
*/
|
||||
export let config = {
|
||||
dockerRegistry: undefined, // this will be set later on store
|
||||
dockerFilesBuilt: dockerFilesBuilt,
|
||||
dockerFiles: dockerFiles,
|
||||
project: undefined
|
||||
}
|
||||
|
||||
/**
|
||||
* the configuration store
|
||||
*/
|
||||
export let configStore = async () => {
|
||||
config.dockerRegistry = dockerRegistry
|
||||
plugins.smartfile.memory.toFsSync(
|
||||
JSON.stringify(config),
|
||||
paths.NpmciPackageConfig
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* load the config in case a previous run has stored it
|
||||
*/
|
||||
let configLoad = () => {
|
||||
// internal config to transfer information in between npmci shell calls
|
||||
try {
|
||||
plugins.lodash.assign(config, plugins.smartfile.fs.toObjectSync(paths.NpmciPackageConfig, 'json'))
|
||||
} catch (err) {
|
||||
configStore()
|
||||
plugins.beautylog.log('config initialized!')
|
||||
}
|
||||
|
||||
// project config
|
||||
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()
|
||||
|
||||
12
yarn.lock
12
yarn.lock
@@ -1501,9 +1501,9 @@ liftoff@^2.1.0:
|
||||
rechoir "^0.6.2"
|
||||
resolve "^1.1.7"
|
||||
|
||||
lik@^1.0.30, lik@^1.0.38:
|
||||
version "1.0.38"
|
||||
resolved "https://registry.yarnpkg.com/lik/-/lik-1.0.38.tgz#ccff0abd3d9236a5e4b7d80d514c5c210f18469b"
|
||||
lik@^1.0.30, lik@^1.0.38, lik@^1.0.40:
|
||||
version "1.0.40"
|
||||
resolved "https://registry.yarnpkg.com/lik/-/lik-1.0.40.tgz#2893563950263289899b79eb3a4d3c42609711bd"
|
||||
dependencies:
|
||||
"@types/lodash" "^4.14.67"
|
||||
"@types/minimatch" "2.x.x"
|
||||
@@ -2434,9 +2434,9 @@ smartparam@0.1.1:
|
||||
q "^1.4.1"
|
||||
typings-global "^1.0.3"
|
||||
|
||||
smartparam@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/smartparam/-/smartparam-1.0.1.tgz#4e383f96abdc46ffdd200e2f6b415522b5086ff3"
|
||||
smartparam@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/smartparam/-/smartparam-1.0.2.tgz#6b6a50353b81dbe3353c0d353fbccd02e8963f2c"
|
||||
dependencies:
|
||||
beautylog "6.1.10"
|
||||
is-promise "^2.1.0"
|
||||
|
||||
Reference in New Issue
Block a user