Compare commits

...

22 Commits

Author SHA1 Message Date
a58fa135c1 4.1.0 2022-10-24 21:23:14 +02:00
93c7af6c91 feat(precheck): now includes a precheck for more generic runner execution 2022-10-24 21:23:14 +02:00
ad0e12bf7b 4.0.11 2022-10-23 17:19:42 +02:00
498dd6eff6 fix(core): update 2022-10-23 17:19:41 +02:00
b3aa964739 4.0.10 2022-10-11 14:26:43 +02:00
03eb9d2657 fix(core): update 2022-10-11 14:26:42 +02:00
373a838a6a 4.0.9 2022-10-11 14:08:00 +02:00
960e3f4675 fix(core): update 2022-10-11 14:07:59 +02:00
09bf676b58 4.0.8 2022-10-11 13:59:40 +02:00
76ba8e2ab9 fix(core): update 2022-10-11 13:59:39 +02:00
aaaaca2d19 4.0.7 2022-10-11 13:59:16 +02:00
71b27eda17 fix(core): update 2022-10-11 13:59:15 +02:00
2d00882fd7 4.0.6 2022-10-11 13:58:48 +02:00
ba5e69041f fix(core): update 2022-10-11 13:58:48 +02:00
d2871d601a 4.0.5 2022-10-11 13:40:26 +02:00
9c66d88dc0 fix(core): update 2022-10-11 13:40:25 +02:00
fb4c84e1de 4.0.4 2022-10-11 13:38:40 +02:00
57aca36f11 fix(core): update 2022-10-11 13:38:40 +02:00
905f594af1 4.0.3 2022-10-11 13:26:50 +02:00
b788b7f96b fix(core): update 2022-10-11 13:26:49 +02:00
319a2dc41a 4.0.2 2022-10-11 13:08:10 +02:00
e01a998f0e fix(core): update 2022-10-11 13:08:10 +02:00
18 changed files with 4444 additions and 14417 deletions

View File

@@ -13,31 +13,24 @@ stages:
- metadata - metadata
before_script: before_script:
- npm install -g @shipzone/npmci - pnpm install -g pnpm
- pnpm install -g @shipzone/npmci
- npmci npm prepare
# ==================== # ====================
# security stage # security stage
# ==================== # ====================
mirror: # ====================
stage: security # security stage
script: # ====================
- npmci git mirror
only:
- tags
tags:
- lossless
- docker
- notpriv
auditProductionDependencies: auditProductionDependencies:
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
stage: security stage: security
script: script:
- npmci npm prepare
- npmci command npm install --production --ignore-scripts
- npmci command npm config set registry https://registry.npmjs.org - npmci command npm config set registry https://registry.npmjs.org
- npmci command npm audit --audit-level=high --only=prod --production - npmci command pnpm audit --audit-level=high --prod
tags: tags:
- lossless
- docker - docker
allow_failure: true allow_failure: true
@@ -45,11 +38,10 @@ auditDevDependencies:
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
stage: security stage: security
script: script:
- npmci npm prepare
- npmci command npm install --ignore-scripts
- npmci command npm config set registry https://registry.npmjs.org - 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: tags:
- lossless
- docker - docker
allow_failure: true allow_failure: true
@@ -60,7 +52,6 @@ auditDevDependencies:
testStable: testStable:
stage: test stage: test
script: script:
- npmci npm prepare
- npmci node install stable - npmci node install stable
- npmci npm install - npmci npm install
- npmci npm test - npmci npm test
@@ -71,7 +62,6 @@ testStable:
testBuild: testBuild:
stage: test stage: test
script: script:
- npmci npm prepare
- npmci node install stable - npmci node install stable
- npmci npm install - npmci npm install
- npmci command npm run build - npmci command npm run build
@@ -100,10 +90,9 @@ codequality:
only: only:
- tags - tags
script: script:
- npmci command npm install -g tslint typescript - npmci command npm install -g typescript
- npmci npm prepare - npmci npm prepare
- npmci npm install - npmci npm install
- npmci command "tslint -c tslint.json ./ts/**/*.ts"
tags: tags:
- lossless - lossless
- docker - docker
@@ -123,11 +112,9 @@ trigger:
pages: pages:
stage: metadata stage: metadata
script: script:
- npmci node install lts - npmci node install stable
- npmci command npm install -g @gitzone/tsdoc
- npmci npm prepare
- npmci npm install - npmci npm install
- npmci command tsdoc - npmci command npm run buildDocs
tags: tags:
- lossless - lossless
- docker - docker

View File

@@ -14,7 +14,7 @@
"githost": "gitlab.com", "githost": "gitlab.com",
"gitscope": "shipzone", "gitscope": "shipzone",
"gitrepo": "npmci", "gitrepo": "npmci",
"shortDescription": "node and docker in gitlab ci on steroids", "description": "node and docker in gitlab ci on steroids",
"npmPackagename": "@shipzone/npmci", "npmPackagename": "@shipzone/npmci",
"license": "MIT" "license": "MIT"
} }

14353
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "@shipzone/npmci", "name": "@shipzone/npmci",
"version": "4.0.1", "version": "4.1.0",
"private": false, "private": false,
"description": "node and docker in gitlab ci on steroids", "description": "node and docker in gitlab ci on steroids",
"main": "dist_ts/index.js", "main": "dist_ts/index.js",
@@ -12,7 +12,8 @@
"scripts": { "scripts": {
"test": "tstest test/", "test": "tstest test/",
"build": "tsbuild --allowimplicitany && (npm run testVersion)", "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": { "repository": {
"type": "git", "type": "git",
@@ -29,9 +30,7 @@
"@gitzone/tsrun": "^1.2.37", "@gitzone/tsrun": "^1.2.37",
"@gitzone/tstest": "^1.0.73", "@gitzone/tstest": "^1.0.73",
"@pushrocks/tapbundle": "^5.0.4", "@pushrocks/tapbundle": "^5.0.4",
"@types/node": "^18.8.3", "@types/node": "^18.8.3"
"tslint": "^6.1.3",
"tslint-config-prettier": "^1.18.0"
}, },
"dependencies": { "dependencies": {
"@apiglobal/typedrequest": "^2.0.10", "@apiglobal/typedrequest": "^2.0.10",
@@ -53,7 +52,7 @@
"@pushrocks/smartrequest": "^2.0.11", "@pushrocks/smartrequest": "^2.0.11",
"@pushrocks/smartshell": "^2.0.30", "@pushrocks/smartshell": "^2.0.30",
"@pushrocks/smartsocket": "^2.0.7", "@pushrocks/smartsocket": "^2.0.7",
"@pushrocks/smartssh": "^1.2.3", "@pushrocks/smartssh": "^2.0.0",
"@pushrocks/smartstring": "^4.0.5", "@pushrocks/smartstring": "^4.0.5",
"@servezone/interfaces": "^1.0.3", "@servezone/interfaces": "^1.0.3",
"@tsclass/tsclass": "^4.0.21", "@tsclass/tsclass": "^4.0.21",

4360
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -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 { tap, expect } from '@pushrocks/tapbundle';
import * as cloudlyConnectorMod from '../ts/connector.cloudly/cloudlyconnector.js'; import * as cloudlyConnectorMod from '../ts/connector.cloudly/cloudlyconnector.js';
tap.test('should be able to announce a container to cloudly', async () => { tap.test('should be able to announce a container to cloudly', async () => {
const cloudlyConnector = new cloudlyConnectorMod.CloudlyConnector(null); const cloudlyConnector = new cloudlyConnectorMod.CloudlyConnector(null);
await cloudlyConnector.announceDockerContainer({ await cloudlyConnector.announceDockerContainer(
{
registryUrl: 'registry.losssless.com', registryUrl: 'registry.losssless.com',
tag: 'testcontainer', tag: 'testcontainer',
version: 'x.x.x', version: 'x.x.x',
labels: [] labels: [],
}, 'cloudly.lossless.one') },
'cloudly.lossless.one'
);
}); });
tap.test('should close the program despite socket timeout', async (toolsArg) => { tap.test('should close the program despite socket timeout', async (toolsArg) => {
// TODO: remove when unreffed timeouts in webrequest have been solved. // TODO: remove when unreffed timeouts in webrequest have been solved.
toolsArg.delayFor(0).then(() => { toolsArg.delayFor(0).then(() => {
process.exit(); process.exit();
}) });
}) });
tap.start(); tap.start();

View File

@@ -3,7 +3,7 @@ import * as path from 'path';
import * as smartpath from '@pushrocks/smartpath'; import * as smartpath from '@pushrocks/smartpath';
process.env.NPMTS_TEST = 'true'; process.env.NPMTS_TEST = 'true';
process.env.NPMCI_URL_CLOUDLY = 'localhost' process.env.NPMCI_URL_CLOUDLY = 'localhost';
// set up environment // set up environment
process.env.CI_REPOSITORY_URL = 'https://yyyyyy:xxxxxxxx@gitlab.com/mygroup/myrepo.git'; 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 () => { tap.preTask('should import npmci', async () => {
npmci = await import('../ts/index.js'); npmci = await import('../ts/index.js');
}) });
// ====== // ======
// Docker // Docker

View File

@@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@shipzone/npmci', name: '@shipzone/npmci',
version: '4.0.1', version: '4.1.0',
description: 'node and docker in gitlab ci on steroids' description: 'node and docker in gitlab ci on steroids'
} }

View File

@@ -33,7 +33,7 @@ export class CloudlyConnector {
); );
const response = await typedrequest.fire({ const response = await typedrequest.fire({
containerImageInfo: optionsArg containerImageInfo: optionsArg,
}); });
} }
} }

View File

@@ -276,8 +276,7 @@ export class Dockerfile {
registryUrl: this.pushTag, registryUrl: this.pushTag,
tag: this.buildTag, tag: this.buildTag,
labels: [], labels: [],
version: version: this.npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().projectInfo.npm.version,
this.npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().projectInfo.npm.version,
}); });
} }

View File

@@ -44,11 +44,11 @@ export class NpmciNodeJsManager {
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 = '16'; version = '18';
} else if (versionArg === 'lts') { } else if (versionArg === 'lts') {
version = '14'; version = '16';
} else if (versionArg === 'legacy') { } else if (versionArg === 'legacy') {
version = '12'; version = '14';
} else { } else {
version = versionArg; version = versionArg;
} }

View File

@@ -151,6 +151,7 @@ export class NpmciNpmManager {
logger.log('info', `now preparing environment:`); logger.log('info', `now preparing environment:`);
this.prepare(); this.prepare();
await bash(`npm -v`); await bash(`npm -v`);
await bash(`pnpm -v`);
// -> build it // -> build it
await this.install(); await this.install();
@@ -172,16 +173,16 @@ export class NpmciNpmManager {
public async install(): Promise<void> { public async install(): Promise<void> {
logger.log('info', 'now installing dependencies:'); logger.log('info', 'now installing dependencies:');
await bash('npm ci'); await bash('pnpm install');
} }
public async build(): Promise<void> { public async build(): Promise<void> {
logger.log('info', 'now building the project:'); logger.log('info', 'now building the project:');
await bash('npm run build'); await bash('pnpm run build');
} }
public async test(): Promise<void> { public async test(): Promise<void> {
logger.log('info', 'now starting tests:'); logger.log('info', 'now starting tests:');
await bash('npm test'); await bash('pnpm test');
} }
} }

24
ts/mod_precheck/index.ts Normal file
View 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);
}
};

View File

@@ -0,0 +1 @@
export * from '../npmci.plugins.js';

View File

@@ -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 // trigger
this.smartcli.addCommand('ssh').subscribe( this.smartcli.addCommand('ssh').subscribe(
async (argvArg) => { async (argvArg) => {
const modSsh = await import('./mod_ssh/index.js'); const modSsh = await import('./mod_ssh/index.js');
await modSsh.handleCli(argvArg); await modSsh.handleCli(argvArg);
},
(err) => {
console.log(err);
process.exit(1);
} }
); );

View File

@@ -20,6 +20,9 @@ export interface INpmciOptions {
dockerRegistryRepoMap: { [key: string]: string }; dockerRegistryRepoMap: { [key: string]: string };
dockerBuildargEnvMap: { [key: string]: string }; dockerBuildargEnvMap: { [key: string]: string };
// gitlab
gitlabRunnerTags: string[];
// urls // urls
urlCloudly: string; urlCloudly: string;
} }
@@ -57,6 +60,7 @@ export class NpmciConfig {
dockerRegistryRepoMap: {}, dockerRegistryRepoMap: {},
npmAccessLevel: 'private', npmAccessLevel: 'private',
npmRegistryUrl: 'registry.npmjs.org', npmRegistryUrl: 'registry.npmjs.org',
gitlabRunnerTags: [],
dockerBuildargEnvMap: {}, dockerBuildargEnvMap: {},
urlCloudly: this.npmciQenv.getEnvVarOnDemand('NPMCI_URL_CLOUDLY'), urlCloudly: this.npmciQenv.getEnvVarOnDemand('NPMCI_URL_CLOUDLY'),
}; };

View File

@@ -3,7 +3,10 @@ import * as plugins from './npmci.plugins.js';
export const cwd = process.cwd(); export const cwd = process.cwd();
// package paths // 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'); export const NpmciPackageConfig = plugins.path.join(NpmciPackageRoot, './config.json');
// project paths // project paths

View File

@@ -57,9 +57,7 @@ export {
// @tsclass scope // @tsclass scope
import * as tsclass from '@tsclass/tsclass'; import * as tsclass from '@tsclass/tsclass';
export { export { tsclass };
tsclass
}
// third party // third party
import * as through2 from 'through2'; import * as through2 from 'through2';