Compare commits
	
		
			55 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 91288e2d74 | |||
| 25709b1f9a | |||
| 8a03d9aa94 | |||
| bbe1cf770a | |||
| ac8190282f | |||
| 446d140e32 | |||
| 726948651e | |||
| dd0a7bb782 | |||
| fca00ffcf8 | |||
| 13f6334ae5 | |||
| 7275a858d6 | |||
| 5a3befe5af | |||
| 385a93a05e | |||
| b4d444ff05 | |||
| 487bcb9a70 | |||
| aaf11b66d7 | |||
| 83d7d46896 | |||
| 693bda6a49 | |||
| bfe3e266ee | |||
| 5f33ebd8a7 | |||
| f78c80e100 | |||
| f4d8656831 | |||
| 2290081ef0 | |||
| 189d02a16f | |||
| 55aee04334 | |||
| 0e407b9b9d | |||
| 24095bbd40 | |||
| f97ee94b5a | |||
| 4cf7aea374 | |||
| 6ab5e9cb30 | |||
| 95c1145bf5 | |||
| ea04a1b788 | |||
| 3bc2499d09 | |||
| 1f5967ac45 | |||
| fd952f086b | |||
| 79500cb2c2 | |||
| 6c58864fcf | |||
| 7ea3ac182d | |||
| 8979d26005 | |||
| c8876dac88 | |||
| 9c8a257c2a | |||
| 8b77930ece | |||
| ba672d030f | |||
| 8ad7e016e7 | |||
| d843311d7b | |||
| 14ef2cfa9b | |||
| 648effcf86 | |||
| 572738e88f | |||
| 129ae93044 | |||
| e910892231 | |||
| 6d9cabf7ee | |||
| 7c7787e811 | |||
| bde26cc312 | |||
| 29e81f3ae7 | |||
| 6337b20d62 | 
| @@ -1,7 +1,5 @@ | ||||
| # gitzone ci_default | ||||
| image: registry.gitlab.com/hosttoday/ht-docker-node:npmci | ||||
| variables: | ||||
|   GIT_STRATEGY: clone | ||||
|  | ||||
| cache: | ||||
|   paths: | ||||
| @@ -102,7 +100,7 @@ trigger: | ||||
| pages: | ||||
|   image: hosttoday/ht-docker-dbase:npmci | ||||
|   services: | ||||
|    - docker:18-dind | ||||
|    - docker:stable-dind | ||||
|   stage: metadata | ||||
|   script: | ||||
|     - npmci command npm install -g @gitzone/tsdoc | ||||
|   | ||||
							
								
								
									
										729
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										729
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										38
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "@shipzone/npmci", | ||||
|   "version": "3.1.42", | ||||
|   "version": "3.1.70", | ||||
|   "private": false, | ||||
|   "description": "node and docker in gitlab ci on steroids", | ||||
|   "main": "dist/index.js", | ||||
| @@ -9,8 +9,8 @@ | ||||
|     "npmci": "cli.js" | ||||
|   }, | ||||
|   "scripts": { | ||||
|     "test": "(rm -f config.json) && tstest test/", | ||||
|     "build": "(rm -f config.json) && tsbuild && (npm run testVersion)", | ||||
|     "test": "tstest test/", | ||||
|     "build": "tsbuild && (npm run testVersion)", | ||||
|     "testVersion": "(cd test/assets/ && node ../../cli.js -v)" | ||||
|   }, | ||||
|   "repository": { | ||||
| @@ -26,33 +26,33 @@ | ||||
|   "devDependencies": { | ||||
|     "@gitzone/tsbuild": "^2.1.17", | ||||
|     "@gitzone/tsrun": "^1.2.6", | ||||
|     "@gitzone/tstest": "^1.0.24", | ||||
|     "@pushrocks/tapbundle": "^3.0.13", | ||||
|     "@types/node": "^12.7.2", | ||||
|     "tslint": "^5.19.0", | ||||
|     "@gitzone/tstest": "^1.0.28", | ||||
|     "@pushrocks/tapbundle": "^3.2.0", | ||||
|     "@types/node": "^12.12.12", | ||||
|     "tslint": "^5.20.1", | ||||
|     "tslint-config-prettier": "^1.18.0" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@apiglobal/typedrequest": "^1.0.24", | ||||
|     "@pushrocks/lik": "^3.0.11", | ||||
|     "@pushrocks/npmextra": "^3.0.5", | ||||
|     "@pushrocks/npmextra": "^3.0.7", | ||||
|     "@pushrocks/projectinfo": "^4.0.2", | ||||
|     "@pushrocks/qenv": "^4.0.2", | ||||
|     "@pushrocks/qenv": "^4.0.6", | ||||
|     "@pushrocks/smartanalytics": "^2.0.15", | ||||
|     "@pushrocks/smartcli": "^3.0.7", | ||||
|     "@pushrocks/smartdelay": "^2.0.3", | ||||
|     "@pushrocks/smartfile": "^7.0.2", | ||||
|     "@pushrocks/smartdelay": "^2.0.6", | ||||
|     "@pushrocks/smartfile": "^7.0.6", | ||||
|     "@pushrocks/smartgit": "^1.0.13", | ||||
|     "@pushrocks/smartlog": "^2.0.19", | ||||
|     "@pushrocks/smartlog": "^2.0.21", | ||||
|     "@pushrocks/smartlog-destination-local": "^8.0.2", | ||||
|     "@pushrocks/smartparam": "^1.0.4", | ||||
|     "@pushrocks/smartpromise": "^3.0.2", | ||||
|     "@pushrocks/smartrequest": "^1.1.23", | ||||
|     "@pushrocks/smartshell": "^2.0.23", | ||||
|     "@pushrocks/smartsocket": "^1.1.45", | ||||
|     "@pushrocks/smartpromise": "^3.0.6", | ||||
|     "@pushrocks/smartrequest": "^1.1.43", | ||||
|     "@pushrocks/smartshell": "^2.0.25", | ||||
|     "@pushrocks/smartsocket": "^1.1.58", | ||||
|     "@pushrocks/smartssh": "^1.2.3", | ||||
|     "@pushrocks/smartstring": "^3.0.10", | ||||
|     "@servezone/servezone-interfaces": "^2.0.28", | ||||
|     "@types/shelljs": "^0.8.5", | ||||
|     "@pushrocks/smartstring": "^3.0.14", | ||||
|     "@servezone/servezone-interfaces": "^2.0.51", | ||||
|     "@types/through2": "^2.0.34", | ||||
|     "through2": "^3.0.1" | ||||
|   }, | ||||
|   | ||||
							
								
								
									
										26
									
								
								test/test.ts
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								test/test.ts
									
									
									
									
									
								
							| @@ -29,28 +29,34 @@ let sortableArray: npmci.Dockerfile[]; | ||||
|  | ||||
| tap.test('should return valid Dockerfiles', async () => { | ||||
|   const npmciInstance = new npmci.Npmci(); | ||||
|   dockerfile1 = new npmci.Dockerfile(npmciInstance.dockerManager, { filePath: './Dockerfile', read: true }); | ||||
|   dockerfile2 = new npmci.Dockerfile(npmciInstance.dockerManager, { filePath: './Dockerfile_sometag1', read: true }); | ||||
|   dockerfile1 = new npmci.Dockerfile(npmciInstance.dockerManager, { | ||||
|     filePath: './Dockerfile', | ||||
|     read: true | ||||
|   }); | ||||
|   dockerfile2 = new npmci.Dockerfile(npmciInstance.dockerManager, { | ||||
|     filePath: './Dockerfile_sometag1', | ||||
|     read: true | ||||
|   }); | ||||
|   expect(dockerfile1.version).to.equal('latest'); | ||||
|   return expect(dockerfile2.version).to.equal('sometag1'); | ||||
| }); | ||||
|  | ||||
| tap.test('should read a directory of Dockerfiles', async () => { | ||||
|   const npmciInstance = new npmci.Npmci(); | ||||
|   return npmci.Dockerfile | ||||
|     .readDockerfiles(npmciInstance.dockerManager) | ||||
|     .then(async (readDockerfilesArrayArg: npmci.Dockerfile[]) => { | ||||
|   return npmci.Dockerfile.readDockerfiles(npmciInstance.dockerManager).then( | ||||
|     async (readDockerfilesArrayArg: npmci.Dockerfile[]) => { | ||||
|       sortableArray = readDockerfilesArrayArg; | ||||
|       return expect(readDockerfilesArrayArg[1].version).to.equal('sometag1'); | ||||
|     }); | ||||
|     } | ||||
|   ); | ||||
| }); | ||||
|  | ||||
| tap.test('should sort an array of Dockerfiles', async () => { | ||||
|   return npmci.Dockerfile | ||||
|     .sortDockerfiles(sortableArray) | ||||
|     .then(async (sortedArrayArg: npmci.Dockerfile[]) => { | ||||
|   return npmci.Dockerfile.sortDockerfiles(sortableArray).then( | ||||
|     async (sortedArrayArg: npmci.Dockerfile[]) => { | ||||
|       console.log(sortedArrayArg); | ||||
|     }); | ||||
|     } | ||||
|   ); | ||||
| }); | ||||
|  | ||||
| tap.test('should build all Dockerfiles', async () => { | ||||
|   | ||||
| @@ -1,8 +1,32 @@ | ||||
| import * as plugins from '../npmci.plugins'; | ||||
|  | ||||
| import { Npmci } from '../npmci.classes.npmci'; | ||||
| import { logger } from '../npmci.logging'; | ||||
|  | ||||
| /** | ||||
|  *  | ||||
|  * connects to cloudly | ||||
|  */ | ||||
| export class CloudlyConnector { | ||||
|   public npmciRef: Npmci; | ||||
|  | ||||
|   constructor(npmciRefArg: Npmci) { | ||||
|     this.npmciRef = npmciRefArg; | ||||
|   } | ||||
|  | ||||
|   public async announceDockerContainer(optionsArg: plugins.servezoneInterfaces.version.IVersionData) { | ||||
|     const cloudlyUrl = this.npmciRef.npmciConfig.getConfig().urlCloudly; | ||||
|     if (!cloudlyUrl) { | ||||
|       logger.log( | ||||
|         'warn', | ||||
|         'no cloudly url provided. Thus we cannot announce the newly built Dockerimage!' | ||||
|       ); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     const typedrequest = new plugins.typedrequest.TypedRequest< | ||||
|       plugins.servezoneInterfaces.request.version.IRequest_Any_Cloudly_VersionManager_Update | ||||
|     >(`https://${cloudlyUrl}/versionmanager`, 'update'); | ||||
|  | ||||
|     const response = await typedrequest.fire(optionsArg); | ||||
|   } | ||||
| } | ||||
| @@ -50,7 +50,7 @@ export class NpmciDockerManager { | ||||
|         `>>npmci docker ...<< cli arguments invalid... Please read the documentation.` | ||||
|       ); | ||||
|     } | ||||
|   } | ||||
|   }; | ||||
|  | ||||
|   /** | ||||
|    * builds a cwd of Dockerfiles by triggering a promisechain | ||||
| @@ -62,7 +62,7 @@ export class NpmciDockerManager { | ||||
|       .then(Dockerfile.sortDockerfiles) | ||||
|       .then(Dockerfile.mapDockerfiles) | ||||
|       .then(Dockerfile.buildDockerfiles); | ||||
|   } | ||||
|   }; | ||||
|  | ||||
|   /** | ||||
|    * login to the DockerRegistries | ||||
| @@ -70,7 +70,7 @@ export class NpmciDockerManager { | ||||
|   public login = async () => { | ||||
|     await this.prepare(); | ||||
|     await this.npmciRegistryStorage.loginAll(); | ||||
|   } | ||||
|   }; | ||||
|  | ||||
|   /** | ||||
|    * logs in docker | ||||
| @@ -98,7 +98,7 @@ export class NpmciDockerManager { | ||||
|       } | ||||
|     ); | ||||
|     return; | ||||
|   } | ||||
|   }; | ||||
|  | ||||
|   /** | ||||
|    * pushes an image towards a registry | ||||
| @@ -146,7 +146,7 @@ export class NpmciDockerManager { | ||||
|         await dockerfile.push(dockerRegistryToPushTo, suffix); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   }; | ||||
|  | ||||
|   /** | ||||
|    * pulls an image | ||||
| @@ -165,7 +165,7 @@ export class NpmciDockerManager { | ||||
|     for (const dockerfile of dockerfileArray) { | ||||
|       await dockerfile.pull(localDockerRegistry, suffix); | ||||
|     } | ||||
|   } | ||||
|   }; | ||||
|  | ||||
|   /** | ||||
|    * tests docker files | ||||
| @@ -173,5 +173,5 @@ export class NpmciDockerManager { | ||||
|   public test = async () => { | ||||
|     await this.prepare(); | ||||
|     return await Dockerfile.readDockerfiles(this).then(Dockerfile.testDockerfiles); | ||||
|   } | ||||
|   }; | ||||
| } | ||||
|   | ||||
| @@ -214,6 +214,7 @@ export class Dockerfile { | ||||
|   public version: string; | ||||
|   public cleanTag: string; | ||||
|   public buildTag: string; | ||||
|   public pushTag: string; | ||||
|   public containerName: string; | ||||
|   public content: string; | ||||
|   public baseImage: string; | ||||
| @@ -248,7 +249,9 @@ export class Dockerfile { | ||||
|   public async build() { | ||||
|     logger.log('info', 'now building Dockerfile for ' + this.cleanTag); | ||||
|     const buildArgsString = await Dockerfile.getDockerBuildArgs(this.npmciDockerManagerRef); | ||||
|     const buildCommand = `docker build -t ${this.buildTag} -f ${this.filePath} ${buildArgsString} .`; | ||||
|     const buildCommand = `docker build --label="version=${ | ||||
|       this.npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().projectInfo.npm.version | ||||
|     }" -t ${this.buildTag} -f ${this.filePath} ${buildArgsString} .`; | ||||
|     await bash(buildCommand); | ||||
|     return; | ||||
|   } | ||||
| @@ -257,15 +260,24 @@ export class Dockerfile { | ||||
|    * pushes the Dockerfile to a registry | ||||
|    */ | ||||
|   public async push(dockerRegistryArg: DockerRegistry, versionSuffix: string = null) { | ||||
|     const pushTag = Dockerfile.getDockerTagString( | ||||
|     this.pushTag = Dockerfile.getDockerTagString( | ||||
|       this.npmciDockerManagerRef, | ||||
|       dockerRegistryArg.registryUrl, | ||||
|       this.repo, | ||||
|       this.version, | ||||
|       versionSuffix | ||||
|     ); | ||||
|     await bash(`docker tag ${this.buildTag} ${pushTag}`); | ||||
|     await bash(`docker push ${pushTag}`); | ||||
|     await bash(`docker tag ${this.buildTag} ${this.pushTag}`); | ||||
|     await bash(`docker push ${this.pushTag}`); | ||||
|     const imageDigest = (await bash( | ||||
|       `docker inspect --format="{{index .RepoDigests 0}}" ${this.pushTag}` | ||||
|     )).split('@')[1]; | ||||
|     console.log(`The image ${this.pushTag} has digest ${imageDigest}`); | ||||
|     await this.npmciDockerManagerRef.npmciRef.cloudlyConnector.announceDockerContainer({ | ||||
|       dockerImageUrl: this.pushTag, | ||||
|       dockerImageVersion: this.npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().projectInfo | ||||
|         .npm.version | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|   | ||||
| @@ -3,4 +3,3 @@ import * as plugins from './mod.plugins'; | ||||
| import * as paths from '../npmci.paths'; | ||||
|  | ||||
| import { Dockerfile } from './mod.classes.dockerfile'; | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import { logger } from '../npmci.logging'; | ||||
| import * as plugins from './mod.plugins'; | ||||
| import { bash } from '../npmci.bash'; | ||||
| import { bash, bashNoError } from '../npmci.bash'; | ||||
| import { Npmci } from '../npmci.classes.npmci'; | ||||
|  | ||||
| export class NpmciGitManager { | ||||
| @@ -27,12 +27,12 @@ export class NpmciGitManager { | ||||
|     } else { | ||||
|       logger.log('info', `npmci git -> cli arguments invalid! Please read the documentation.`); | ||||
|     } | ||||
|   } | ||||
|   }; | ||||
|  | ||||
|   public mirror = async () => { | ||||
|     const githubToken = process.env.NPMCI_GIT_GITHUBTOKEN; | ||||
|     const githubUser = process.env.NPMCI_GIT_GITHUBGROUP || this.npmciRef.npmciEnv.repo.user; | ||||
|     const githubRepo = process.env.NPMCI_GIT_GITHUB || this.npmciRef.npmciEnv.repo; | ||||
|     const githubRepo = process.env.NPMCI_GIT_GITHUB || this.npmciRef.npmciEnv.repo.repo; | ||||
|     if ( | ||||
|       this.npmciRef.npmciConfig.getConfig().projectInfo.npm.packageJson.private === true || | ||||
|       this.npmciRef.npmciConfig.getConfig().npmAccessLevel === 'private' | ||||
| @@ -47,19 +47,25 @@ export class NpmciGitManager { | ||||
|       logger.log('info', 'found github token.'); | ||||
|       logger.log('info', 'attempting the mirror the repository to GitHub'); | ||||
|  | ||||
|       // plugins.smartgit.GitRepo; | ||||
|       // remove old mirrors | ||||
|       await bashNoError('git remote rm mirror'); | ||||
|  | ||||
|       await bash(`git fetch`); | ||||
|       // add the mirror | ||||
|       await bash( | ||||
|       await bashNoError( | ||||
|         `git remote add mirror https://${githubToken}@github.com/${githubUser}/${githubRepo}.git` | ||||
|       ); | ||||
|       await bash(`git push mirror --all`); | ||||
|       await bashNoError(`git push mirror --all`); | ||||
|       await bashNoError(`git checkout origin/master`); | ||||
|       await bashNoError(`git push mirror master`); | ||||
|       logger.log('ok', 'pushed all branches to mirror!'); | ||||
|       await bash(`git push mirror --tags`); | ||||
|       await bashNoError(`git push mirror --tags`); | ||||
|       logger.log('ok', 'pushed all tags to mirror!'); | ||||
|       // remove old mirrors | ||||
|       await bashNoError('git remote rm mirror'); | ||||
|     } else { | ||||
|       logger.log('error', `cannot find NPMCI_GIT_GITHUBTOKEN env var!`); | ||||
|       process.exit(1); | ||||
|     } | ||||
|   } | ||||
|   }; | ||||
| } | ||||
|   | ||||
| @@ -22,6 +22,9 @@ export class NpmciNpmManager { | ||||
|         case 'install': | ||||
|           await this.install(); | ||||
|           break; | ||||
|         case 'build': | ||||
|             await this.build(); | ||||
|             break; | ||||
|         case 'prepare': | ||||
|           await this.prepare(); | ||||
|           break; | ||||
| @@ -133,8 +136,8 @@ export class NpmciNpmManager { | ||||
|     await bash(`npm -v`); | ||||
|  | ||||
|     // -> build it | ||||
|     await bash(`npm install`); | ||||
|     await bash(`npm run build`); | ||||
|     await this.install(); | ||||
|     await this.build(); | ||||
|  | ||||
|     logger.log('success', `Nice!!! The build for the publication was successfull!`); | ||||
|     logger.log('info', `Lets clean up so we don't publish any packages that don't belong to us:`); | ||||
| @@ -152,7 +155,12 @@ export class NpmciNpmManager { | ||||
|  | ||||
|   public async install(): Promise<void> { | ||||
|     logger.log('info', 'now installing dependencies:'); | ||||
|     await bash('npm install'); | ||||
|     await bash('npm ci'); | ||||
|   } | ||||
|  | ||||
|   public async build(): Promise<void> { | ||||
|     logger.log('info', 'now building the project:'); | ||||
|     await bash('npm run build'); | ||||
|   } | ||||
|  | ||||
|   public async test(): Promise<void> { | ||||
|   | ||||
| @@ -34,7 +34,7 @@ export class Npmci { | ||||
|       projectId: 'gitzone', | ||||
|       appName: 'npmci' | ||||
|     }); | ||||
|     this.cloudlyConnector = new CloudlyConnector(); | ||||
|     this.cloudlyConnector = new CloudlyConnector(this); | ||||
|     this.npmciEnv = new NpmciEnv(this); | ||||
|     this.npmciInfo = new NpmciInfo(this); | ||||
|     this.npmciCli = new NpmciCli(this); | ||||
|   | ||||
| @@ -106,5 +106,5 @@ export class NpmciCli { | ||||
|  | ||||
|   public startParse = () => { | ||||
|     this.smartcli.startParse(); | ||||
|   } | ||||
|   }; | ||||
| } | ||||
|   | ||||
| @@ -1,10 +1,9 @@ | ||||
| import * as plugins from './npmci.plugins'; | ||||
| import * as paths from './npmci.paths'; | ||||
| import { logger } from "./npmci.logging"; | ||||
| import { logger } from './npmci.logging'; | ||||
| import { Npmci } from './npmci.classes.npmci'; | ||||
|  | ||||
| export class NpmciInfo { | ||||
|  | ||||
|   public npmciRef: Npmci; | ||||
|   public projectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.NpmciPackageRoot); | ||||
|  | ||||
| @@ -12,7 +11,7 @@ export class NpmciInfo { | ||||
|     this.npmciRef = npmciArg; | ||||
|   } | ||||
|  | ||||
|   public printToConsole () { | ||||
|   public printToConsole() { | ||||
|     logger.log('info', `npmci version: ${this.projectInfo.version}`); | ||||
|   } | ||||
| } | ||||
| @@ -3,12 +3,15 @@ import * as path from 'path'; | ||||
|  | ||||
| export { path }; | ||||
|  | ||||
| // @apiglobal | ||||
| import * as typedrequest from '@apiglobal/typedrequest'; | ||||
|  | ||||
| export { typedrequest }; | ||||
|  | ||||
| // @servezone | ||||
| import * as servezoneInterfaces from '@servezone/servezone-interfaces'; | ||||
|  | ||||
| export { | ||||
|   servezoneInterfaces | ||||
| }; | ||||
| export { servezoneInterfaces }; | ||||
|  | ||||
| // @pushrocks | ||||
| import * as npmextra from '@pushrocks/npmextra'; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user