diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3d745a2d..d2f4ada9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,7 +3,7 @@ name: ci on: workflow_dispatch: schedule: - - cron: '0 10 * * *' # everyday at 10am + - cron: '0 10 * * *' push: branches: - 'master' diff --git a/README.md b/README.md index cbf86316..f56996ed 100644 --- a/README.md +++ b/README.md @@ -379,6 +379,7 @@ Following inputs can be used as `step.with` keys | `registry` | String | | Server address of Docker registry. If not set then will default to Docker Hub | | `username` | String | | Username used to log against the Docker registry | | `password` | String | | Password or personal access token used to log against the Docker registry | +| `ecr` | String | `auto` | Specifies whether the given registry is ECR (`auto`, `true` or `false`) | | `logout` | Bool | `true` | Log out from the Docker registry at the end of a job | ## Keep up-to-date with GitHub Dependabot diff --git a/__tests__/main.test.ts b/__tests__/main.test.ts index 89e9151a..dd5f998b 100644 --- a/__tests__/main.test.ts +++ b/__tests__/main.test.ts @@ -34,6 +34,9 @@ test('successful with username and password', async () => { const password: string = 'groundcontrol'; process.env[`INPUT_PASSWORD`] = password; + const ecr: string = 'auto'; + process.env['INPUT_ECR'] = ecr; + const logout: boolean = false; process.env['INPUT_LOGOUT'] = String(logout); @@ -41,7 +44,7 @@ test('successful with username and password', async () => { expect(setRegistrySpy).toHaveBeenCalledWith(''); expect(setLogoutSpy).toHaveBeenCalledWith(logout); - expect(dockerSpy).toHaveBeenCalledWith('', username, password); + expect(dockerSpy).toHaveBeenCalledWith('', username, password, ecr); }); test('calls docker login', async () => { @@ -62,6 +65,9 @@ test('calls docker login', async () => { const registry: string = 'ghcr.io'; process.env[`INPUT_REGISTRY`] = registry; + const ecr: string = 'auto'; + process.env['INPUT_ECR'] = ecr; + const logout: boolean = true; process.env['INPUT_LOGOUT'] = String(logout); @@ -69,5 +75,5 @@ test('calls docker login', async () => { expect(setRegistrySpy).toHaveBeenCalledWith(registry); expect(setLogoutSpy).toHaveBeenCalledWith(logout); - expect(dockerSpy).toHaveBeenCalledWith(registry, username, password); + expect(dockerSpy).toHaveBeenCalledWith(registry, username, password, ecr); }); diff --git a/action.yml b/action.yml index 039e609b..5e837acf 100644 --- a/action.yml +++ b/action.yml @@ -16,6 +16,10 @@ inputs: password: description: 'Password or personal access token used to log against the Docker registry' required: false + ecr: + description: 'Specifies whether the given registry is ECR (auto, true or false)' + default: 'auto' + required: false logout: description: 'Log out from the Docker registry at the end of a job' default: 'true' diff --git a/dist/index.js b/dist/index.js index aff42a2f..43067e57 100644 --- a/dist/index.js +++ b/dist/index.js @@ -160,6 +160,7 @@ function getInputs() { registry: core.getInput('registry'), username: core.getInput('username'), password: core.getInput('password'), + ecr: core.getInput('ecr'), logout: core.getBooleanInput('logout') }; } @@ -206,9 +207,9 @@ exports.loginECR = exports.loginStandard = exports.logout = exports.login = void const aws = __importStar(__nccwpck_require__(35981)); const core = __importStar(__nccwpck_require__(42186)); const exec = __importStar(__nccwpck_require__(71514)); -function login(registry, username, password) { +function login(registry, username, password, ecr) { return __awaiter(this, void 0, void 0, function* () { - if (aws.isECR(registry)) { + if (/true/i.test(ecr) || (ecr == 'auto' && aws.isECR(registry))) { yield loginECR(registry, username, password); } else { @@ -328,10 +329,10 @@ const stateHelper = __importStar(__nccwpck_require__(88647)); function run() { return __awaiter(this, void 0, void 0, function* () { try { - const { registry, username, password, logout } = context.getInputs(); - stateHelper.setRegistry(registry); - stateHelper.setLogout(logout); - yield docker.login(registry, username, password); + const input = context.getInputs(); + stateHelper.setRegistry(input.registry); + stateHelper.setLogout(input.logout); + yield docker.login(input.registry, input.username, input.password, input.ecr); } catch (error) { core.setFailed(error.message); diff --git a/src/context.ts b/src/context.ts index f5bdaa27..8a381688 100644 --- a/src/context.ts +++ b/src/context.ts @@ -4,6 +4,7 @@ export interface Inputs { registry: string; username: string; password: string; + ecr: string; logout: boolean; } @@ -12,6 +13,7 @@ export function getInputs(): Inputs { registry: core.getInput('registry'), username: core.getInput('username'), password: core.getInput('password'), + ecr: core.getInput('ecr'), logout: core.getBooleanInput('logout') }; } diff --git a/src/docker.ts b/src/docker.ts index dfb3d663..fce77f5e 100644 --- a/src/docker.ts +++ b/src/docker.ts @@ -2,8 +2,8 @@ import * as aws from './aws'; import * as core from '@actions/core'; import * as exec from '@actions/exec'; -export async function login(registry: string, username: string, password: string): Promise { - if (aws.isECR(registry)) { +export async function login(registry: string, username: string, password: string, ecr: string): Promise { + if (/true/i.test(ecr) || (ecr == 'auto' && aws.isECR(registry))) { await loginECR(registry, username, password); } else { await loginStandard(registry, username, password); diff --git a/src/main.ts b/src/main.ts index f15082e6..9e03601d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -5,10 +5,10 @@ import * as stateHelper from './state-helper'; export async function run(): Promise { try { - const {registry, username, password, logout} = context.getInputs(); - stateHelper.setRegistry(registry); - stateHelper.setLogout(logout); - await docker.login(registry, username, password); + const input: context.Inputs = context.getInputs(); + stateHelper.setRegistry(input.registry); + stateHelper.setLogout(input.logout); + await docker.login(input.registry, input.username, input.password, input.ecr); } catch (error) { core.setFailed(error.message); }