@@ -46,15 +46,17 @@ jobs:
4646 echo "name=$TAG" >> $GITHUB_OUTPUT
4747 echo "Resolved tag: $TAG"
4848
49- deploy :
50- name : " Deploy to TEST (approval required) "
49+ sign-lambda-artifact :
50+ name : " Sign lambda artifact for TEST "
5151 runs-on : ubuntu-latest
5252 needs : [metadata]
5353 environment : test
54- timeout-minutes : 10080
54+ timeout-minutes : 45
5555 permissions :
5656 id-token : write
5757 contents : read
58+ outputs :
59+ bucket_name : ${{ steps.tf_output.outputs.bucket_name }}
5860 steps :
5961 - name : " Checkout same commit"
6062 uses : actions/checkout@v6
@@ -80,6 +82,124 @@ jobs:
8082 run-id : ${{ github.event.workflow_run.id }}
8183 github-token : ${{ github.token }}
8284
85+ - name : " Terraform Init (TEST api-layer)"
86+ env :
87+ ENVIRONMENT : test
88+ WORKSPACE : " default"
89+ run : |
90+ echo "Running: make terraform env=$ENVIRONMENT workspace=$WORKSPACE stack=api-layer tf-command=init"
91+ make terraform env=$ENVIRONMENT stack=api-layer tf-command=init workspace=$WORKSPACE
92+ working-directory : ./infrastructure
93+
94+ - name : " Extract S3 bucket name from Terraform output"
95+ id : tf_output
96+ run : |
97+ BUCKET=$(terraform output -raw lambda_artifact_bucket)
98+ PROFILE=$(terraform output -raw lambda_signing_profile_name)
99+ echo "bucket_name=$BUCKET" >> $GITHUB_OUTPUT
100+ echo "signing_profile_name=$PROFILE" >> $GITHUB_OUTPUT
101+ working-directory : ./infrastructure/stacks/api-layer
102+
103+ - name : " Upload unsigned lambda artifact to S3"
104+ run : |
105+ aws s3 cp ./dist/lambda.zip \
106+ s3://${{ steps.tf_output.outputs.bucket_name }}/unsigned/${{ needs.metadata.outputs.tag }}/lambda.zip \
107+ --region eu-west-2
108+
109+ - name : " Get uploaded source object version"
110+ id : source_object
111+ run : |
112+ VERSION_ID=$(aws s3api head-object \
113+ --bucket "${{ steps.tf_output.outputs.bucket_name }}" \
114+ --key "unsigned/${{ needs.metadata.outputs.tag }}/lambda.zip" \
115+ --query 'VersionId' \
116+ --output text \
117+ --region eu-west-2)
118+ echo "version_id=$VERSION_ID" >> $GITHUB_OUTPUT
119+
120+ - name : " Start signing job"
121+ id : signing
122+ env :
123+ SIGNING_PROFILE_NAME : ${{ steps.tf_output.outputs.signing_profile_name }}
124+ run : |
125+ JOB_ID=$(aws signer start-signing-job \
126+ --source "s3={bucketName=${{ steps.tf_output.outputs.bucket_name }},key=unsigned/${{ needs.metadata.outputs.tag }}/lambda.zip,version=${{ steps.source_object.outputs.version_id }}}" \
127+ --destination "s3={bucketName=${{ steps.tf_output.outputs.bucket_name }},prefix=signed/${{ needs.metadata.outputs.tag }}/}" \
128+ --profile-name "$SIGNING_PROFILE_NAME" \
129+ --query 'jobId' \
130+ --output text \
131+ --region eu-west-2)
132+ echo "job_id=$JOB_ID" >> $GITHUB_OUTPUT
133+
134+ - name : " Wait for signing job"
135+ run : |
136+ aws signer wait successful-signing-job \
137+ --job-id "${{ steps.signing.outputs.job_id }}" \
138+ --region eu-west-2
139+
140+ - name : " Resolve signed artifact location"
141+ id : signed_object
142+ run : |
143+ SIGNED_BUCKET=$(aws signer describe-signing-job \
144+ --job-id "${{ steps.signing.outputs.job_id }}" \
145+ --region eu-west-2 \
146+ --query 'signedObject.s3.bucketName' \
147+ --output text)
148+
149+ SIGNED_KEY=$(aws signer describe-signing-job \
150+ --job-id "${{ steps.signing.outputs.job_id }}" \
151+ --region eu-west-2 \
152+ --query 'signedObject.s3.key' \
153+ --output text)
154+
155+ echo "bucket_name=$SIGNED_BUCKET" >> $GITHUB_OUTPUT
156+ echo "object_key=$SIGNED_KEY" >> $GITHUB_OUTPUT
157+
158+ - name : " Download signed lambda artifact"
159+ run : |
160+ aws s3 cp \
161+ "s3://${{ steps.signed_object.outputs.bucket_name }}/${{ steps.signed_object.outputs.object_key }}" \
162+ ./dist/lambda.zip \
163+ --region eu-west-2
164+
165+ - name : " Upload signed lambda artifact for current workflow"
166+ uses : actions/upload-artifact@v6
167+ with :
168+ name : lambda-${{ needs.metadata.outputs.tag }}
169+ path : ./dist/lambda.zip
170+
171+ deploy :
172+ name : " Deploy to TEST (approval required)"
173+ runs-on : ubuntu-latest
174+ needs : [metadata, sign-lambda-artifact]
175+ environment : test
176+ timeout-minutes : 10080
177+ permissions :
178+ id-token : write
179+ contents : read
180+ steps :
181+ - name : " Checkout same commit"
182+ uses : actions/checkout@v6
183+ with :
184+ ref : ${{ github.event.workflow_run.head_sha }}
185+
186+ - name : " Setup Terraform"
187+ uses : hashicorp/setup-terraform@v3
188+ with :
189+ terraform_version : ${{ needs.metadata.outputs.terraform_version }}
190+
191+ - name : " Download signed lambda artefact"
192+ uses : actions/download-artifact@v7
193+ with :
194+ name : lambda-${{ needs.metadata.outputs.tag }}
195+ path : ./dist
196+
197+ - name : " Configure AWS Credentials"
198+ uses : aws-actions/configure-aws-credentials@v6
199+ with :
200+ role-to-assume : arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/service-roles/github-actions-api-deployment-role
201+ aws-region : eu-west-2
202+
83203 - name : " Terraform Apply (TEST)"
84204 env :
85205 ENVIRONMENT : test
92212 TF_VAR_OPERATOR_EMAILS : ${{ vars.SECRET_ROTATION_OPERATOR_EMAILS }}
93213 TF_VAR_PROXYGEN_PRIVATE_KEY_PTL : ${{ secrets.PROXYGEN_PRIVATE_KEY_PTL }}
94214 TF_VAR_PROXYGEN_PRIVATE_KEY_PROD : ${{ secrets.PROXYGEN_PRIVATE_KEY_PROD }}
95-
96215 run : |
97216 mkdir -p ./build
98217 echo "Deploying tag: ${{ needs.metadata.outputs.tag }}"
@@ -109,17 +228,10 @@ jobs:
109228 pip install boto3
110229 python scripts/feature_toggle/validate_toggles.py
111230
112- - name : " Extract S3 bucket name from Terraform output"
113- id : tf_output
114- run : |
115- BUCKET=$(terraform output -raw lambda_artifact_bucket)
116- echo "bucket_name=$BUCKET" >> $GITHUB_OUTPUT
117- working-directory : ./infrastructure/stacks/api-layer
118-
119- - name : " Upload lambda artifact to S3"
231+ - name : " Upload signed lambda artifact to S3"
120232 run : |
121233 aws s3 cp ./dist/lambda.zip \
122- s3://${{ steps.tf_output .outputs.bucket_name }}/artifacts/${{ needs.metadata.outputs.tag }}/lambda.zip \
234+ s3://${{ needs.sign-lambda-artifact .outputs.bucket_name }}/artifacts/${{ needs.metadata.outputs.tag }}/lambda.zip \
123235 --region eu-west-2
124236
125237 regression-tests :
@@ -130,4 +242,3 @@ jobs:
130242 ENVIRONMENT : " test"
131243 VERSION_NUMBER : " main"
132244 secrets : inherit
133-
0 commit comments