Compare commits

...

30 Commits

Author SHA1 Message Date
c62ce415e9 3.1.24 2019-05-08 22:44:34 +02:00
99014da1e8 fix(core): update 2019-05-08 22:44:34 +02:00
0b5dada524 3.1.23 2019-05-08 22:43:49 +02:00
40bddba3b5 fix(core): update 2019-05-08 22:43:48 +02:00
6f6ee6d799 3.1.22 2019-02-24 22:50:12 +01:00
e30cc3f5a0 fix(core): update 2019-02-24 22:50:12 +01:00
a4562d4d1b 3.1.21 2018-12-24 02:13:05 +01:00
524b405773 fix(core): update 2018-12-24 02:13:04 +01:00
0d19c1c68d 3.1.20 2018-12-23 18:57:15 +01:00
cff79bc3b4 fix(mirror): now refusing to mirror for private code 2018-12-23 18:57:15 +01:00
28541a838d 3.1.19 2018-12-23 18:54:17 +01:00
c3ab527341 fix(core): update 2018-12-23 18:54:16 +01:00
52cc249098 3.1.18 2018-12-23 17:29:25 +01:00
2e189b0660 fix(core): update 2018-12-23 17:29:25 +01:00
f876c7414b 3.1.17 2018-12-12 22:29:59 +01:00
08b7585cfc fix(core): update 2018-12-12 22:29:59 +01:00
76311fab72 3.1.16 2018-12-11 01:02:22 +01:00
1b73df64f5 fix(core): update 2018-12-11 01:02:21 +01:00
701cee573b 3.1.15 2018-12-11 00:25:40 +01:00
3dd086f711 fix(core): update 2018-12-11 00:25:39 +01:00
67ff5d09d4 3.1.14 2018-12-09 16:48:33 +01:00
5cb8a79b6a fix(core): update 2018-12-09 16:48:33 +01:00
2dcbca2362 3.1.13 2018-12-09 16:26:28 +01:00
bd63194f4b fix(core): update 2018-12-09 16:26:28 +01:00
2763fdef5f 3.1.12 2018-12-09 15:53:39 +01:00
bbedde01b9 fix(core): update 2018-12-09 15:53:38 +01:00
f26606f757 3.1.11 2018-12-09 15:22:20 +01:00
99b03aa796 fix(core): update 2018-12-09 15:22:20 +01:00
f30dd3da65 3.1.10 2018-12-09 14:59:51 +01:00
d4decddb4b fix(core): update 2018-12-09 14:59:51 +01:00
12 changed files with 1937 additions and 756 deletions

20
.gitignore vendored
View File

@@ -1,7 +1,19 @@
dist/ .nogit/
node_modules/
# artifacts
coverage/ coverage/
public/ public/
config.json pages/
# installs
node_modules/
# caches and builds
.yarn/ .yarn/
.npmci_cache .cache/
dist/
dist_web/
dist_serve/
dist_ts_web/
# custom

View File

@@ -1,15 +1,26 @@
{ {
"npmts":{ "npmts": {
"mode":"default", "mode": "default",
"coverageTreshold": "70", "coverageTreshold": "70",
"cli": true "cli": true
}, },
"npmci": { "npmci": {
"npmGlobalTools": [], "npmGlobalTools": [],
"npmAccessLevel": "public" "npmAccessLevel": "public",
"npmRegistryUrl": "registry.npmjs.org"
}, },
"npmdocker":{ "npmdocker": {
"baseImage":"hosttoday/ht-docker-node:npmci", "baseImage": "hosttoday/ht-docker-node:npmci",
"command": "npmci test stable" "command": "npmci test stable"
},
"gitzone": {
"module": {
"githost": "gitlab.com",
"gitscope": "shipzone",
"gitrepo": "npmci",
"shortDescription": "node and docker in gitlab ci on steroids",
"npmPackagename": "@shipzone/npmci",
"license": "MIT"
}
} }
} }

2547
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,7 @@
{ {
"name": "@shipzone/npmci", "name": "@shipzone/npmci",
"version": "3.1.9", "version": "3.1.24",
"private": false,
"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",
@@ -23,36 +24,35 @@
}, },
"homepage": "https://gitlab.com/gitzone/npmci#README", "homepage": "https://gitlab.com/gitzone/npmci#README",
"devDependencies": { "devDependencies": {
"@gitzone/tsbuild": "^2.0.22", "@gitzone/tsbuild": "^2.1.11",
"@gitzone/tsrun": "^1.1.13", "@gitzone/tsrun": "^1.2.6",
"@gitzone/tstest": "^1.0.15", "@gitzone/tstest": "^1.0.20",
"@pushrocks/tapbundle": "^3.0.7", "@pushrocks/tapbundle": "^3.0.9",
"@types/node": "^10.12.10", "@types/node": "^12.0.0",
"tslint": "^5.11.0", "tslint": "^5.16.0",
"tslint-config-prettier": "^1.17.0" "tslint-config-prettier": "^1.18.0"
}, },
"dependencies": { "dependencies": {
"@pushrocks/lik": "^3.0.2", "@pushrocks/lik": "^3.0.5",
"@pushrocks/npmextra": "^3.0.1", "@pushrocks/npmextra": "^3.0.1",
"@pushrocks/projectinfo": "^4.0.2", "@pushrocks/projectinfo": "^4.0.2",
"@pushrocks/smartcli": "^3.0.6", "@pushrocks/smartanalytics": "^2.0.15",
"@pushrocks/smartdelay": "^2.0.2", "@pushrocks/smartcli": "^3.0.7",
"@pushrocks/smartfile": "^6.0.11", "@pushrocks/smartdelay": "^2.0.3",
"@pushrocks/smartlog": "^2.0.9", "@pushrocks/smartfile": "^7.0.2",
"@pushrocks/smartlog": "^2.0.19",
"@pushrocks/smartlog-destination-local": "^7.0.5", "@pushrocks/smartlog-destination-local": "^7.0.5",
"@pushrocks/smartparam": "^1.0.4", "@pushrocks/smartparam": "^1.0.4",
"@pushrocks/smartpromise": "^2.0.5", "@pushrocks/smartpromise": "^3.0.2",
"@pushrocks/smartrequest": "^1.1.14", "@pushrocks/smartrequest": "^1.1.15",
"@pushrocks/smartshell": "^2.0.11", "@pushrocks/smartshell": "^2.0.13",
"@pushrocks/smartsocket": "^1.1.36",
"@pushrocks/smartssh": "^1.2.3", "@pushrocks/smartssh": "^1.2.3",
"@pushrocks/smartstring": "^3.0.5", "@pushrocks/smartstring": "^3.0.10",
"@types/lodash": "^4.14.118", "@types/lodash": "^4.14.124",
"@types/shelljs": "^0.8.0", "@types/shelljs": "^0.8.5",
"@types/through2": "^2.0.34", "@types/through2": "^2.0.34",
"lodash": "^4.17.11", "lodash": "^4.17.11",
"smartanalytics": "^2.0.9", "through2": "^3.0.1"
"smartsocket": "^1.1.19", }
"through2": "^3.0.0"
},
"private": false
} }

View File

@@ -1,25 +1,20 @@
# npmci # @shipzone/npmci
node and docker in gitlab ci on steroids node and docker in gitlab ci on steroids
## Availabililty ## Availabililty and Links
* [npmjs.org (npm package)](https://www.npmjs.com/package/@shipzone/npmci)
[![npm](https://shipzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/@shipzone/npmci) * [gitlab.com (source)](https://gitlab.com/shipzone/npmci)
[![git](https://shipzone.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/shipzone/npmci) * [github.com (source mirror)](https://github.com/shipzone/npmci)
[![git](https://shipzone.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/shipzone/npmci) * [docs (typedoc)](https://shipzone.gitlab.io/npmci/)
[![docs](https://shipzone.gitlab.io/assets/repo-button-docs.svg)](https://shipzone.gitlab.io/npmci/)
## Status for master ## Status for master
[![build status](https://gitlab.com/shipzone/npmci/badges/master/build.svg)](https://gitlab.com/shipzone/npmci/commits/master)
[![build status](https://GitLab.com/shipzone/npmci/badges/master/build.svg)](https://GitLab.com/shipzone/npmci/commits/master) [![coverage report](https://gitlab.com/shipzone/npmci/badges/master/coverage.svg)](https://gitlab.com/shipzone/npmci/commits/master)
[![coverage report](https://GitLab.com/shipzone/npmci/badges/master/coverage.svg)](https://GitLab.com/shipzone/npmci/commits/master) [![npm downloads per month](https://img.shields.io/npm/dm/@shipzone/npmci.svg)](https://www.npmjs.com/package/@shipzone/npmci)
[![npm downloads per month](https://img.shields.io/npm/dm/npmci.svg)](https://www.npmjs.com/package/@shipzone/npmci) [![Known Vulnerabilities](https://snyk.io/test/npm/@shipzone/npmci/badge.svg)](https://snyk.io/test/npm/@shipzone/npmci)
[![Dependency Status](https://david-dm.org/shipzone/npmci.svg)](https://david-dm.org/shipzone/npmci) [![TypeScript](https://img.shields.io/badge/TypeScript->=%203.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![bitHound Dependencies](https://www.bithound.io/github/shipzone/npmci/badges/dependencies.svg)](https://www.bithound.io/github/shipzone/npmci/master/dependencies/npm) [![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
[![bitHound Code](https://www.bithound.io/github/shipzone/npmci/badges/code.svg)](https://www.bithound.io/github/shipzone/npmci) [![JavaScript Style Guide](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg)](https://prettier.io/)
[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)
## Usage ## Usage
@@ -98,9 +93,9 @@ For further information read the linked docs at the top of this README.
Use TypeScript for best in class instellisense. Use TypeScript for best in class instellisense.
For further information read the linked docs at the top of this README. For further information read the linked docs at the top of this readme.
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh) > MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
> | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html) | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
[![repo-footer](https://shipzone.gitlab.io/assets/repo-footer.svg)](https://push.rocks) [![repo-footer](https://shipzone.gitlab.io/assets/repo-footer.svg)](https://maintainedby.lossless.com)

View File

@@ -165,7 +165,7 @@ export let getDockerBuildArgs = async (): Promise<string> => {
let buildArgsString: string = ''; let buildArgsString: string = '';
for (const key in NpmciConfig.configObject.dockerBuildargEnvMap) { for (const key in NpmciConfig.configObject.dockerBuildargEnvMap) {
const targetValue = process.env[NpmciConfig.configObject.dockerBuildargEnvMap[key]]; const targetValue = process.env[NpmciConfig.configObject.dockerBuildargEnvMap[key]];
buildArgsString = `${buildArgsString} --build-arg ${key}=${targetValue}`; buildArgsString = `${buildArgsString} --build-arg ${key}="${targetValue}"`;
} }
return buildArgsString; return buildArgsString;
}; };

View File

@@ -3,6 +3,8 @@ import * as plugins from './mod.plugins';
import { bash } from '../npmci.bash'; import { bash } from '../npmci.bash';
import { repo } from '../npmci.env'; import { repo } from '../npmci.env';
import { configObject } from '../npmci.config';
/** /**
* handle cli input * handle cli input
* @param argvArg * @param argvArg
@@ -15,10 +17,10 @@ export let handleCli = async argvArg => {
await mirror(); await mirror();
break; break;
default: default:
logger.log('error', `>>npmci git ...<< action >>${action}<< not supported`); logger.log('error', `npmci git -> action >>${action}<< not supported!`);
} }
} else { } else {
logger.log('info', `>>npmci git ...<< cli arguments invalid... Please read the documentation.`); logger.log('info', `npmci git -> cli arguments invalid! Please read the documentation.`);
} }
}; };
@@ -26,6 +28,16 @@ export let mirror = async () => {
const githubToken = process.env.NPMCI_GIT_GITHUBTOKEN; const githubToken = process.env.NPMCI_GIT_GITHUBTOKEN;
const githubUser = process.env.NPMCI_GIT_GITHUBGROUP || repo.user; const githubUser = process.env.NPMCI_GIT_GITHUBGROUP || repo.user;
const githubRepo = process.env.NPMCI_GIT_GITHUB || repo.repo; const githubRepo = process.env.NPMCI_GIT_GITHUB || repo.repo;
if (
configObject.projectInfo.npm.packageJson.private === true ||
configObject.npmAccessLevel === 'private'
) {
logger.log(
'warn',
`refusing to mirror due to private property use a private mirror location instead`
);
return;
}
if (githubToken) { if (githubToken) {
logger.log('info', 'found github token.'); logger.log('info', 'found github token.');
logger.log('info', 'attempting the mirror the repository to GitHub'); logger.log('info', 'attempting the mirror the repository to GitHub');

View File

@@ -39,12 +39,17 @@ export let handleCli = async argvArg => {
const prepare = async () => { const prepare = async () => {
const config = await configModule.getConfig(); const config = await configModule.getConfig();
let npmrcFileString: string = ''; let npmrcFileString: string = '';
plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_TOKEN_NPM*', npmEnvArg => { await plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_TOKEN_NPM*', npmEnvArg => {
const npmRegistryUrl = npmEnvArg.split('|')[0]; const npmRegistryUrl = npmEnvArg.split('|')[0];
const npmToken = npmEnvArg.split('|')[1]; const npmToken = npmEnvArg.split('|')[1];
npmrcFileString = `//${npmRegistryUrl}/:_authToken="${npmToken}"\n`; npmrcFileString += `//${npmRegistryUrl}/:_authToken="${plugins.smartstring.base64.decode(
npmToken
)}"\n`;
}); });
logger.log('info', `setting default npm registry to ${config.npmRegistryUrl}`);
npmrcFileString += `registry=https://${config.npmRegistryUrl}\n`;
// final check
if (npmrcFileString.length > 0) { if (npmrcFileString.length > 0) {
logger.log('info', 'found one or more access tokens'); logger.log('info', 'found one or more access tokens');
} else { } else {
@@ -52,9 +57,8 @@ const prepare = async () => {
process.exit(1); process.exit(1);
} }
// lets save it to disk
plugins.smartfile.memory.toFsSync(npmrcFileString, '/root/.npmrc'); plugins.smartfile.memory.toFsSync(npmrcFileString, '/root/.npmrc');
logger.log('info', `setting default npm registry to ${config.npmRegistryUrl}`);
await bash(`npm set registry https://${config.npmRegistryUrl}`);
return; return;
}; };
@@ -76,7 +80,7 @@ const publish = async () => {
// -> configure registry url // -> configure registry url
if (config.npmRegistryUrl) { if (config.npmRegistryUrl) {
npmAccessCliString = `--registry=${config.npmRegistryUrl}`; npmRegistryCliString = `--registry=https://${config.npmRegistryUrl}`;
} else { } else {
logger.log('error', `no registry url specified. Can't publish!`); logger.log('error', `no registry url specified. Can't publish!`);
process.exit(1); process.exit(1);

View File

@@ -6,7 +6,7 @@ const triggerValueRegex = /^([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)\|([a-zA-Z0-9\.]*)
export let trigger = async () => { export let trigger = async () => {
logger.log('info', 'now running triggers'); logger.log('info', 'now running triggers');
plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_TRIGGER_*', evaluateTrigger); await plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_TRIGGER_*', evaluateTrigger);
}; };
const evaluateTrigger = async triggerEnvVarArg => { const evaluateTrigger = async triggerEnvVarArg => {

View File

@@ -6,9 +6,10 @@ import { repo } from './npmci.env';
import { KeyValueStore } from '@pushrocks/npmextra'; import { KeyValueStore } from '@pushrocks/npmextra';
export interface INpmciOptions { export interface INpmciOptions {
projectInfo: plugins.projectinfo.ProjectInfo;
npmGlobalTools: string[]; npmGlobalTools: string[];
npmAccessLevel?: 'private' | 'public'; npmAccessLevel?: 'private' | 'public';
npmRegistryUrl?: string; npmRegistryUrl: string;
dockerRegistryRepoMap: any; dockerRegistryRepoMap: any;
dockerBuildargEnvMap: any; dockerBuildargEnvMap: any;
} }
@@ -19,8 +20,11 @@ export let kvStorage = new KeyValueStore('custom', `${repo.user}_${repo.repo}`);
// handle config retrival // handle config retrival
const npmciNpmextra = new plugins.npmextra.Npmextra(paths.cwd); const npmciNpmextra = new plugins.npmextra.Npmextra(paths.cwd);
const defaultConfig: INpmciOptions = { const defaultConfig: INpmciOptions = {
projectInfo: new plugins.projectinfo.ProjectInfo(paths.cwd),
npmGlobalTools: [], npmGlobalTools: [],
dockerRegistryRepoMap: {}, dockerRegistryRepoMap: {},
npmAccessLevel: 'private',
npmRegistryUrl: 'registry.npmjs.org',
dockerBuildargEnvMap: {} dockerBuildargEnvMap: {}
}; };
export let configObject = npmciNpmextra.dataFor<INpmciOptions>('npmci', defaultConfig); export let configObject = npmciNpmextra.dataFor<INpmciOptions>('npmci', defaultConfig);

View File

@@ -2,7 +2,7 @@ import { logger } from './npmci.logging';
import * as plugins from './npmci.plugins'; import * as plugins from './npmci.plugins';
import * as env from './npmci.env'; import * as env from './npmci.env';
import { Analytics } from 'smartanalytics'; import { Analytics } from '@pushrocks/smartanalytics';
export let npmciAnalytics = new Analytics({ export let npmciAnalytics = new Analytics({
apiEndPoint: 'https://pubapi.lossless.one/analytics', apiEndPoint: 'https://pubapi.lossless.one/analytics',

View File

@@ -15,7 +15,7 @@ import * as smartparam from '@pushrocks/smartparam';
import * as smartpromise from '@pushrocks/smartpromise'; import * as smartpromise from '@pushrocks/smartpromise';
import * as smartrequest from '@pushrocks/smartrequest'; import * as smartrequest from '@pushrocks/smartrequest';
import * as smartshell from '@pushrocks/smartshell'; import * as smartshell from '@pushrocks/smartshell';
import * as smartsocket from 'smartsocket'; import * as smartsocket from '@pushrocks/smartsocket';
import * as smartssh from '@pushrocks/smartssh'; import * as smartssh from '@pushrocks/smartssh';
import * as smartstring from '@pushrocks/smartstring'; import * as smartstring from '@pushrocks/smartstring';