BREAKING CHANGE(szci): Rename project from npmci to szci and migrate runtime to Deno; add compiled binaries, installer and wrapper; update imports, env handling and package metadata
This commit is contained in:
@@ -1,20 +1,20 @@
|
||||
import { logger } from '../npmci.logging.js';
|
||||
import * as plugins from './mod.plugins.js';
|
||||
import * as paths from '../npmci.paths.js';
|
||||
import { bash } from '../npmci.bash.js';
|
||||
import { logger } from '../szci.logging.ts';
|
||||
import * as plugins from './mod.plugins.ts';
|
||||
import * as paths from '../szci.paths.ts';
|
||||
import { bash } from '../szci.bash.ts';
|
||||
|
||||
// classes
|
||||
import { Npmci } from '../npmci.classes.npmci.js';
|
||||
import { Dockerfile } from './mod.classes.dockerfile.js';
|
||||
import { DockerRegistry } from './mod.classes.dockerregistry.js';
|
||||
import { RegistryStorage } from './mod.classes.registrystorage.js';
|
||||
import { Szci } from '../szci.classes.szci.ts';
|
||||
import { Dockerfile } from './mod.classes.dockerfile.ts';
|
||||
import { DockerRegistry } from './mod.classes.dockerregistry.ts';
|
||||
import { RegistryStorage } from './mod.classes.registrystorage.ts';
|
||||
|
||||
export class NpmciDockerManager {
|
||||
public npmciRef: Npmci;
|
||||
export class SzciDockerManager {
|
||||
public szciRef: Szci;
|
||||
public npmciRegistryStorage = new RegistryStorage();
|
||||
|
||||
constructor(npmciArg: Npmci) {
|
||||
this.npmciRef = npmciArg;
|
||||
constructor(szciArg: Szci) {
|
||||
this.szciRef = szciArg;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -77,24 +77,24 @@ export class NpmciDockerManager {
|
||||
*/
|
||||
public prepare = async () => {
|
||||
// Always login to GitLab Registry
|
||||
if (process.env.GITLAB_CI) {
|
||||
if (Deno.env.get("GITLAB_CI")) {
|
||||
console.log('gitlab ci detected');
|
||||
if (!process.env.CI_JOB_TOKEN || process.env.CI_JOB_TOKEN === '') {
|
||||
if (!Deno.env.get("CI_JOB_TOKEN") || Deno.env.get("CI_JOB_TOKEN") === '') {
|
||||
logger.log('error', 'Running in Gitlab CI, but no registry token specified by gitlab!');
|
||||
process.exit(1);
|
||||
Deno.exit(1);
|
||||
}
|
||||
this.npmciRegistryStorage.addRegistry(
|
||||
new DockerRegistry({
|
||||
registryUrl: 'registry.gitlab.com',
|
||||
username: 'gitlab-ci-token',
|
||||
password: process.env.CI_JOB_TOKEN,
|
||||
password: Deno.env.get("CI_JOB_TOKEN"),
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
// handle registries
|
||||
await plugins.smartobject.forEachMinimatch(
|
||||
process.env,
|
||||
Deno.env.toObject(),
|
||||
'NPMCI_LOGIN_DOCKER*',
|
||||
async (envString: string) => {
|
||||
this.npmciRegistryStorage.addRegistry(DockerRegistry.fromEnvString(envString));
|
||||
@@ -115,14 +115,14 @@ export class NpmciDockerManager {
|
||||
if (argvArg._.length >= 3 && argvArg._[2] !== 'npmextra') {
|
||||
dockerRegistryUrls.push(argvArg._[2]);
|
||||
} else {
|
||||
if (this.npmciRef.npmciConfig.getConfig().dockerRegistries.length === 0) {
|
||||
if (this.szciRef.npmciConfig.getConfig().dockerRegistries.length === 0) {
|
||||
logger.log(
|
||||
'warn',
|
||||
`There are no docker registries listed in npmextra.json! This is strange!`
|
||||
);
|
||||
}
|
||||
dockerRegistryUrls = dockerRegistryUrls.concat(
|
||||
this.npmciRef.npmciConfig.getConfig().dockerRegistries
|
||||
this.szciRef.npmciConfig.getConfig().dockerRegistries
|
||||
);
|
||||
}
|
||||
|
||||
@@ -145,7 +145,7 @@ export class NpmciDockerManager {
|
||||
'error',
|
||||
`Cannot push to registry ${dockerRegistryUrl}, because it was not found in the authenticated registry list.`
|
||||
);
|
||||
process.exit(1);
|
||||
Deno.exit(1);
|
||||
}
|
||||
for (const dockerfile of dockerfileArray) {
|
||||
await dockerfile.push(dockerRegistryToPushTo, suffix);
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import * as plugins from './mod.plugins.js';
|
||||
import * as paths from '../npmci.paths.js';
|
||||
import * as plugins from './mod.plugins.ts';
|
||||
import * as paths from '../szci.paths.ts';
|
||||
|
||||
import { logger } from '../npmci.logging.js';
|
||||
import { bash } from '../npmci.bash.js';
|
||||
import { logger } from '../szci.logging.ts';
|
||||
import { bash } from '../szci.bash.ts';
|
||||
|
||||
import { DockerRegistry } from './mod.classes.dockerregistry.js';
|
||||
import * as helpers from './mod.helpers.js';
|
||||
import { NpmciDockerManager } from './index.js';
|
||||
import { Npmci } from '../npmci.classes.npmci.js';
|
||||
import { DockerRegistry } from './mod.classes.dockerregistry.ts';
|
||||
import * as helpers from './mod.helpers.ts';
|
||||
import { SzciDockerManager } from './index.ts';
|
||||
import { Szci } from '../szci.classes.szci.ts';
|
||||
|
||||
/**
|
||||
* class Dockerfile represents a Dockerfile on disk in npmci
|
||||
@@ -20,7 +20,7 @@ export class Dockerfile {
|
||||
* @returns Promise<Dockerfile[]>
|
||||
*/
|
||||
public static async readDockerfiles(
|
||||
npmciDockerManagerRefArg: NpmciDockerManager
|
||||
npmciDockerManagerRefArg: SzciDockerManager
|
||||
): Promise<Dockerfile[]> {
|
||||
const fileTree = await plugins.smartfile.fs.listFileTree(paths.cwd, 'Dockerfile*');
|
||||
|
||||
@@ -167,7 +167,7 @@ export class Dockerfile {
|
||||
}
|
||||
versionString = versionString.replace(
|
||||
'##version##',
|
||||
dockerfileInstanceArg.npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().projectInfo.npm
|
||||
dockerfileInstanceArg.npmciDockerManagerRef.szciRef.npmciConfig.getConfig().projectInfo.npm
|
||||
.version
|
||||
);
|
||||
return versionString;
|
||||
@@ -194,7 +194,7 @@ export class Dockerfile {
|
||||
const argMatch = trimmedLine.match(/^ARG\s+([^\s=]+)(?:=(.*))?$/i);
|
||||
if (argMatch) {
|
||||
const argName = argMatch[1];
|
||||
const argValue = argMatch[2] !== undefined ? argMatch[2] : process.env[argName] || '';
|
||||
const argValue = argMatch[2] !== undefined ? argMatch[2] : Deno.env.get(argName) || '';
|
||||
args[argName] = argValue;
|
||||
continue;
|
||||
}
|
||||
@@ -236,7 +236,7 @@ export class Dockerfile {
|
||||
* returns the docker tag
|
||||
*/
|
||||
public static getDockerTagString(
|
||||
npmciDockerManagerRef: NpmciDockerManager,
|
||||
npmciDockerManagerRef: SzciDockerManager,
|
||||
registryArg: string,
|
||||
repoArg: string,
|
||||
versionArg: string,
|
||||
@@ -244,7 +244,7 @@ export class Dockerfile {
|
||||
): string {
|
||||
// determine wether the repo should be mapped accordingly to the registry
|
||||
const mappedRepo =
|
||||
npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().dockerRegistryRepoMap[registryArg];
|
||||
npmciDockerManagerRef.szciRef.npmciConfig.getConfig().dockerRegistryRepoMap[registryArg];
|
||||
const repo = (() => {
|
||||
if (mappedRepo) {
|
||||
return mappedRepo;
|
||||
@@ -264,27 +264,27 @@ export class Dockerfile {
|
||||
}
|
||||
|
||||
public static async getDockerBuildArgs(
|
||||
npmciDockerManagerRef: NpmciDockerManager
|
||||
npmciDockerManagerRef: SzciDockerManager
|
||||
): Promise<string> {
|
||||
logger.log('info', 'checking for env vars to be supplied to the docker build');
|
||||
let buildArgsString: string = '';
|
||||
for (const dockerArgKey of Object.keys(
|
||||
npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().dockerBuildargEnvMap
|
||||
npmciDockerManagerRef.szciRef.npmciConfig.getConfig().dockerBuildargEnvMap
|
||||
)) {
|
||||
const dockerArgOuterEnvVar =
|
||||
npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().dockerBuildargEnvMap[dockerArgKey];
|
||||
npmciDockerManagerRef.szciRef.npmciConfig.getConfig().dockerBuildargEnvMap[dockerArgKey];
|
||||
logger.log(
|
||||
'note',
|
||||
`docker ARG "${dockerArgKey}" maps to outer env var "${dockerArgOuterEnvVar}"`
|
||||
);
|
||||
const targetValue = process.env[dockerArgOuterEnvVar];
|
||||
const targetValue = Deno.env.get(dockerArgOuterEnvVar);
|
||||
buildArgsString = `${buildArgsString} --build-arg ${dockerArgKey}="${targetValue}"`;
|
||||
}
|
||||
return buildArgsString;
|
||||
}
|
||||
|
||||
// INSTANCE
|
||||
public npmciDockerManagerRef: NpmciDockerManager;
|
||||
public npmciDockerManagerRef: SzciDockerManager;
|
||||
|
||||
public filePath: string;
|
||||
public repo: string;
|
||||
@@ -299,15 +299,15 @@ export class Dockerfile {
|
||||
public localBaseDockerfile: Dockerfile;
|
||||
|
||||
constructor(
|
||||
dockerManagerRefArg: NpmciDockerManager,
|
||||
dockerManagerRefArg: SzciDockerManager,
|
||||
options: { filePath?: string; fileContents?: string | Buffer; read?: boolean }
|
||||
) {
|
||||
this.npmciDockerManagerRef = dockerManagerRefArg;
|
||||
this.filePath = options.filePath;
|
||||
this.repo =
|
||||
this.npmciDockerManagerRef.npmciRef.npmciEnv.repo.user +
|
||||
this.npmciDockerManagerRef.szciRef.npmciEnv.repo.user +
|
||||
'/' +
|
||||
this.npmciDockerManagerRef.npmciRef.npmciEnv.repo.repo;
|
||||
this.npmciDockerManagerRef.szciRef.npmciEnv.repo.repo;
|
||||
this.version = Dockerfile.dockerFileVersion(this, plugins.path.parse(options.filePath).base);
|
||||
this.cleanTag = this.repo + ':' + this.version;
|
||||
this.buildTag = this.cleanTag;
|
||||
@@ -327,7 +327,7 @@ export class Dockerfile {
|
||||
logger.log('info', 'now building Dockerfile for ' + this.cleanTag);
|
||||
const buildArgsString = await Dockerfile.getDockerBuildArgs(this.npmciDockerManagerRef);
|
||||
const buildCommand = `docker build --label="version=${
|
||||
this.npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().projectInfo.npm.version
|
||||
this.npmciDockerManagerRef.szciRef.npmciConfig.getConfig().projectInfo.npm.version
|
||||
}" -t ${this.buildTag} -f ${this.filePath} ${buildArgsString} .`;
|
||||
await bash(buildCommand);
|
||||
return;
|
||||
@@ -350,13 +350,13 @@ export class Dockerfile {
|
||||
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({
|
||||
await this.npmciDockerManagerRef.szciRef.cloudlyConnector.announceDockerContainer({
|
||||
registryUrl: this.pushTag,
|
||||
tag: this.buildTag,
|
||||
labels: [],
|
||||
version: this.npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().projectInfo.npm.version,
|
||||
version: this.npmciDockerManagerRef.szciRef.npmciConfig.getConfig().projectInfo.npm.version,
|
||||
});
|
||||
await this.npmciDockerManagerRef.npmciRef.npmciConfig.kvStorage.writeKey(
|
||||
await this.npmciDockerManagerRef.szciRef.npmciConfig.kvStorage.writeKey(
|
||||
'latestPushedDockerTag',
|
||||
this.pushTag
|
||||
);
|
||||
@@ -381,7 +381,7 @@ export class Dockerfile {
|
||||
* tests the Dockerfile;
|
||||
*/
|
||||
public async test() {
|
||||
const testFile: string = plugins.path.join(paths.NpmciTestDir, 'test_' + this.version + '.sh');
|
||||
const testFile: string = plugins.path.join(paths.SzciTestDir, 'test_' + this.version + '.sh');
|
||||
const testFileExists: boolean = plugins.smartfile.fs.fileExistsSync(testFile);
|
||||
if (testFileExists) {
|
||||
// run tests
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { logger } from '../npmci.logging.js';
|
||||
import * as plugins from './mod.plugins.js';
|
||||
import { bash } from '../npmci.bash.js';
|
||||
import { logger } from '../szci.logging.ts';
|
||||
import * as plugins from './mod.plugins.ts';
|
||||
import { bash } from '../szci.bash.ts';
|
||||
|
||||
export interface IDockerRegistryConstructorOptions {
|
||||
registryUrl: string;
|
||||
@@ -23,7 +23,7 @@ export class DockerRegistry {
|
||||
const dockerRegexResultArray = envString.split('|');
|
||||
if (dockerRegexResultArray.length !== 3) {
|
||||
logger.log('error', 'malformed docker env var...');
|
||||
process.exit(1);
|
||||
Deno.exit(1);
|
||||
return;
|
||||
}
|
||||
const registryUrl = dockerRegexResultArray[0].replace('https://', '').replace('http://', '');
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { logger } from '../npmci.logging.js';
|
||||
import * as plugins from './mod.plugins.js';
|
||||
import { logger } from '../szci.logging.ts';
|
||||
import * as plugins from './mod.plugins.ts';
|
||||
|
||||
import { DockerRegistry } from './mod.classes.dockerregistry.js';
|
||||
import { DockerRegistry } from './mod.classes.dockerregistry.ts';
|
||||
|
||||
export class RegistryStorage {
|
||||
objectMap = new plugins.lik.ObjectMap<DockerRegistry>();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { logger } from '../npmci.logging.js';
|
||||
import * as plugins from './mod.plugins.js';
|
||||
import * as paths from '../npmci.paths.js';
|
||||
import { logger } from '../szci.logging.ts';
|
||||
import * as plugins from './mod.plugins.ts';
|
||||
import * as paths from '../szci.paths.ts';
|
||||
|
||||
import { Dockerfile } from './mod.classes.dockerfile.js';
|
||||
import { Dockerfile } from './mod.classes.dockerfile.ts';
|
||||
|
||||
@@ -1 +1 @@
|
||||
export * from '../npmci.plugins.js';
|
||||
export * from '../szci.plugins.ts';
|
||||
|
||||
Reference in New Issue
Block a user