2020 aws-ecr-registry-auth :
2121 description : " Registry auth YAML for Docker login"
2222 value : ${{ jobs.setup-registry-identities.outputs.aws-ecr-registry-auth }}
23+ gcp-wif-enabled :
24+ description : " Whether a GCP Workload Identity Federation registry identity was configured"
25+ value : ${{ jobs.setup-registry-identities.outputs.gcp-wif-enabled }}
26+ gcp-wif-registry :
27+ description : " Google Artifact Registry host to authenticate against"
28+ value : ${{ jobs.setup-registry-identities.outputs.gcp-wif-registry }}
29+ gcp-wif-workload-identity-provider :
30+ description : " GCP Workload Identity Provider resource name"
31+ value : ${{ jobs.setup-registry-identities.outputs.gcp-wif-workload-identity-provider }}
32+ gcp-wif-service-account :
33+ description : " GCP service account to impersonate"
34+ value : ${{ jobs.setup-registry-identities.outputs.gcp-wif-service-account }}
35+ gcp-wif-project-id :
36+ description : " GCP project ID"
37+ value : ${{ jobs.setup-registry-identities.outputs.gcp-wif-project-id }}
2338
2439env :
2540 RUNTIME_MODULE : " @docker/github-builder-runtime@0.92.0"
4257 aws-ecr-role-to-assume : ${{ steps.validate.outputs.aws-ecr-role-to-assume }}
4358 aws-ecr-region : ${{ steps.validate.outputs.aws-ecr-region }}
4459 aws-ecr-registry-auth : ${{ steps.validate.outputs.aws-ecr-registry-auth }}
60+ gcp-wif-enabled : ${{ steps.validate.outputs.gcp-wif-enabled }}
61+ gcp-wif-registry : ${{ steps.validate.outputs.gcp-wif-registry }}
62+ gcp-wif-workload-identity-provider : ${{ steps.validate.outputs.gcp-wif-workload-identity-provider }}
63+ gcp-wif-service-account : ${{ steps.validate.outputs.gcp-wif-service-account }}
64+ gcp-wif-project-id : ${{ steps.validate.outputs.gcp-wif-project-id }}
4565 steps :
4666 -
4767 name : Install dependencies
@@ -86,6 +106,11 @@ jobs:
86106 core.setOutput('aws-ecr-role-to-assume', '');
87107 core.setOutput('aws-ecr-region', '');
88108 core.setOutput('aws-ecr-registry-auth', '');
109+ core.setOutput('gcp-wif-enabled', 'false');
110+ core.setOutput('gcp-wif-registry', '');
111+ core.setOutput('gcp-wif-workload-identity-provider', '');
112+ core.setOutput('gcp-wif-service-account', '');
113+ core.setOutput('gcp-wif-project-id', '');
89114 };
90115
91116 const registryIdentities = core.getInput('registry-identities', {trimWhitespace: false});
@@ -135,6 +160,7 @@ jobs:
135160 }
136161
137162 let awsEcr;
163+ let gcpWif;
138164 entries.forEach((entry, index) => {
139165 const path = `registry-identities[${index}]`;
140166 ensureObject(entry, path);
@@ -162,6 +188,24 @@ jobs:
162188 };
163189 break;
164190 }
191+ case 'gcp-wif': {
192+ const allowedKeys = new Set(['type', 'registry', 'workload_identity_provider', 'service_account', 'project_id']);
193+ for (const key of Object.keys(entry)) {
194+ if (!allowedKeys.has(key)) {
195+ fail(`${path}.${key} is not supported for gcp-wif`);
196+ }
197+ }
198+ if (gcpWif) {
199+ fail('only one gcp-wif registry identity is supported');
200+ }
201+ gcpWif = {
202+ registry: requireString(entry, 'registry', path),
203+ workloadIdentityProvider: requireString(entry, 'workload_identity_provider', path),
204+ serviceAccount: requireString(entry, 'service_account', path),
205+ projectId: requireString(entry, 'project_id', path)
206+ };
207+ break;
208+ }
165209 default:
166210 fail(`${path}.type has unsupported provider ${type}`);
167211 }
@@ -171,3 +215,8 @@ jobs:
171215 core.setOutput('aws-ecr-role-to-assume', awsEcr?.roleToAssume || '');
172216 core.setOutput('aws-ecr-region', awsEcr?.awsRegion || '');
173217 core.setOutput('aws-ecr-registry-auth', awsEcr?.registryAuth || '');
218+ core.setOutput('gcp-wif-enabled', gcpWif ? 'true' : 'false');
219+ core.setOutput('gcp-wif-registry', gcpWif?.registry || '');
220+ core.setOutput('gcp-wif-workload-identity-provider', gcpWif?.workloadIdentityProvider || '');
221+ core.setOutput('gcp-wif-service-account', gcpWif?.serviceAccount || '');
222+ core.setOutput('gcp-wif-project-id', gcpWif?.projectId || '');
0 commit comments