Compare commits
	
		
			8 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 0d4d69f072 | |||
| a3e628c43f | |||
| a58fa135c1 | |||
| 93c7af6c91 | |||
| ad0e12bf7b | |||
| 498dd6eff6 | |||
| b3aa964739 | |||
| 03eb9d2657 | 
| @@ -13,31 +13,24 @@ stages: | ||||
|   - metadata | ||||
|  | ||||
| before_script: | ||||
|   - pnpm install -g @shipzone/npmci pnpm | ||||
|   - pnpm install -g pnpm | ||||
|   - pnpm install -g @shipzone/npmci | ||||
|   - npmci npm prepare | ||||
|  | ||||
| # ==================== | ||||
| # security stage | ||||
| # ==================== | ||||
| mirror: | ||||
|   stage: security | ||||
|   script: | ||||
|     - npmci git mirror | ||||
|   only: | ||||
|     - tags | ||||
|   tags: | ||||
|     - lossless | ||||
|     - docker | ||||
|     - notpriv | ||||
|  | ||||
| # ==================== | ||||
| # security stage | ||||
| # ==================== | ||||
| auditProductionDependencies: | ||||
|   image: registry.gitlab.com/hosttoday/ht-docker-node:npmci | ||||
|   stage: security | ||||
|   script: | ||||
|     - npmci npm prepare | ||||
|     - npmci command npm install --production --ignore-scripts | ||||
|     - npmci command npm config set registry https://registry.npmjs.org | ||||
|     - npmci command npm audit --audit-level=high --only=prod --production | ||||
|      - npmci command npm config set registry https://registry.npmjs.org | ||||
|      - npmci command pnpm audit --audit-level=high --prod | ||||
|   tags: | ||||
|     - lossless | ||||
|     - docker | ||||
|   allow_failure: true | ||||
|  | ||||
| @@ -45,11 +38,10 @@ auditDevDependencies: | ||||
|   image: registry.gitlab.com/hosttoday/ht-docker-node:npmci | ||||
|   stage: security | ||||
|   script: | ||||
|     - npmci npm prepare | ||||
|     - npmci command npm install --ignore-scripts | ||||
|     - npmci command npm config set registry https://registry.npmjs.org | ||||
|     - npmci command npm audit --audit-level=high --only=dev | ||||
|     - npmci command pnpm audit --audit-level=high --dev | ||||
|   tags: | ||||
|     - lossless | ||||
|     - docker | ||||
|   allow_failure: true | ||||
|  | ||||
| @@ -60,7 +52,6 @@ auditDevDependencies: | ||||
| testStable: | ||||
|   stage: test | ||||
|   script: | ||||
|     - npmci npm prepare | ||||
|     - npmci node install stable | ||||
|     - npmci npm install | ||||
|     - npmci npm test | ||||
| @@ -71,7 +62,6 @@ testStable: | ||||
| testBuild: | ||||
|   stage: test | ||||
|   script: | ||||
|     - npmci npm prepare | ||||
|     - npmci node install stable | ||||
|     - npmci npm install | ||||
|     - npmci command npm run build | ||||
| @@ -100,10 +90,9 @@ codequality: | ||||
|   only: | ||||
|     - tags | ||||
|   script: | ||||
|     - npmci command npm install -g tslint typescript | ||||
|     - npmci command npm install -g typescript | ||||
|     - npmci npm prepare | ||||
|     - npmci npm install | ||||
|     - npmci command "tslint -c tslint.json ./ts/**/*.ts" | ||||
|   tags: | ||||
|     - lossless | ||||
|     - docker | ||||
| @@ -123,11 +112,9 @@ trigger: | ||||
| pages: | ||||
|   stage: metadata | ||||
|   script: | ||||
|     - npmci node install lts | ||||
|     - npmci command npm install -g @gitzone/tsdoc | ||||
|     - npmci npm prepare | ||||
|     - npmci node install stable | ||||
|     - npmci npm install | ||||
|     - npmci command tsdoc | ||||
|     - npmci command npm run buildDocs | ||||
|   tags: | ||||
|     - lossless | ||||
|     - docker | ||||
|   | ||||
| @@ -14,7 +14,7 @@ | ||||
|       "githost": "gitlab.com", | ||||
|       "gitscope": "shipzone", | ||||
|       "gitrepo": "npmci", | ||||
|       "shortDescription": "node and docker in gitlab ci on steroids", | ||||
|       "description": "node and docker in gitlab ci on steroids", | ||||
|       "npmPackagename": "@shipzone/npmci", | ||||
|       "license": "MIT" | ||||
|     } | ||||
|   | ||||
							
								
								
									
										13685
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										13685
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "@shipzone/npmci", | ||||
|   "version": "4.0.9", | ||||
|   "version": "4.1.1", | ||||
|   "private": false, | ||||
|   "description": "node and docker in gitlab ci on steroids", | ||||
|   "main": "dist_ts/index.js", | ||||
| @@ -12,7 +12,8 @@ | ||||
|   "scripts": { | ||||
|     "test": "tstest test/", | ||||
|     "build": "tsbuild --allowimplicitany && (npm run testVersion)", | ||||
|     "testVersion": "(cd test/assets/ && node ../../cli.js -v)" | ||||
|     "testVersion": "(cd test/assets/ && node ../../cli.js -v)", | ||||
|     "buildDocs": "tsdoc" | ||||
|   }, | ||||
|   "repository": { | ||||
|     "type": "git", | ||||
|   | ||||
| @@ -1,23 +1,26 @@ | ||||
| process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = '0'; | ||||
| process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0'; | ||||
| import { tap, expect } from '@pushrocks/tapbundle'; | ||||
|  | ||||
| import * as cloudlyConnectorMod from '../ts/connector.cloudly/cloudlyconnector.js'; | ||||
|  | ||||
| tap.test('should be able to announce a container to cloudly', async () => { | ||||
|   const cloudlyConnector = new cloudlyConnectorMod.CloudlyConnector(null); | ||||
|   await cloudlyConnector.announceDockerContainer({ | ||||
|     registryUrl: 'registry.losssless.com', | ||||
|     tag: 'testcontainer', | ||||
|     version: 'x.x.x', | ||||
|     labels: [] | ||||
|   }, 'cloudly.lossless.one') | ||||
|   await cloudlyConnector.announceDockerContainer( | ||||
|     { | ||||
|       registryUrl: 'registry.losssless.com', | ||||
|       tag: 'testcontainer', | ||||
|       version: 'x.x.x', | ||||
|       labels: [], | ||||
|     }, | ||||
|     'cloudly.lossless.one' | ||||
|   ); | ||||
| }); | ||||
|  | ||||
| tap.test('should close the program despite socket timeout', async (toolsArg) => { | ||||
|   // TODO: remove when unreffed timeouts in webrequest have been solved. | ||||
|   toolsArg.delayFor(0).then(() => { | ||||
|     process.exit(); | ||||
|   }) | ||||
| }) | ||||
|   }); | ||||
| }); | ||||
|  | ||||
| tap.start(); | ||||
| @@ -3,7 +3,7 @@ import * as path from 'path'; | ||||
| import * as smartpath from '@pushrocks/smartpath'; | ||||
|  | ||||
| process.env.NPMTS_TEST = 'true'; | ||||
| process.env.NPMCI_URL_CLOUDLY = 'localhost' | ||||
| process.env.NPMCI_URL_CLOUDLY = 'localhost'; | ||||
|  | ||||
| // set up environment | ||||
| process.env.CI_REPOSITORY_URL = 'https://yyyyyy:xxxxxxxx@gitlab.com/mygroup/myrepo.git'; | ||||
| @@ -23,7 +23,7 @@ let npmci: typeof import('../ts/index.js'); | ||||
|  | ||||
| tap.preTask('should import npmci', async () => { | ||||
|   npmci = await import('../ts/index.js'); | ||||
| }) | ||||
| }); | ||||
|  | ||||
| // ====== | ||||
| // Docker | ||||
|   | ||||
| @@ -3,6 +3,6 @@ | ||||
|  */ | ||||
| export const commitinfo = { | ||||
|   name: '@shipzone/npmci', | ||||
|   version: '4.0.9', | ||||
|   version: '4.1.1', | ||||
|   description: 'node and docker in gitlab ci on steroids' | ||||
| } | ||||
|   | ||||
| @@ -33,7 +33,7 @@ export class CloudlyConnector { | ||||
|       ); | ||||
|  | ||||
|     const response = await typedrequest.fire({ | ||||
|       containerImageInfo: optionsArg | ||||
|       containerImageInfo: optionsArg, | ||||
|     }); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -276,8 +276,7 @@ export class Dockerfile { | ||||
|       registryUrl: this.pushTag, | ||||
|       tag: this.buildTag, | ||||
|       labels: [], | ||||
|       version: | ||||
|         this.npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().projectInfo.npm.version, | ||||
|       version: this.npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().projectInfo.npm.version, | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -59,6 +59,7 @@ export class NpmciNpmManager { | ||||
|       'NPMCI_TOKEN_NPM*', | ||||
|       (npmEnvArg: string) => { | ||||
|         const npmRegistryUrl = npmEnvArg.split('|')[0]; | ||||
|         logger.log('ok', `found token for ${npmRegistryUrl}`); | ||||
|         let npmToken = npmEnvArg.split('|')[1]; | ||||
|         if (npmEnvArg.split('|')[2] && npmEnvArg.split('|')[2] === 'plain') { | ||||
|           logger.log('ok', 'npm token not base64 encoded.'); | ||||
|   | ||||
							
								
								
									
										24
									
								
								ts/mod_precheck/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								ts/mod_precheck/index.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| import * as plugins from './plugins.js'; | ||||
| import * as paths from '../npmci.paths.js'; | ||||
| import { logger } from '../npmci.logging.js'; | ||||
| import { Npmci } from '../npmci.classes.npmci.js'; | ||||
|  | ||||
| export const handleCli = async (npmciRefArg: Npmci, argvArg: any) => { | ||||
|   logger.log('info', 'checking execution context'); | ||||
|   const presentRunnerTags = process.env.CI_RUNNER_TAGS.split(',').map((stringArg) => | ||||
|     stringArg.trim() | ||||
|   ); | ||||
|   let allDesiredGitlabRunnerTagsPresent = true; | ||||
|   for (const desiredRunnerTag of npmciRefArg.npmciConfig.getConfig().gitlabRunnerTags) { | ||||
|     if (!presentRunnerTags.includes(desiredRunnerTag)) { | ||||
|       allDesiredGitlabRunnerTagsPresent = false; | ||||
|       logger.log( | ||||
|         'error', | ||||
|         `Desired runnerRag ${desiredRunnerTag} is missing in current execution context.` | ||||
|       ); | ||||
|     } | ||||
|   } | ||||
|   if (!allDesiredGitlabRunnerTagsPresent) { | ||||
|     process.exit(1); | ||||
|   } | ||||
| }; | ||||
							
								
								
									
										1
									
								
								ts/mod_precheck/plugins.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								ts/mod_precheck/plugins.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| export * from '../npmci.plugins.js'; | ||||
| @@ -79,15 +79,16 @@ export class NpmciCli { | ||||
|       } | ||||
|     ); | ||||
|  | ||||
|     this.smartcli.addCommand('precheck').subscribe(async (argvArg) => { | ||||
|       const modPrecheck = await import('./mod_precheck/index.js'); | ||||
|       await modPrecheck.handleCli(this.npmciRef, argvArg); | ||||
|     }) | ||||
|  | ||||
|     // trigger | ||||
|     this.smartcli.addCommand('ssh').subscribe( | ||||
|       async (argvArg) => { | ||||
|         const modSsh = await import('./mod_ssh/index.js'); | ||||
|         await modSsh.handleCli(argvArg); | ||||
|       }, | ||||
|       (err) => { | ||||
|         console.log(err); | ||||
|         process.exit(1); | ||||
|       } | ||||
|     ); | ||||
|  | ||||
|   | ||||
| @@ -20,6 +20,9 @@ export interface INpmciOptions { | ||||
|   dockerRegistryRepoMap: { [key: string]: string }; | ||||
|   dockerBuildargEnvMap: { [key: string]: string }; | ||||
|  | ||||
|   // gitlab | ||||
|   gitlabRunnerTags: string[]; | ||||
|  | ||||
|   // urls | ||||
|   urlCloudly: string; | ||||
| } | ||||
| @@ -57,6 +60,7 @@ export class NpmciConfig { | ||||
|       dockerRegistryRepoMap: {}, | ||||
|       npmAccessLevel: 'private', | ||||
|       npmRegistryUrl: 'registry.npmjs.org', | ||||
|       gitlabRunnerTags: [], | ||||
|       dockerBuildargEnvMap: {}, | ||||
|       urlCloudly: this.npmciQenv.getEnvVarOnDemand('NPMCI_URL_CLOUDLY'), | ||||
|     }; | ||||
|   | ||||
| @@ -3,7 +3,10 @@ import * as plugins from './npmci.plugins.js'; | ||||
| export const cwd = process.cwd(); | ||||
|  | ||||
| // package paths | ||||
| export const NpmciPackageRoot = plugins.path.join(plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), '../'); | ||||
| export const NpmciPackageRoot = plugins.path.join( | ||||
|   plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), | ||||
|   '../' | ||||
| ); | ||||
| export const NpmciPackageConfig = plugins.path.join(NpmciPackageRoot, './config.json'); | ||||
|  | ||||
| // project paths | ||||
|   | ||||
| @@ -57,9 +57,7 @@ export { | ||||
| // @tsclass scope | ||||
| import * as tsclass from '@tsclass/tsclass'; | ||||
|  | ||||
| export { | ||||
|   tsclass | ||||
| } | ||||
| export { tsclass }; | ||||
|  | ||||
| // third party | ||||
| import * as through2 from 'through2'; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user