Compare commits
28 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 40a6bba338 | |||
| f98f490956 | |||
| 15714204a6 | |||
| 35c4963192 | |||
| b3c5db3ed9 | |||
| 0701429782 | |||
| 24dd9edcae | |||
| 3e1397e13f | |||
| ecb21a787f | |||
| 10233ffae0 | |||
| 4cea1d29d2 | |||
| 3bf2502f87 | |||
| c012810a8c | |||
| ae5b1b1fa7 | |||
| f1bf000744 | |||
| 30e16cb33d | |||
| 16984d811f | |||
| 12e2509f0c | |||
| e0b8c4f263 | |||
| 16925a3f3f | |||
| 1ff0337112 | |||
| 6b15728fbf | |||
| 44c20deec7 | |||
| 6d328e263d | |||
| 52f09583f5 | |||
| 782738aae9 | |||
| b62104c2a5 | |||
| 3506d8dd21 |
@@ -13,7 +13,7 @@ stages:
|
|||||||
- pages
|
- pages
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- yarn global add npmci
|
- yarn global add npmci@2.4.1
|
||||||
|
|
||||||
testLEGACY:
|
testLEGACY:
|
||||||
stage: test
|
stage: test
|
||||||
@@ -43,7 +43,7 @@ testSTABLE:
|
|||||||
release:
|
release:
|
||||||
stage: release
|
stage: release
|
||||||
script:
|
script:
|
||||||
- npmci publish
|
- npmci publish npm
|
||||||
only:
|
only:
|
||||||
- tags
|
- tags
|
||||||
tags:
|
tags:
|
||||||
|
|||||||
2
dist/mod_docker/mod.builddocker.d.ts
vendored
2
dist/mod_docker/mod.builddocker.d.ts
vendored
@@ -91,7 +91,7 @@ export declare let dockerBaseImage: (dockerfileContentArg: string) => string;
|
|||||||
/**
|
/**
|
||||||
* returns the docker tag
|
* returns the docker tag
|
||||||
*/
|
*/
|
||||||
export declare let dockerTag: (registryArg: string, repoArg: string, versionArg: string, suffixArg?: string) => string;
|
export declare let getDockerTagString: (registryArg: string, repoArg: string, versionArg: string, suffixArg?: string) => string;
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|||||||
33
dist/mod_docker/mod.builddocker.js
vendored
33
dist/mod_docker/mod.builddocker.js
vendored
File diff suppressed because one or more lines are too long
36
dist/mod_prepare/index.js
vendored
36
dist/mod_prepare/index.js
vendored
@@ -34,28 +34,40 @@ let npm = () => __awaiter(this, void 0, void 0, function* () {
|
|||||||
*/
|
*/
|
||||||
let docker = () => __awaiter(this, void 0, void 0, function* () {
|
let docker = () => __awaiter(this, void 0, void 0, function* () {
|
||||||
env.setDockerRegistry('docker.io'); // TODO: checkup why we set this here
|
env.setDockerRegistry('docker.io'); // TODO: checkup why we set this here
|
||||||
let dockerRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)/;
|
// handle registries
|
||||||
// Login external reigstry
|
plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_LOGIN_DOCKER*', (envString) => __awaiter(this, void 0, void 0, function* () {
|
||||||
if (!process.env.NPMCI_LOGIN_DOCKER) {
|
let dockerRegexResultArray = envString.split('|');
|
||||||
plugins.beautylog.warn('You have to specify Login Data to an external Docker Registry');
|
if (dockerRegexResultArray.length !== 3) {
|
||||||
plugins.beautylog.warn('|- As a result only the gitlab registry is availble for this build.');
|
plugins.beautylog.error('malformed docker env var...');
|
||||||
|
process.exit(1);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else {
|
let registry = dockerRegexResultArray[0];
|
||||||
let dockerRegexResultArray = dockerRegex.exec(process.env.NPMCI_LOGIN_DOCKER);
|
|
||||||
let username = dockerRegexResultArray[1];
|
let username = dockerRegexResultArray[1];
|
||||||
let password = dockerRegexResultArray[2];
|
let password = dockerRegexResultArray[2];
|
||||||
yield npmci_bash_1.bash('docker login -u ' + username + ' -p ' + password);
|
if (registry === 'docker.io') {
|
||||||
|
yield npmci_bash_1.bash(`docker login -u ${username} -p ${password}`);
|
||||||
|
plugins.beautylog.info('Logged in to standard docker hub');
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
yield npmci_bash_1.bash(`docker login -u ${username} -p ${password} ${registry}`);
|
||||||
|
}
|
||||||
|
plugins.beautylog.success(`docker authenticated for ${registry}!`);
|
||||||
|
}));
|
||||||
// Always login to GitLab Registry
|
// Always login to GitLab Registry
|
||||||
plugins.shelljs.exec('docker login -u gitlab-ci-token -p ' + process.env.CI_BUILD_TOKEN + ' ' + 'registry.gitlab.com');
|
yield dockerGitlab();
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
/**
|
/**
|
||||||
* prepare docker for gitlab registry
|
* prepare docker for gitlab registry
|
||||||
*/
|
*/
|
||||||
let dockerGitlab = () => __awaiter(this, void 0, void 0, function* () {
|
let dockerGitlab = () => __awaiter(this, void 0, void 0, function* () {
|
||||||
env.setDockerRegistry('registry.gitlab.com');
|
if (!process.env.CI_BUILD_TOKEN || process.env.CI_BUILD_TOKEN === '') {
|
||||||
plugins.shelljs.exec('docker login -u gitlab-ci-token -p ' + process.env.CI_BUILD_TOKEN + ' ' + 'registry.gitlab.com');
|
plugins.beautylog.error('No registry token specified by gitlab!');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
yield npmci_bash_1.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;
|
return;
|
||||||
});
|
});
|
||||||
/**
|
/**
|
||||||
@@ -83,4 +95,4 @@ exports.prepare = (serviceArg) => __awaiter(this, void 0, void 0, function* () {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfcHJlcGFyZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEseUNBQXdDO0FBQ3hDLDhDQUFvQztBQUNwQyxvQ0FBbUM7QUFDbkMsMkNBQTBDO0FBUzFDOztHQUVHO0FBQ0gsSUFBSSxHQUFHLEdBQUc7SUFDUixJQUFJLFdBQVcsR0FBVyxtQ0FBbUMsQ0FBQTtJQUM3RCxJQUFJLFFBQVEsR0FBVyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQTtJQUNsRCxJQUFJLGVBQWUsR0FBVyxXQUFXLEdBQUcsUUFBUSxDQUFBO0lBQ3BELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDYixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUE7UUFDMUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBQ0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUNsRSxNQUFNLENBQUE7QUFDUixDQUFDLENBQUEsQ0FBQTtBQUVEOztHQUVHO0FBQ0gsSUFBSSxNQUFNLEdBQUc7SUFDWCxHQUFHLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUEsQ0FBQyxxQ0FBcUM7SUFDeEUsSUFBSSxXQUFXLEdBQUcscUNBQXFDLENBQUE7SUFFdkQsMEJBQTBCO0lBQzFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDcEMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsK0RBQStELENBQUMsQ0FBQTtRQUN2RixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxRUFBcUUsQ0FBQyxDQUFBO0lBQy9GLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLElBQUksc0JBQXNCLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDN0UsSUFBSSxRQUFRLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDeEMsSUFBSSxRQUFRLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDeEMsTUFBTSxpQkFBSSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUE7SUFDL0QsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsR0FBRyxHQUFHLEdBQUcscUJBQXFCLENBQUMsQ0FBQTtJQUN0SCxNQUFNLENBQUE7QUFDUixDQUFDLENBQUEsQ0FBQTtBQUVEOztHQUVHO0FBQ0gsSUFBSSxZQUFZLEdBQUc7SUFDakIsR0FBRyxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQUE7SUFDNUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsR0FBRyxHQUFHLHFCQUFxQixDQUFDLENBQUE7SUFDdEgsTUFBTSxDQUFBO0FBQ1IsQ0FBQyxDQUFBLENBQUE7QUFFRDs7R0FFRztBQUNILElBQUksR0FBRyxHQUFHO0lBQ1IsSUFBSSxTQUFTLEdBQUcsTUFBTSxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzdDLE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFBO0FBQ3ZCLENBQUMsQ0FBQSxDQUFBO0FBRUQ7OztHQUdHO0FBQ1EsUUFBQSxPQUFPLEdBQUcsQ0FBTyxVQUF3QjtJQUNsRCxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssS0FBSztZQUNSLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBQ3BCLEtBQUssUUFBUTtZQUNYLE1BQU0sQ0FBQyxNQUFNLE1BQU0sRUFBRSxDQUFBO1FBQ3ZCLEtBQUssZUFBZTtZQUNsQixNQUFNLENBQUMsTUFBTSxZQUFZLEVBQUUsQ0FBQTtRQUM3QixLQUFLLEtBQUs7WUFDUixNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUNwQjtZQUNFLEtBQUssQ0FBQTtJQUNULENBQUM7QUFDSCxDQUFDLENBQUEsQ0FBQSJ9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfcHJlcGFyZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEseUNBQXdDO0FBQ3hDLDhDQUFvQztBQUNwQyxvQ0FBbUM7QUFDbkMsMkNBQTBDO0FBUzFDOztHQUVHO0FBQ0gsSUFBSSxHQUFHLEdBQUc7SUFDUixJQUFJLFdBQVcsR0FBVyxtQ0FBbUMsQ0FBQTtJQUM3RCxJQUFJLFFBQVEsR0FBVyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQTtJQUNsRCxJQUFJLGVBQWUsR0FBVyxXQUFXLEdBQUcsUUFBUSxDQUFBO0lBQ3BELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDYixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUE7UUFDMUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBQ0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUNsRSxNQUFNLENBQUE7QUFDUixDQUFDLENBQUEsQ0FBQTtBQUVEOztHQUVHO0FBQ0gsSUFBSSxNQUFNLEdBQUc7SUFDWCxHQUFHLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUEsQ0FBQyxxQ0FBcUM7SUFFeEUsb0JBQW9CO0lBQ3BCLE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxDQUFPLFNBQVM7UUFDdEYsSUFBSSxzQkFBc0IsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFB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
|
||||||
9
dist/mod_publish/index.js
vendored
9
dist/mod_publish/index.js
vendored
@@ -18,10 +18,13 @@ const npmciMods = require("../npmci.mods");
|
|||||||
exports.publish = (argvArg) => __awaiter(this, void 0, void 0, function* () {
|
exports.publish = (argvArg) => __awaiter(this, void 0, void 0, function* () {
|
||||||
let whatToPublish = argvArg._[1];
|
let whatToPublish = argvArg._[1];
|
||||||
switch (whatToPublish) {
|
switch (whatToPublish) {
|
||||||
case 'npm':
|
|
||||||
return yield publishNpm(argvArg);
|
|
||||||
case 'docker':
|
case 'docker':
|
||||||
return yield publishDocker(argvArg);
|
return yield publishDocker(argvArg);
|
||||||
|
case 'npm':
|
||||||
|
return yield publishNpm(argvArg);
|
||||||
|
default:
|
||||||
|
plugins.beautylog.info('no publish target specified, thus defaulting to npm...');
|
||||||
|
return yield publishNpm(argvArg);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
/**
|
/**
|
||||||
@@ -45,4 +48,4 @@ let publishDocker = (argvArg) => __awaiter(this, void 0, void 0, function* () {
|
|||||||
return dockerfileArray;
|
return dockerfileArray;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfcHVibGlzaC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEseUNBQXdDO0FBQ3hDLDhDQUFvQztBQUdwQywyQ0FBMEM7QUFXMUM7OztHQUdHO0FBQ1EsUUFBQSxPQUFPLEdBQUcsQ0FBTyxPQUFZO0lBQ3RDLElBQUksYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEMsTUFBTSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUN0QixLQUFLLEtBQUs7WUFDUixNQUFNLENBQUMsTUFBTSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDbEMsS0FBSyxRQUFRO1lBQ1gsTUFBTSxDQUFDLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7QUFDSCxDQUFDLENBQUEsQ0FBQTtBQUVEOztHQUVHO0FBQ0gsSUFBSSxVQUFVLEdBQUcsQ0FBTyxPQUFPO0lBQzdCLElBQUksVUFBVSxHQUFHLE1BQU0sU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUNsRCxNQUFNLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDL0IsTUFBTSxpQkFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ3pCLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQy9CLENBQUMsQ0FBQSxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxJQUFJLGFBQWEsR0FBRyxDQUFPLE9BQU87SUFDaEMsSUFBSSxTQUFTLEdBQUcsTUFBTSxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ2hELE1BQU0sQ0FBQyxNQUFNLFNBQVMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDO1NBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUM7U0FDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7U0FDL0IsSUFBSSxDQUFDLGVBQWU7UUFDbkIsTUFBTSxDQUFDLGVBQWUsQ0FBQTtJQUN4QixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQSxDQUFBIn0=
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfcHVibGlzaC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEseUNBQXdDO0FBQ3hDLDhDQUFvQztBQUdwQywyQ0FBMEM7QUFXMUM7OztHQUdHO0FBQ1EsUUFBQSxPQUFPLEdBQUcsQ0FBTyxPQUFZO0lBQ3RDLElBQUksYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEMsTUFBTSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUN0QixLQUFLLFFBQVE7WUFDWCxNQUFNLENBQUMsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDckMsS0FBSyxLQUFLO1lBQ1IsTUFBTSxDQUFDLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2xDO1lBQ0UsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsd0RBQXdELENBQUMsQ0FBQTtZQUNoRixNQUFNLENBQUMsTUFBTSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEMsQ0FBQztBQUNILENBQUMsQ0FBQSxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxJQUFJLFVBQVUsR0FBRyxDQUFPLE9BQU87SUFDN0IsSUFBSSxVQUFVLEdBQUcsTUFBTSxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ2xELE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMvQixNQUFNLGlCQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDekIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDL0IsQ0FBQyxDQUFBLENBQUE7QUFFRDs7R0FFRztBQUNILElBQUksYUFBYSxHQUFHLENBQU8sT0FBTztJQUNoQyxJQUFJLFNBQVMsR0FBRyxNQUFNLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDaEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUM7U0FDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQztTQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztTQUMvQixJQUFJLENBQUMsZUFBZTtRQUNuQixNQUFNLENBQUMsZUFBZSxDQUFBO0lBQ3hCLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBLENBQUEifQ==
|
||||||
19
docs/ssh.md
Normal file
19
docs/ssh.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# SSH
|
||||||
|
npmci allows easy usage of ssh:
|
||||||
|
|
||||||
|
## Add the SSH KEY to the environment
|
||||||
|
|
||||||
|
To make npmci aware of any SSH KEY add it to the environment in the following format
|
||||||
|
```
|
||||||
|
# Key
|
||||||
|
NPMCI_SSHKEY_[A_NAME_FROM_YOU]
|
||||||
|
# Value:
|
||||||
|
[targeted host]|[privatekey as base64]|***
|
||||||
|
```
|
||||||
|
|
||||||
|
## Use npmci cli tool in your ci script
|
||||||
|
```
|
||||||
|
npmci prepare ssh
|
||||||
|
npmci command git remote add heroku ssh://git@heroku.com/[you project name].git
|
||||||
|
npmci command git push heroku master
|
||||||
|
```
|
||||||
26
package.json
26
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "npmci",
|
"name": "npmci",
|
||||||
"version": "2.4.0",
|
"version": "2.4.14",
|
||||||
"description": "node and docker in gitlab ci on steroids",
|
"description": "node and docker in gitlab ci on steroids",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"typings": "dist/index.d.ts",
|
"typings": "dist/index.d.ts",
|
||||||
@@ -22,34 +22,34 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://gitlab.com/gitzone/npmci#README",
|
"homepage": "https://gitlab.com/gitzone/npmci#README",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"tapbundle": "^1.0.14"
|
"tapbundle": "^1.1.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/lodash": "^4.14.67",
|
"@types/lodash": "^4.14.74",
|
||||||
"@types/node": "^8.0.6",
|
"@types/node": "^8.0.25",
|
||||||
"@types/shelljs": "^0.7.2",
|
"@types/shelljs": "^0.7.4",
|
||||||
"@types/through2": "^2.0.33",
|
"@types/through2": "^2.0.33",
|
||||||
"beautylog": "^6.1.10",
|
"beautylog": "^6.1.10",
|
||||||
"cflare": "^1.0.5",
|
"cflare": "^1.0.5",
|
||||||
"gulp": "^3.9.1",
|
"gulp": "^3.9.1",
|
||||||
"gulp-function": "^2.2.9",
|
"gulp-function": "^2.2.9",
|
||||||
"lodash": "^4.17.4",
|
"lodash": "^4.17.4",
|
||||||
"npmextra": "^2.0.5",
|
"npmextra": "^2.0.9",
|
||||||
"projectinfo": "^3.0.2",
|
"projectinfo": "^3.0.2",
|
||||||
"request": "^2.81.0",
|
"request": "^2.81.0",
|
||||||
"shelljs": "^0.7.8",
|
"shelljs": "^0.7.8",
|
||||||
"smartcli": "^2.0.7",
|
"smartcli": "^2.0.7",
|
||||||
"smartdelay": "^1.0.3",
|
"smartdelay": "^1.0.3",
|
||||||
"smartfile": "^4.2.17",
|
"smartfile": "^4.2.20",
|
||||||
"smartmonitor": "^1.0.3",
|
"smartmonitor": "^1.0.3",
|
||||||
"smartparam": "^0.1.1",
|
"smartparam": "^1.0.1",
|
||||||
"smartq": "^1.1.1",
|
"smartq": "^1.1.6",
|
||||||
"smartshell": "^1.0.8",
|
"smartshell": "^1.0.13",
|
||||||
"smartsocket": "^1.1.7",
|
"smartsocket": "^1.1.10",
|
||||||
"smartssh": "^1.2.2",
|
"smartssh": "^1.2.2",
|
||||||
"smartstring": "^2.0.24",
|
"smartstring": "^2.0.24",
|
||||||
"smartsystem": "^1.0.18",
|
"smartsystem": "^2.0.2",
|
||||||
"through2": "^2.0.3",
|
"through2": "^2.0.3",
|
||||||
"typings-global": "^1.0.19"
|
"typings-global": "^1.0.20"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
12
test/test.ts
12
test/test.ts
@@ -10,12 +10,12 @@ process.cwd = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// require NPMCI files
|
// require NPMCI files
|
||||||
import '../dist/index'
|
import '../ts/index'
|
||||||
import NpmciBuildDocker = require('../dist/mod_docker/index')
|
import NpmciBuildDocker = require('../ts/mod_docker/index')
|
||||||
import NpmciPublish = require('../dist/mod_publish/index')
|
import NpmciPublish = require('../ts/mod_publish/index')
|
||||||
import NpmciTest = require('../dist/mod_test/index')
|
import NpmciTest = require('../ts/mod_test/index')
|
||||||
import NpmciSsh = require('../dist/mod_ssh/index')
|
import NpmciSsh = require('../ts/mod_ssh/index')
|
||||||
import NpmciEnv = require('../dist/npmci.env')
|
import NpmciEnv = require('../ts/npmci.env')
|
||||||
|
|
||||||
let dockerfile1: NpmciBuildDocker.Dockerfile
|
let dockerfile1: NpmciBuildDocker.Dockerfile
|
||||||
let dockerfile2: NpmciBuildDocker.Dockerfile
|
let dockerfile2: NpmciBuildDocker.Dockerfile
|
||||||
|
|||||||
@@ -167,9 +167,12 @@ export class Dockerfile {
|
|||||||
this.version = dockerFileVersion(plugins.path.parse(options.filePath).base)
|
this.version = dockerFileVersion(plugins.path.parse(options.filePath).base)
|
||||||
this.cleanTag = this.repo + ':' + this.version
|
this.cleanTag = this.repo + ':' + this.version
|
||||||
this.buildTag = this.cleanTag
|
this.buildTag = this.cleanTag
|
||||||
this.gitlabTestTag = dockerTag('registry.gitlab.com', this.repo, this.version, 'test')
|
this.gitlabTestTag = getDockerTagString('registry.gitlab.com', this.repo, this.version, 'test')
|
||||||
this.gitlabReleaseTag = dockerTag('registry.gitlab.com', this.repo, this.version)
|
this.gitlabReleaseTag = getDockerTagString('registry.gitlab.com', this.repo, this.version)
|
||||||
this.releaseTag = dockerTag(NpmciEnv.dockerRegistry, this.repo, this.version)
|
|
||||||
|
// the releaseTag determines where the image gets released
|
||||||
|
this.releaseTag = getDockerTagString('docker.io', this.repo, this.version)
|
||||||
|
|
||||||
this.containerName = 'dockerfile-' + this.version
|
this.containerName = 'dockerfile-' + this.version
|
||||||
if (options.filePath && options.read) {
|
if (options.filePath && options.read) {
|
||||||
this.content = plugins.smartfile.fs.toStringSync(plugins.path.resolve(options.filePath))
|
this.content = plugins.smartfile.fs.toStringSync(plugins.path.resolve(options.filePath))
|
||||||
@@ -193,20 +196,16 @@ export class Dockerfile {
|
|||||||
* pushes the Dockerfile to a registry
|
* pushes the Dockerfile to a registry
|
||||||
*/
|
*/
|
||||||
async push (stageArg) {
|
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) {
|
switch (stageArg) {
|
||||||
case 'release':
|
case 'release':
|
||||||
await bash(`docker tag ${this.buildTag} ${this.releaseTag}`)
|
|
||||||
await bash(`docker push ${this.releaseTag}`)
|
|
||||||
|
|
||||||
// if release registry is different from gitlab
|
|
||||||
if (NpmciEnv.dockerRegistry !== 'registry.gitlab.com') {
|
|
||||||
await bash(`docker tag ${this.buildTag} ${this.gitlabReleaseTag}`)
|
|
||||||
await bash(`docker push ${this.gitlabReleaseTag}`)
|
await bash(`docker push ${this.gitlabReleaseTag}`)
|
||||||
}
|
await bash(`docker push ${this.releaseTag}`)
|
||||||
break
|
break
|
||||||
case 'test':
|
case 'test':
|
||||||
default:
|
default:
|
||||||
await bash(`docker tag ${this.buildTag} ${this.gitlabTestTag}`)
|
|
||||||
await bash(`docker push ${this.gitlabTestTag}`)
|
await bash(`docker push ${this.gitlabTestTag}`)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -216,9 +215,8 @@ export class Dockerfile {
|
|||||||
* pulls the Dockerfile from a registry
|
* pulls the Dockerfile from a registry
|
||||||
*/
|
*/
|
||||||
async pull (registryArg: string) {
|
async pull (registryArg: string) {
|
||||||
let pullTag = this.gitlabTestTag
|
await bash(`docker pull ${this.gitlabTestTag}`)
|
||||||
await bash('docker pull ' + pullTag)
|
await bash(`docker tag ${this.gitlabTestTag} ${this.buildTag}`)
|
||||||
await bash('docker tag ' + pullTag + ' ' + this.buildTag)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -277,15 +275,13 @@ export let dockerBaseImage = function (dockerfileContentArg: string) {
|
|||||||
/**
|
/**
|
||||||
* returns the docker tag
|
* returns the docker tag
|
||||||
*/
|
*/
|
||||||
export let dockerTag = function (registryArg: string, repoArg: string, versionArg: string, suffixArg?: string): string {
|
export let getDockerTagString = function (registryArg: string, repoArg: string, versionArg: string, suffixArg?: string): string {
|
||||||
let tagString: string
|
// determine wether the suffix is needed
|
||||||
let registry = registryArg
|
|
||||||
let repo = repoArg
|
|
||||||
let version = versionArg
|
let version = versionArg
|
||||||
if (suffixArg) {
|
if (suffixArg) {
|
||||||
version = versionArg + '_' + suffixArg
|
version = versionArg + '_' + suffixArg
|
||||||
}
|
}
|
||||||
tagString = registry + '/' + repo + ':' + version
|
let tagString = `${registryArg}/${repoArg}:${version}`
|
||||||
return tagString
|
return tagString
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,21 +32,29 @@ let npm = async () => {
|
|||||||
*/
|
*/
|
||||||
let docker = async () => {
|
let docker = async () => {
|
||||||
env.setDockerRegistry('docker.io') // TODO: checkup why we set this here
|
env.setDockerRegistry('docker.io') // TODO: checkup why we set this here
|
||||||
let dockerRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)/
|
|
||||||
|
|
||||||
// Login external reigstry
|
// handle registries
|
||||||
if (!process.env.NPMCI_LOGIN_DOCKER) {
|
plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_LOGIN_DOCKER*', async (envString) => {
|
||||||
plugins.beautylog.warn('You have to specify Login Data to an external Docker Registry')
|
let dockerRegexResultArray = envString.split('|')
|
||||||
plugins.beautylog.warn('|- As a result only the gitlab registry is availble for this build.')
|
if (dockerRegexResultArray.length !== 3) {
|
||||||
} else {
|
plugins.beautylog.error('malformed docker env var...')
|
||||||
let dockerRegexResultArray = dockerRegex.exec(process.env.NPMCI_LOGIN_DOCKER)
|
process.exit(1)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let registry = dockerRegexResultArray[0]
|
||||||
let username = dockerRegexResultArray[1]
|
let username = dockerRegexResultArray[1]
|
||||||
let password = dockerRegexResultArray[2]
|
let password = dockerRegexResultArray[2]
|
||||||
await bash('docker login -u ' + username + ' -p ' + password)
|
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
|
// Always login to GitLab Registry
|
||||||
plugins.shelljs.exec('docker login -u gitlab-ci-token -p ' + process.env.CI_BUILD_TOKEN + ' ' + 'registry.gitlab.com')
|
await dockerGitlab()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,8 +62,12 @@ let docker = async () => {
|
|||||||
* prepare docker for gitlab registry
|
* prepare docker for gitlab registry
|
||||||
*/
|
*/
|
||||||
let dockerGitlab = async () => {
|
let dockerGitlab = async () => {
|
||||||
env.setDockerRegistry('registry.gitlab.com')
|
if (!process.env.CI_BUILD_TOKEN || process.env.CI_BUILD_TOKEN === '') {
|
||||||
plugins.shelljs.exec('docker login -u gitlab-ci-token -p ' + process.env.CI_BUILD_TOKEN + ' ' + 'registry.gitlab.com')
|
plugins.beautylog.error('No registry token specified by gitlab!')
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,10 +20,13 @@ export type TPubService = 'npm' | 'docker'
|
|||||||
export let publish = async (argvArg: any) => {
|
export let publish = async (argvArg: any) => {
|
||||||
let whatToPublish = argvArg._[1]
|
let whatToPublish = argvArg._[1]
|
||||||
switch (whatToPublish) {
|
switch (whatToPublish) {
|
||||||
case 'npm':
|
|
||||||
return await publishNpm(argvArg)
|
|
||||||
case 'docker':
|
case 'docker':
|
||||||
return await publishDocker(argvArg)
|
return await publishDocker(argvArg)
|
||||||
|
case 'npm':
|
||||||
|
return await publishNpm(argvArg)
|
||||||
|
default:
|
||||||
|
plugins.beautylog.info('no publish target specified, thus defaulting to npm...')
|
||||||
|
return await publishNpm(argvArg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user