import * as yaml from 'js-yaml'; import * as core from '@actions/core'; import * as actionsToolkit from '@docker/actions-toolkit'; import * as context from './context'; import * as docker from './docker'; import * as stateHelper from './state-helper'; export async function main(): Promise { const inputs: context.Inputs = context.getInputs(); stateHelper.setLogout(inputs.logout); if (inputs.registryAuth && (inputs.registry || inputs.username || inputs.password || inputs.scope || inputs.ecr)) { throw new Error('Cannot use registry-auth with other inputs'); } if (!inputs.registryAuth) { stateHelper.setRegistries([inputs.registry || 'docker.io']); await docker.login({ registry: inputs.registry || 'docker.io', username: inputs.username, password: inputs.password, scope: inputs.scope, ecr: inputs.ecr || 'auto' }); return; } const auths = (yaml.load(inputs.registryAuth) as docker.Auth[]).map(auth => ({ registry: auth.registry || 'docker.io', username: auth.username, password: auth.password, scope: auth.scope, ecr: auth.ecr || 'auto' })); if (auths.length == 0) { throw new Error('No registry to login'); } stateHelper.setRegistries(auths.map(auth => auth.registry).filter((value, index, self) => self.indexOf(value) === index)); for (const auth of auths) { await core.group(`Login to ${auth.registry}`, async () => { await docker.login(auth); }); } } async function post(): Promise { if (!stateHelper.logout) { return; } for (const registry of stateHelper.registries.split(',')) { await docker.logout(registry); } } actionsToolkit.run(main, post);