mirror of
https://github.com/docker/login-action.git
synced 2026-04-09 08:08:22 +01:00
59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
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<void> {
|
|
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<void> {
|
|
if (!stateHelper.logout) {
|
|
return;
|
|
}
|
|
for (const registry of stateHelper.registries.split(',')) {
|
|
await docker.logout(registry);
|
|
}
|
|
}
|
|
|
|
actionsToolkit.run(main, post);
|