import { logger } from '../szci.logging.ts'; import { bash } from '../szci.bash.ts'; import { Szci } from '../szci.classes.szci.ts'; export class SzciDockerManager { public szciRef: Szci; constructor(szciArg: Szci) { this.szciRef = szciArg; } /** * Bridges SZCI_LOGIN_DOCKER* env vars to DOCKER_REGISTRY_N format for tsdocker, * and handles GitLab CI registry auto-login. */ private bridgeEnvVars() { const env = Deno.env.toObject(); // Bridge GitLab CI registry as DOCKER_REGISTRY_0 if (env['GITLAB_CI']) { const ciJobToken = env['CI_JOB_TOKEN']; if (!ciJobToken) { logger.log('error', 'Running in GitLab CI, but no CI_JOB_TOKEN found!'); Deno.exit(1); } Deno.env.set('DOCKER_REGISTRY_0', `registry.gitlab.com|gitlab-ci-token|${ciJobToken}`); } // Bridge SZCI_LOGIN_DOCKER* → DOCKER_REGISTRY_N let registryIndex = 1; const sortedKeys = Object.keys(env) .filter((key) => key.startsWith('SZCI_LOGIN_DOCKER')) .sort(); for (const key of sortedKeys) { Deno.env.set(`DOCKER_REGISTRY_${registryIndex}`, env[key]); registryIndex++; } } /** * Handle cli input by bridging env vars and delegating to tsdocker. */ public handleCli = async (argvArg: any) => { if (argvArg._.length < 2) { logger.log( 'info', `>>szci docker ...<< cli arguments invalid... Please read the documentation.` ); return; } this.bridgeEnvVars(); const action: string = argvArg._[1]; const extraArgs = argvArg._.slice(2).join(' '); switch (action) { case 'build': await bash(`npx @git.zone/tsdocker build ${extraArgs}`.trim()); break; case 'login': case 'prepare': await bash(`npx @git.zone/tsdocker login ${extraArgs}`.trim()); break; case 'test': await bash(`npx @git.zone/tsdocker test ${extraArgs}`.trim()); break; case 'push': await bash(`npx @git.zone/tsdocker push ${extraArgs}`.trim()); break; case 'pull': await bash(`npx @git.zone/tsdocker pull ${extraArgs}`.trim()); break; default: logger.log('error', `>>szci docker ...<< action >>${action}<< not supported`); } }; }