import * as plugins from './szci.plugins.ts'; import * as paths from './szci.paths.ts'; import { logger } from './szci.logging.ts'; import { Szci } from './szci.classes.szci.ts'; /** * the main config interface for npmci */ export interface ISzciOptions { projectInfo: plugins.projectinfo.ProjectInfo; // npm npmGlobalTools: string[]; npmAccessLevel?: 'private' | 'public'; npmRegistryUrl: string; // docker dockerRegistries: string[]; dockerRegistryRepoMap: { [key: string]: string }; dockerBuildargEnvMap: { [key: string]: string }; // gitlab gitlabRunnerTags: string[]; // urls urlCloudly: string; // cloudron cloudronAppName?: string; } /** * a config class for Npmci */ export class SzciConfig { public szciRef: Szci; public npmciNpmextra: plugins.npmextra.Npmextra; public kvStorage: plugins.npmextra.KeyValueStore; public npmciQenv: plugins.qenv.Qenv; private configObject: ISzciOptions; constructor(szciRefArg: Szci) { this.szciRef = szciRefArg; } public async init() { this.npmciNpmextra = new plugins.npmextra.Npmextra(paths.cwd); this.kvStorage = new plugins.npmextra.KeyValueStore({ typeArg: 'userHomeDir', identityArg: `.npmci_${this.szciRef.npmciEnv.repo.user}_${this.szciRef.npmciEnv.repo.repo}`, }); this.npmciQenv = new plugins.qenv.Qenv( paths.SzciProjectDir, paths.SzciProjectNogitDir, false ); this.configObject = { projectInfo: new plugins.projectinfo.ProjectInfo(paths.cwd), npmGlobalTools: [], dockerRegistries: [], dockerRegistryRepoMap: {}, npmAccessLevel: 'private', npmRegistryUrl: 'registry.npmjs.org', gitlabRunnerTags: [], dockerBuildargEnvMap: {}, urlCloudly: await this.npmciQenv.getEnvVarOnDemand('NPMCI_URL_CLOUDLY'), }; this.configObject = this.npmciNpmextra.dataFor('szci', this.configObject); } public getConfig(): ISzciOptions { return this.configObject; } }