Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bbb5718184 | |||
| 0d8b54637c | |||
| e51b2e28b9 | |||
| f767140cc8 | |||
| 0d4d69f072 | |||
| a3e628c43f | |||
| a58fa135c1 | |||
| 93c7af6c91 | |||
| ad0e12bf7b | |||
| 498dd6eff6 |
@@ -14,7 +14,7 @@ stages:
|
|||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- pnpm install -g pnpm
|
- pnpm install -g pnpm
|
||||||
- pnpm install -g @shipzone/pnpm
|
- pnpm install -g @shipzone/npmci
|
||||||
- npmci npm prepare
|
- npmci npm prepare
|
||||||
|
|
||||||
# ====================
|
# ====================
|
||||||
@@ -32,6 +32,7 @@ auditProductionDependencies:
|
|||||||
tags:
|
tags:
|
||||||
- lossless
|
- lossless
|
||||||
- docker
|
- docker
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
auditDevDependencies:
|
auditDevDependencies:
|
||||||
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
||||||
@@ -63,7 +64,7 @@ testBuild:
|
|||||||
script:
|
script:
|
||||||
- npmci node install stable
|
- npmci node install stable
|
||||||
- npmci npm install
|
- npmci npm install
|
||||||
- npmci command npm run build
|
- npmci npm build
|
||||||
coverage: /\d+.?\d+?\%\s*coverage/
|
coverage: /\d+.?\d+?\%\s*coverage/
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@shipzone/npmci",
|
"name": "@shipzone/npmci",
|
||||||
"version": "4.0.10",
|
"version": "4.1.3",
|
||||||
"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",
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ Code Style | [](htt
|
|||||||
PackagePhobia (total standalone install weight) | [](https://lossless.cloud)
|
PackagePhobia (total standalone install weight) | [](https://lossless.cloud)
|
||||||
PackagePhobia (package size on registry) | [](https://lossless.cloud)
|
PackagePhobia (package size on registry) | [](https://lossless.cloud)
|
||||||
BundlePhobia (total size when bundled) | [](https://lossless.cloud)
|
BundlePhobia (total size when bundled) | [](https://lossless.cloud)
|
||||||
Platform support | [](https://lossless.cloud) [](https://lossless.cloud)
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@@ -106,7 +105,6 @@ We are always happy for code contributions. If you are not the code contributing
|
|||||||
|
|
||||||
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)
|
## Legal
|
||||||
|
> MIT licensed | **©** [Task Venture Capital GmbH](https://task.vc)
|
||||||
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
|
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
|
||||||
|
|
||||||
[](https://maintainedby.lossless.com)
|
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@shipzone/npmci',
|
name: '@shipzone/npmci',
|
||||||
version: '4.0.10',
|
version: '4.1.3',
|
||||||
description: 'node and docker in gitlab ci on steroids'
|
description: 'node and docker in gitlab ci on steroids'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ export class NpmciDockerManager {
|
|||||||
*/
|
*/
|
||||||
public prepare = async () => {
|
public 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_JOB_TOKEN || process.env.CI_JOB_TOKEN === '') {
|
||||||
logger.log('error', 'No registry token specified by gitlab!');
|
logger.log('error', 'No registry token specified by gitlab!');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
@@ -85,7 +85,7 @@ export class NpmciDockerManager {
|
|||||||
new DockerRegistry({
|
new DockerRegistry({
|
||||||
registryUrl: 'registry.gitlab.com',
|
registryUrl: 'registry.gitlab.com',
|
||||||
username: 'gitlab-ci-token',
|
username: 'gitlab-ci-token',
|
||||||
password: process.env.CI_BUILD_TOKEN,
|
password: process.env.CI_JOB_TOKEN,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -177,14 +177,17 @@ export class Dockerfile {
|
|||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
logger.log('info', 'checking for env vars to be supplied to the docker build');
|
logger.log('info', 'checking for env vars to be supplied to the docker build');
|
||||||
let buildArgsString: string = '';
|
let buildArgsString: string = '';
|
||||||
for (const key of Object.keys(
|
for (const dockerArgKey of Object.keys(
|
||||||
npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().dockerBuildargEnvMap
|
npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().dockerBuildargEnvMap
|
||||||
)) {
|
)) {
|
||||||
const targetValue =
|
const dockerArgOuterEnvVar =
|
||||||
process.env[
|
npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().dockerBuildargEnvMap[dockerArgKey];
|
||||||
npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().dockerBuildargEnvMap[key]
|
logger.log(
|
||||||
];
|
'note',
|
||||||
buildArgsString = `${buildArgsString} --build-arg ${key}="${targetValue}"`;
|
`docker ARG "${dockerArgKey}" maps to outer env var "${dockerArgOuterEnvVar}"`
|
||||||
|
);
|
||||||
|
const targetValue = process.env[dockerArgOuterEnvVar];
|
||||||
|
buildArgsString = `${buildArgsString} --build-arg ${dockerArgKey}="${targetValue}"`;
|
||||||
}
|
}
|
||||||
return buildArgsString;
|
return buildArgsString;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ export class NpmciNpmManager {
|
|||||||
'NPMCI_TOKEN_NPM*',
|
'NPMCI_TOKEN_NPM*',
|
||||||
(npmEnvArg: string) => {
|
(npmEnvArg: string) => {
|
||||||
const npmRegistryUrl = npmEnvArg.split('|')[0];
|
const npmRegistryUrl = npmEnvArg.split('|')[0];
|
||||||
|
logger.log('ok', `found token for ${npmRegistryUrl}`);
|
||||||
let npmToken = npmEnvArg.split('|')[1];
|
let npmToken = npmEnvArg.split('|')[1];
|
||||||
if (npmEnvArg.split('|')[2] && npmEnvArg.split('|')[2] === 'plain') {
|
if (npmEnvArg.split('|')[2] && npmEnvArg.split('|')[2] === 'plain') {
|
||||||
logger.log('ok', 'npm token not base64 encoded.');
|
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,17 +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);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// trigger
|
// trigger
|
||||||
this.smartcli.addCommand('trigger').subscribe(
|
this.smartcli.addCommand('trigger').subscribe(
|
||||||
|
|||||||
@@ -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'),
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user