Compare commits
	
		
			36 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 60efda263f | |||
| 19831037ec | |||
| a1d52af813 | |||
| 0a49ff9b03 | |||
| ca62326b46 | |||
| e1de0ee479 | |||
| 0dea101c07 | |||
| 380a49c59f | |||
| 5133651e34 | |||
| c8f26c7c48 | |||
| 3bb5912046 | |||
| d75258d9dd | |||
| b1577e7542 | |||
| d5cdeffd17 | |||
| c62ce415e9 | |||
| 99014da1e8 | |||
| 0b5dada524 | |||
| 40bddba3b5 | |||
| 6f6ee6d799 | |||
| e30cc3f5a0 | |||
| a4562d4d1b | |||
| 524b405773 | |||
| 0d19c1c68d | |||
| cff79bc3b4 | |||
| 28541a838d | |||
| c3ab527341 | |||
| 52cc249098 | |||
| 2e189b0660 | |||
| f876c7414b | |||
| 08b7585cfc | |||
| 76311fab72 | |||
| 1b73df64f5 | |||
| 701cee573b | |||
| 3dd086f711 | |||
| 67ff5d09d4 | |||
| 5cb8a79b6a | 
							
								
								
									
										23
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,7 +1,22 @@ | |||||||
| dist/ | .nogit/ | ||||||
| node_modules/ |  | ||||||
|  | # artifacts | ||||||
| coverage/ | coverage/ | ||||||
| public/ | public/ | ||||||
| config.json | pages/ | ||||||
|  |  | ||||||
|  | # installs | ||||||
|  | node_modules/ | ||||||
|  |  | ||||||
|  | # caches | ||||||
| .yarn/ | .yarn/ | ||||||
| .npmci_cache | .cache/ | ||||||
|  | .rpt2_cache | ||||||
|  |  | ||||||
|  | # builds | ||||||
|  | dist/ | ||||||
|  | dist_web/ | ||||||
|  | dist_serve/ | ||||||
|  | dist_ts_web/ | ||||||
|  |  | ||||||
|  | # custom | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| # gitzone standard | # gitzone ci_default | ||||||
| image: hosttoday/ht-docker-node:npmci | image: hosttoday/ht-docker-node:npmci | ||||||
|  |  | ||||||
| cache: | cache: | ||||||
| @@ -78,19 +78,11 @@ release: | |||||||
| # ==================== | # ==================== | ||||||
| codequality: | codequality: | ||||||
|   stage: metadata |   stage: metadata | ||||||
|   image: docker:stable |  | ||||||
|   allow_failure: true |   allow_failure: true | ||||||
|   services: |  | ||||||
|     - docker:stable-dind |  | ||||||
|   script: |   script: | ||||||
|     - export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/') |     - npmci command npm install -g tslint typescript | ||||||
|     - docker run |     - npmci npm install | ||||||
|         --env SOURCE_CODE="$PWD" |     - npmci command "tslint -c tslint.json ./ts/**/*.ts" | ||||||
|         --volume "$PWD":/code |  | ||||||
|         --volume /var/run/docker.sock:/var/run/docker.sock |  | ||||||
|         "registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code |  | ||||||
|   artifacts: |  | ||||||
|     paths: [codeclimate.json] |  | ||||||
|   tags: |   tags: | ||||||
|   - docker |   - docker | ||||||
|   - priv |   - priv | ||||||
| @@ -109,10 +101,10 @@ pages: | |||||||
|   image: hosttoday/ht-docker-node:npmci |   image: hosttoday/ht-docker-node:npmci | ||||||
|   stage: metadata |   stage: metadata | ||||||
|   script: |   script: | ||||||
|     - npmci command npm install -g typedoc typescript |     - npmci command npm install -g @gitzone/tsdoc | ||||||
|     - npmci npm prepare |     - npmci npm prepare | ||||||
|     - npmci npm install |     - npmci npm install | ||||||
|     - npmci command typedoc --module "commonjs" --target "ES2016" --out public/ ts/ |     - npmci command tsdoc | ||||||
|   tags: |   tags: | ||||||
|     - docker |     - docker | ||||||
|     - notpriv |     - notpriv | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|     "npmts":{ |   "npmts": { | ||||||
|         "mode":"default", |     "mode": "default", | ||||||
|     "coverageTreshold": "70", |     "coverageTreshold": "70", | ||||||
|     "cli": true |     "cli": true | ||||||
|   }, |   }, | ||||||
| @@ -9,8 +9,18 @@ | |||||||
|     "npmAccessLevel": "public", |     "npmAccessLevel": "public", | ||||||
|     "npmRegistryUrl": "registry.npmjs.org" |     "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" | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
							
								
								
									
										2379
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2379
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										60
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,6 +1,7 @@ | |||||||
| { | { | ||||||
|   "name": "@shipzone/npmci", |   "name": "@shipzone/npmci", | ||||||
|   "version": "3.1.13", |   "version": "3.1.31", | ||||||
|  |   "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,43 @@ | |||||||
|   }, |   }, | ||||||
|   "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.24", | ||||||
|     "@pushrocks/tapbundle": "^3.0.7", |     "@pushrocks/tapbundle": "^3.0.9", | ||||||
|     "@types/node": "^10.12.10", |     "@types/node": "^12.0.8", | ||||||
|     "tslint": "^5.11.0", |     "tslint": "^5.17.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.5", | ||||||
|     "@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-destination-local": "^7.0.5", |     "@pushrocks/smartlog": "^2.0.19", | ||||||
|  |     "@pushrocks/smartlog-destination-local": "^8.0.2", | ||||||
|     "@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.16", | ||||||
|     "@pushrocks/smartshell": "^2.0.11", |     "@pushrocks/smartshell": "^2.0.23", | ||||||
|  |     "@pushrocks/smartsocket": "^1.1.38", | ||||||
|     "@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/shelljs": "^0.8.5", | ||||||
|     "@types/shelljs": "^0.8.0", |  | ||||||
|     "@types/through2": "^2.0.34", |     "@types/through2": "^2.0.34", | ||||||
|     "lodash": "^4.17.11", |     "through2": "^3.0.1" | ||||||
|     "smartanalytics": "^2.0.9", |  | ||||||
|     "smartsocket": "^1.1.19", |  | ||||||
|     "through2": "^3.0.0" |  | ||||||
|   }, |   }, | ||||||
|   "private": false |   "files": [ | ||||||
|  |     "ts/*", | ||||||
|  |     "ts_web/*", | ||||||
|  |     "dist/*", | ||||||
|  |     "dist_web/*", | ||||||
|  |     "assets/*", | ||||||
|  |     "cli.js", | ||||||
|  |     "npmextra.json", | ||||||
|  |     "readme.md" | ||||||
|  |   ] | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										37
									
								
								readme.md
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								readme.md
									
									
									
									
									
								
							| @@ -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) | ||||||
| [](https://www.npmjs.com/package/@shipzone/npmci) | * [gitlab.com (source)](https://gitlab.com/shipzone/npmci) | ||||||
| [](https://GitLab.com/shipzone/npmci) | * [github.com (source mirror)](https://github.com/shipzone/npmci) | ||||||
| [](https://github.com/shipzone/npmci) | * [docs (typedoc)](https://shipzone.gitlab.io/npmci/) | ||||||
| [](https://shipzone.gitlab.io/npmci/) |  | ||||||
|  |  | ||||||
| ## Status for master | ## Status for master | ||||||
|  | [](https://gitlab.com/shipzone/npmci/commits/master) | ||||||
| [](https://GitLab.com/shipzone/npmci/commits/master) | [](https://gitlab.com/shipzone/npmci/commits/master) | ||||||
| [](https://GitLab.com/shipzone/npmci/commits/master) | [](https://www.npmjs.com/package/@shipzone/npmci) | ||||||
| [](https://www.npmjs.com/package/@shipzone/npmci) | [](https://snyk.io/test/npm/@shipzone/npmci) | ||||||
| [](https://david-dm.org/shipzone/npmci) | [](https://nodejs.org/dist/latest-v10.x/docs/api/) | ||||||
| [](https://www.bithound.io/github/shipzone/npmci/master/dependencies/npm) | [](https://nodejs.org/dist/latest-v10.x/docs/api/) | ||||||
| [](https://www.bithound.io/github/shipzone/npmci) | [](https://prettier.io/) | ||||||
| [](https://nodejs.org/dist/latest-v6.x/docs/api/) |  | ||||||
| [](https://nodejs.org/dist/latest-v6.x/docs/api/) |  | ||||||
| [](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) | ||||||
|  |  | ||||||
| [](https://push.rocks) | [](https://maintainedby.lossless.com) | ||||||
|   | |||||||
| @@ -10,6 +10,9 @@ import { Dockerfile } from './mod.classes.dockerfile'; | |||||||
| import { DockerRegistry } from './mod.classes.dockerregistry'; | import { DockerRegistry } from './mod.classes.dockerregistry'; | ||||||
| import { RegistryStorage } from './mod.classes.registrystorage'; | import { RegistryStorage } from './mod.classes.registrystorage'; | ||||||
|  |  | ||||||
|  | // config | ||||||
|  | import { configObject } from '../npmci.config'; | ||||||
|  |  | ||||||
| // instances | // instances | ||||||
| const npmciRegistryStorage = new RegistryStorage(); | const npmciRegistryStorage = new RegistryStorage(); | ||||||
|  |  | ||||||
| @@ -21,7 +24,7 @@ export let modArgvArg; // will be set through the build command | |||||||
|  * handle cli input |  * handle cli input | ||||||
|  * @param argvArg |  * @param argvArg | ||||||
|  */ |  */ | ||||||
| export let handleCli = async argvArg => { | export const handleCli = async argvArg => { | ||||||
|   modArgvArg = argvArg; |   modArgvArg = argvArg; | ||||||
|   if (argvArg._.length >= 2) { |   if (argvArg._.length >= 2) { | ||||||
|     const action: string = argvArg._[1]; |     const action: string = argvArg._[1]; | ||||||
| @@ -56,7 +59,7 @@ export let handleCli = async argvArg => { | |||||||
| /** | /** | ||||||
|  * builds a cwd of Dockerfiles by triggering a promisechain |  * builds a cwd of Dockerfiles by triggering a promisechain | ||||||
|  */ |  */ | ||||||
| export let build = async () => { | export const build = async () => { | ||||||
|   await prepare(); |   await prepare(); | ||||||
|   logger.log('info', 'now building Dockerfiles...'); |   logger.log('info', 'now building Dockerfiles...'); | ||||||
|   await helpers |   await helpers | ||||||
| @@ -69,7 +72,7 @@ export let build = async () => { | |||||||
| /** | /** | ||||||
|  * login to the DockerRegistries |  * login to the DockerRegistries | ||||||
|  */ |  */ | ||||||
| export let login = async () => { | export const login = async () => { | ||||||
|   await prepare(); |   await prepare(); | ||||||
|   await npmciRegistryStorage.loginAll(); |   await npmciRegistryStorage.loginAll(); | ||||||
| }; | }; | ||||||
| @@ -77,7 +80,7 @@ export let login = async () => { | |||||||
| /** | /** | ||||||
|  * logs in docker |  * logs in docker | ||||||
|  */ |  */ | ||||||
| export let prepare = async () => { | export const prepare = async () => { | ||||||
|   // Always login to GitLab Registry |   // Always login to GitLab Registry | ||||||
|   if (!process.env.CI_BUILD_TOKEN || process.env.CI_BUILD_TOKEN === '') { |   if (!process.env.CI_BUILD_TOKEN || process.env.CI_BUILD_TOKEN === '') { | ||||||
|     logger.log('error', 'No registry token specified by gitlab!'); |     logger.log('error', 'No registry token specified by gitlab!'); | ||||||
| @@ -98,31 +101,51 @@ export let prepare = async () => { | |||||||
|   return; |   return; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| export let push = async argvArg => { | /** | ||||||
|  |  * pushes an image towards a registry | ||||||
|  |  * @param argvArg | ||||||
|  |  */ | ||||||
|  | export const push = async argvArg => { | ||||||
|   await prepare(); |   await prepare(); | ||||||
|   const registryUrlArg = argvArg._[2]; |   let dockerRegistryUrls: string[] = []; | ||||||
|  |  | ||||||
|  |   // lets parse the input of cli and npmextra | ||||||
|  |   if (argvArg._.length >= 3 && argvArg._[2] !== 'npmextra') { | ||||||
|  |     dockerRegistryUrls.push(argvArg._[2]); | ||||||
|  |   } else { | ||||||
|  |     if (configObject.dockerRegistries.length === 0) { | ||||||
|  |       logger.log('warn', `There are no docker registries listed in npmextra.json!`); | ||||||
|  |     } | ||||||
|  |     dockerRegistryUrls = dockerRegistryUrls.concat(configObject.dockerRegistries); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   // lets determine the suffix | ||||||
|   let suffix = null; |   let suffix = null; | ||||||
|   if (argvArg._.length >= 4) { |   if (argvArg._.length >= 4) { | ||||||
|     suffix = argvArg._[3]; |     suffix = argvArg._[3]; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   // lets push to the registries | ||||||
|  |   for (const dockerRegistryUrl of dockerRegistryUrls) { | ||||||
|     const dockerfileArray = await helpers |     const dockerfileArray = await helpers | ||||||
|       .readDockerfiles() |       .readDockerfiles() | ||||||
|       .then(helpers.sortDockerfiles) |       .then(helpers.sortDockerfiles) | ||||||
|       .then(helpers.mapDockerfiles); |       .then(helpers.mapDockerfiles); | ||||||
|   const localDockerRegistry = npmciRegistryStorage.getRegistryByUrl(registryUrlArg); |     const dockerRegistryToPushTo = npmciRegistryStorage.getRegistryByUrl(dockerRegistryUrl); | ||||||
|   if (!localDockerRegistry) { |     if (!dockerRegistryToPushTo) { | ||||||
|       logger.log( |       logger.log( | ||||||
|         'error', |         'error', | ||||||
|       `Cannot push to registry ${registryUrlArg}, because it was not found in the authenticated registry list.` |         `Cannot push to registry ${dockerRegistryUrl}, because it was not found in the authenticated registry list.` | ||||||
|       ); |       ); | ||||||
|       process.exit(1); |       process.exit(1); | ||||||
|     } |     } | ||||||
|     for (const dockerfile of dockerfileArray) { |     for (const dockerfile of dockerfileArray) { | ||||||
|     await dockerfile.push(localDockerRegistry, suffix); |       await dockerfile.push(dockerRegistryToPushTo, suffix); | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| }; | }; | ||||||
|  |  | ||||||
| export let pull = async argvArg => { | export const pull = async argvArg => { | ||||||
|   await prepare(); |   await prepare(); | ||||||
|   const registryUrlArg = argvArg._[2]; |   const registryUrlArg = argvArg._[2]; | ||||||
|   let suffix = null; |   let suffix = null; | ||||||
| @@ -139,7 +162,10 @@ export let pull = async argvArg => { | |||||||
|   } |   } | ||||||
| }; | }; | ||||||
|  |  | ||||||
| export let test = async () => { | /** | ||||||
|  |  * tests docker files | ||||||
|  |  */ | ||||||
|  | export const test = async () => { | ||||||
|   await prepare(); |   await prepare(); | ||||||
|   return await helpers.readDockerfiles().then(helpers.testDockerfiles); |   return await helpers.readDockerfiles().then(helpers.testDockerfiles); | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -42,9 +42,7 @@ export class Dockerfile { | |||||||
|   public async build() { |   public async build() { | ||||||
|     logger.log('info', 'now building Dockerfile for ' + this.cleanTag); |     logger.log('info', 'now building Dockerfile for ' + this.cleanTag); | ||||||
|     const buildArgsString = await helpers.getDockerBuildArgs(); |     const buildArgsString = await helpers.getDockerBuildArgs(); | ||||||
|     const buildCommand = `docker build -t ${this.buildTag} -f ${ |     const buildCommand = `docker build -t ${this.buildTag} -f ${this.filePath} ${buildArgsString} .`; | ||||||
|       this.filePath |  | ||||||
|     } ${buildArgsString} .`; |  | ||||||
|     await bash(buildCommand); |     await bash(buildCommand); | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
| @@ -86,9 +84,7 @@ export class Dockerfile { | |||||||
|     if (testFileExists) { |     if (testFileExists) { | ||||||
|       // run tests |       // run tests | ||||||
|       await bash( |       await bash( | ||||||
|         `docker run --name npmci_test_container --entrypoint="bash" ${ |         `docker run --name npmci_test_container --entrypoint="bash" ${this.buildTag} -c "mkdir /npmci_test"` | ||||||
|           this.buildTag |  | ||||||
|         } -c "mkdir /npmci_test"` |  | ||||||
|       ); |       ); | ||||||
|       await bash(`docker cp ${testFile} npmci_test_container:/npmci_test/test.sh`); |       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 commit npmci_test_container npmci_test_image`); | ||||||
|   | |||||||
| @@ -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; | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -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'); | ||||||
|   | |||||||
| @@ -36,7 +36,7 @@ export let install = async versionArg => { | |||||||
|   logger.log('info', `now installing node version ${versionArg}`); |   logger.log('info', `now installing node version ${versionArg}`); | ||||||
|   let version: string; |   let version: string; | ||||||
|   if (versionArg === 'stable') { |   if (versionArg === 'stable') { | ||||||
|     version = '11'; |     version = '12'; | ||||||
|   } else if (versionArg === 'lts') { |   } else if (versionArg === 'lts') { | ||||||
|     version = '10'; |     version = '10'; | ||||||
|   } else if (versionArg === 'legacy') { |   } else if (versionArg === 'legacy') { | ||||||
|   | |||||||
| @@ -39,10 +39,12 @@ 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="${plugins.smartstring.base64.decode(npmToken)}"\n`; |     npmrcFileString += `//${npmRegistryUrl}/:_authToken="${plugins.smartstring.base64.decode( | ||||||
|  |       npmToken | ||||||
|  |     )}"\n`; | ||||||
|   }); |   }); | ||||||
|   logger.log('info', `setting default npm registry to ${config.npmRegistryUrl}`); |   logger.log('info', `setting default npm registry to ${config.npmRegistryUrl}`); | ||||||
|   npmrcFileString += `registry=https://${config.npmRegistryUrl}\n`; |   npmrcFileString += `registry=https://${config.npmRegistryUrl}\n`; | ||||||
| @@ -78,7 +80,7 @@ const publish = async () => { | |||||||
|  |  | ||||||
|   // -> configure registry url |   // -> configure registry url | ||||||
|   if (config.npmRegistryUrl) { |   if (config.npmRegistryUrl) { | ||||||
|     npmAccessCliString = `--registry=https://${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); | ||||||
|   | |||||||
| @@ -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 => { | ||||||
|   | |||||||
| @@ -5,12 +5,21 @@ import { repo } from './npmci.env'; | |||||||
|  |  | ||||||
| import { KeyValueStore } from '@pushrocks/npmextra'; | import { KeyValueStore } from '@pushrocks/npmextra'; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * the main config interface for npmci | ||||||
|  |  */ | ||||||
| export interface INpmciOptions { | export interface INpmciOptions { | ||||||
|  |   projectInfo: plugins.projectinfo.ProjectInfo; | ||||||
|  |  | ||||||
|  |   // npm | ||||||
|   npmGlobalTools: string[]; |   npmGlobalTools: string[]; | ||||||
|   npmAccessLevel?: 'private' | 'public'; |   npmAccessLevel?: 'private' | 'public'; | ||||||
|   npmRegistryUrl?: string; |   npmRegistryUrl: string; | ||||||
|   dockerRegistryRepoMap: any; |  | ||||||
|   dockerBuildargEnvMap: any; |   // docker | ||||||
|  |   dockerRegistries: string[]; | ||||||
|  |   dockerRegistryRepoMap: { [key: string]: string }; | ||||||
|  |   dockerBuildargEnvMap: { [key: string]: string }; | ||||||
| } | } | ||||||
|  |  | ||||||
| // instantiate a kvStorage for the current directory | // instantiate a kvStorage for the current directory | ||||||
| @@ -19,8 +28,12 @@ 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: [], | ||||||
|  |   dockerRegistries: [], | ||||||
|   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); | ||||||
|   | |||||||
| @@ -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', | ||||||
|   | |||||||
| @@ -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'; | ||||||
|  |  | ||||||
| @@ -36,8 +36,6 @@ export { | |||||||
|   smartstring |   smartstring | ||||||
| }; | }; | ||||||
|  |  | ||||||
| // third party |  | ||||||
| import * as lodash from 'lodash'; |  | ||||||
| import * as through2 from 'through2'; | import * as through2 from 'through2'; | ||||||
|  |  | ||||||
| export { lodash, through2 }; | export { through2 }; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user