Compare commits
	
		
			10 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 59d8338f6e | |||
| a4f8bd3320 | |||
| 7c2fdb7224 | |||
| 37384aeb57 | |||
| 60efda263f | |||
| 19831037ec | |||
| a1d52af813 | |||
| 0a49ff9b03 | |||
| ca62326b46 | |||
| e1de0ee479 | 
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -8,9 +8,12 @@ pages/ | |||||||
| # installs | # installs | ||||||
| node_modules/ | node_modules/ | ||||||
|  |  | ||||||
| # caches and builds | # caches | ||||||
| .yarn/ | .yarn/ | ||||||
| .cache/ | .cache/ | ||||||
|  | .rpt2_cache | ||||||
|  |  | ||||||
|  | # builds | ||||||
| dist/ | dist/ | ||||||
| dist_web/ | dist_web/ | ||||||
| dist_serve/ | dist_serve/ | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| # gitzone ci_default | # gitzone ci_default | ||||||
| image: hosttoday/ht-docker-node:npmci | image: registry.gitlab.com/hosttoday/ht-docker-node:npmci | ||||||
|  |  | ||||||
| cache: | cache: | ||||||
|   paths: |   paths: | ||||||
| @@ -49,23 +49,11 @@ testLTS: | |||||||
|   tags: |   tags: | ||||||
|   - docker |   - docker | ||||||
|   - notpriv |   - notpriv | ||||||
|      |  | ||||||
| testSTABLE: |  | ||||||
|   stage: test |  | ||||||
|   script: |  | ||||||
|   - npmci npm prepare |  | ||||||
|   - npmci node install stable |  | ||||||
|   - npmci npm install |  | ||||||
|   - npmci npm test |  | ||||||
|   coverage: /\d+.?\d+?\%\s*coverage/ |  | ||||||
|   tags: |  | ||||||
|   - docker |  | ||||||
|   - notpriv |  | ||||||
|  |  | ||||||
| release: | release: | ||||||
|   stage: release |   stage: release | ||||||
|   script: |   script: | ||||||
|   - npmci node install stable |   - npmci node install lts | ||||||
|   - npmci npm publish |   - npmci npm publish | ||||||
|   only: |   only: | ||||||
|   - tags |   - tags | ||||||
| @@ -78,19 +66,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 +89,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 | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@shipzone/npmci", |   "name": "@shipzone/npmci", | ||||||
|   "version": "3.1.28", |   "version": "3.1.33", | ||||||
|   "lockfileVersion": 1, |   "lockfileVersion": 1, | ||||||
|   "requires": true, |   "requires": true, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@shipzone/npmci", |   "name": "@shipzone/npmci", | ||||||
|   "version": "3.1.28", |   "version": "3.1.33", | ||||||
|   "private": false, |   "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", | ||||||
|   | |||||||
| @@ -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,54 @@ 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! This is strange!` | ||||||
|  |       ); | ||||||
|  |     } | ||||||
|  |     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]; | ||||||
|   } |   } | ||||||
|   const dockerfileArray = await helpers |  | ||||||
|     .readDockerfiles() |   // lets push to the registries | ||||||
|     .then(helpers.sortDockerfiles) |   for (const dockerRegistryUrl of dockerRegistryUrls) { | ||||||
|     .then(helpers.mapDockerfiles); |     const dockerfileArray = await helpers | ||||||
|   const localDockerRegistry = npmciRegistryStorage.getRegistryByUrl(registryUrlArg); |       .readDockerfiles() | ||||||
|   if (!localDockerRegistry) { |       .then(helpers.sortDockerfiles) | ||||||
|     logger.log( |       .then(helpers.mapDockerfiles); | ||||||
|       'error', |     const dockerRegistryToPushTo = npmciRegistryStorage.getRegistryByUrl(dockerRegistryUrl); | ||||||
|       `Cannot push to registry ${registryUrlArg}, because it was not found in the authenticated registry list.` |     if (!dockerRegistryToPushTo) { | ||||||
|     ); |       logger.log( | ||||||
|     process.exit(1); |         'error', | ||||||
|   } |         `Cannot push to registry ${dockerRegistryUrl}, because it was not found in the authenticated registry list.` | ||||||
|   for (const dockerfile of dockerfileArray) { |       ); | ||||||
|     await dockerfile.push(localDockerRegistry, suffix); |       process.exit(1); | ||||||
|  |     } | ||||||
|  |     for (const dockerfile of dockerfileArray) { | ||||||
|  |       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 +165,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`); | ||||||
|   | |||||||
| @@ -5,13 +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; |   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 | ||||||
| @@ -22,6 +30,7 @@ const npmciNpmextra = new plugins.npmextra.Npmextra(paths.cwd); | |||||||
| const defaultConfig: INpmciOptions = { | const defaultConfig: INpmciOptions = { | ||||||
|   projectInfo: new plugins.projectinfo.ProjectInfo(paths.cwd), |   projectInfo: new plugins.projectinfo.ProjectInfo(paths.cwd), | ||||||
|   npmGlobalTools: [], |   npmGlobalTools: [], | ||||||
|  |   dockerRegistries: [], | ||||||
|   dockerRegistryRepoMap: {}, |   dockerRegistryRepoMap: {}, | ||||||
|   npmAccessLevel: 'private', |   npmAccessLevel: 'private', | ||||||
|   npmRegistryUrl: 'registry.npmjs.org', |   npmRegistryUrl: 'registry.npmjs.org', | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user