diff --git a/__tests__/context.test.ts b/__tests__/context.test.ts index da67084..f91af93 100644 --- a/__tests__/context.test.ts +++ b/__tests__/context.test.ts @@ -168,3 +168,23 @@ test('getAuthList masks registry-auth password when present', async () => { expect(stdoutWriteSpy.mock.calls.map(call => call[0]).join('')).toContain('::add-mask::groundcontrol'); }); + +// prettier-ignore +test.each([ + ['false', 'false'], + ['"false"', 'false'], + ['true', 'true'], + ['auto', 'auto'], + ['""', 'auto'] +])('getAuthList keeps registry-auth ecr: %s', async (ecr, expected) => { + const [auth] = getAuthList({ + registry: '', + username: '', + password: '', + scope: '', + ecr: '', + logout: true, + registryAuth: `- registry: 012345678910.dkr.ecr.eu-west-3.amazonaws.com\n username: AWS\n password: token\n ecr: ${ecr}\n` + }); + expect(auth.ecr).toBe(expected); +}); diff --git a/__tests__/docker.test.ts b/__tests__/docker.test.ts index 4ad2d90..8df7e77 100644 --- a/__tests__/docker.test.ts +++ b/__tests__/docker.test.ts @@ -2,6 +2,8 @@ import {afterEach, expect, test, vi} from 'vitest'; import {Docker} from '@docker/actions-toolkit/lib/docker/docker.js'; +import * as aws from '../src/aws.js'; +import {getAuthList} from '../src/context.js'; import {login, loginStandard, logout} from '../src/docker.js'; import * as dockerhub from '../src/dockerhub.js'; @@ -92,3 +94,30 @@ test('logout calls exec', async () => { ignoreReturnCode: true }); }); + +test('login uses standard login for an ECR registry with registry-auth ecr: false', async () => { + const execSpy = vi.spyOn(Docker, 'getExecOutput').mockResolvedValue({ + exitCode: 0, + stdout: '', + stderr: '' + }); + const ecrSpy = vi.spyOn(aws, 'getRegistriesData').mockRejectedValue(new Error('AWS SDK called')); + + const [auth] = getAuthList({ + registry: '', + username: '', + password: '', + scope: '', + ecr: '', + logout: true, + registryAuth: '- registry: 012345678910.dkr.ecr.eu-west-3.amazonaws.com\n username: AWS\n password: token\n ecr: false\n' + }); + await login(auth); + + expect(ecrSpy).not.toHaveBeenCalled(); + expect(execSpy).toHaveBeenCalledWith(['login', '--password-stdin', '--username', 'AWS', '012345678910.dkr.ecr.eu-west-3.amazonaws.com'], { + input: Buffer.from('token'), + silent: true, + ignoreReturnCode: true + }); +}); diff --git a/src/context.ts b/src/context.ts index ba09b8b..e03973b 100644 --- a/src/context.ts +++ b/src/context.ts @@ -62,7 +62,8 @@ export function getAuthList(inputs: Inputs): Array { username: auth.username, password: auth.password, scope: auth.scope, - ecr: auth.ecr || 'auto', + // YAML parses an unquoted `ecr: false` as a boolean, keep it instead of falling back to auto + ecr: String(auth.ecr ?? '') || 'auto', configDir: scopeToConfigDir(registry, auth.scope) }; });