11name : " Test stage"
22
3- permissions :
4- id-token : write
5- contents : read
6-
73env :
8- BASE_URL : " https ://internal-dev.api.service.nhs.uk/pathology-laboratory-reporting-pr-32 "
4+ BASE_URL : " http ://localhost:5002 "
95 HOST : " localhost"
10- ENV : " remote"
11- PR_NUMBER : " 32"
12- AWS_REGION : eu-west-2
13- PROXYGEN_KEY_ID : ${{ vars.PREVIEW_ENV_PROXYGEN_KEY_ID }}
14- PROXYGEN_CLIENT_ID : ${{ vars.PREVIEW_ENV_PROXYGEN_CLIENT_ID }}
15- PROXYGEN_API_NAME : ${{ vars.PROXYGEN_API_NAME }}
166
177on :
188 workflow_call :
@@ -37,97 +27,13 @@ jobs:
3727 with :
3828 prefix : coverage
3929
40- generate-apigee-token :
41- name : " Generate Apigee token"
42- runs-on : ubuntu-latest
43- outputs :
44- secret-name : ${{ steps.store-token.outputs.secret-name }}
45- steps :
46- - name : " Checkout code"
47- uses : actions/checkout@v6
48-
49- - name : " Set up Python"
50- uses : actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548
51- with :
52- python-version : ${{ inputs.python_version }}
53-
54- - name : Select AWS role inputs
55- id : role-select
56- env :
57- DEPENDABOT_AWS_ROLE_ARN : ${{ secrets.DEPENDABOT_AWS_ROLE_ARN }}
58- DEPENDABOT_LAMBDA_ROLE_ARN : ${{ secrets.DEPENDABOT_LAMBDA_ROLE_ARN }}
59- AWS_ROLE_ARN : ${{ secrets.AWS_ROLE_ARN }}
60- LAMBDA_ROLE_ARN : ${{ secrets.LAMBDA_ROLE_ARN }}
61- run : |
62- if [ "${{ github.actor }}" = "dependabot[bot]" ]; then
63- echo "aws_role=$DEPENDABOT_AWS_ROLE_ARN" >> "$GITHUB_OUTPUT"
64- echo "lambda_role=$DEPENDABOT_LAMBDA_ROLE_ARN" >> "$GITHUB_OUTPUT"
65- else
66- echo "aws_role=$AWS_ROLE_ARN" >> "$GITHUB_OUTPUT"
67- echo "lambda_role=$LAMBDA_ROLE_ARN" >> "$GITHUB_OUTPUT"
68- fi
69-
70- - name : Configure AWS credentials (OIDC)
71- uses : aws-actions/configure-aws-credentials@a7a2c1125c67f40a1e95768f4e4a7d8f019f87af
72- with :
73- role-to-assume : ${{ steps.role-select.outputs.aws_role }}
74- aws-region : ${{ env.AWS_REGION }}
75-
76- - name : Get proxygen machine user details
77- id : proxygen-machine-user
78- uses : aws-actions/aws-secretsmanager-get-secrets@a9a7eb4e2f2871d30dc5b892576fde60a2ecc802
79- with :
80- secret-ids : /cds/pathology/dev/proxygen/proxygen-key-secret
81- name-transformation : lowercase
82-
83- - name : Generate Apigee token
84- id : generate-token
85- uses : ./.github/actions/proxy/generate-apigee-token
86- with :
87- proxygen-key-secret : ${{ env._cds_pathology_dev_proxygen_proxygen_key_secret }}
88- proxygen-key-id : ${{ env.PROXYGEN_KEY_ID }}
89- proxygen-client-id : ${{ env.PROXYGEN_CLIENT_ID }}
90- proxygen-api-name : ${{ env.PROXYGEN_API_NAME }}
91-
92- - name : Store token in AWS Secrets Manager
93- id : store-token
94- shell : bash
95- env :
96- TOKEN : ${{ steps.generate-token.outputs.apigee-access-token }}
97- run : |
98- if [ -z "$TOKEN" ]; then
99- echo "::error::Token is empty"
100- exit 1
101- fi
102- SECRET_NAME="apigee-token-${{ github.run_id }}-${{ github.run_attempt }}"
103- aws secretsmanager create-secret \
104- --name "$SECRET_NAME" \
105- --description "Temporary Apigee token for workflow run ${{ github.run_id }}" \
106- --secret-string "$TOKEN" \
107- --region ${{ env.AWS_REGION }}
108- echo "secret-name=$SECRET_NAME" >> $GITHUB_OUTPUT
109- echo "Token stored securely in AWS Secrets Manager: $SECRET_NAME"
110-
11130 test-unit :
11231 name : " Unit tests"
11332 runs-on : ubuntu-latest
11433 timeout-minutes : 5
115- needs : [generate-apigee-token]
116- env :
117- ENV : " local"
11834 steps :
11935 - name : " Checkout code"
12036 uses : actions/checkout@v6
121- - name : Retrieve Apigee token
122- id : get-token
123- uses : ./.github/actions/retrieve-apigee-token
124- with :
125- secret-name : ${{ needs.generate-apigee-token.outputs.secret-name }}
126- aws-role-arn : ${{ secrets.AWS_ROLE_ARN }}
127- aws-region : ${{ env.AWS_REGION }}
128- - name : Set token environment variable
129- shell : bash
130- run : echo "APIGEE_ACCESS_TOKEN=${{ steps.get-token.outputs.apigee-access-token }}" >> $GITHUB_ENV
13137 - name : " Setup Python project"
13238 uses : ./.github/actions/setup-python-project
13339 with :
@@ -151,20 +57,9 @@ jobs:
15157 name : " Contract tests"
15258 runs-on : ubuntu-latest
15359 timeout-minutes : 5
154- needs : [generate-apigee-token]
15560 steps :
15661 - name : " Checkout code"
15762 uses : actions/checkout@v6
158- - name : Retrieve Apigee token
159- id : get-token
160- uses : ./.github/actions/retrieve-apigee-token
161- with :
162- secret-name : ${{ needs.generate-apigee-token.outputs.secret-name }}
163- aws-role-arn : ${{ secrets.AWS_ROLE_ARN }}
164- aws-region : ${{ env.AWS_REGION }}
165- - name : Set token environment variable
166- shell : bash
167- run : echo "APIGEE_ACCESS_TOKEN=${{ steps.get-token.outputs.apigee-access-token }}" >> $GITHUB_ENV
16863 - name : " Setup Python project"
16964 uses : ./.github/actions/setup-python-project
17065 with :
@@ -192,20 +87,9 @@ jobs:
19287 name : " Schema validation tests"
19388 runs-on : ubuntu-latest
19489 timeout-minutes : 5
195- needs : [generate-apigee-token]
19690 steps :
19791 - name : " Checkout code"
19892 uses : actions/checkout@v6
199- - name : Retrieve Apigee token
200- id : get-token
201- uses : ./.github/actions/retrieve-apigee-token
202- with :
203- secret-name : ${{ needs.generate-apigee-token.outputs.secret-name }}
204- aws-role-arn : ${{ secrets.AWS_ROLE_ARN }}
205- aws-region : ${{ env.AWS_REGION }}
206- - name : Set token environment variable
207- shell : bash
208- run : echo "APIGEE_ACCESS_TOKEN=${{ steps.get-token.outputs.apigee-access-token }}" >> $GITHUB_ENV
20993 - name : " Setup Python project"
21094 uses : ./.github/actions/setup-python-project
21195 with :
@@ -233,20 +117,9 @@ jobs:
233117 name : " Integration tests"
234118 runs-on : ubuntu-latest
235119 timeout-minutes : 10
236- needs : [generate-apigee-token]
237120 steps :
238121 - name : " Checkout code"
239122 uses : actions/checkout@v6
240- - name : Retrieve Apigee token
241- id : get-token
242- uses : ./.github/actions/retrieve-apigee-token
243- with :
244- secret-name : ${{ needs.generate-apigee-token.outputs.secret-name }}
245- aws-role-arn : ${{ secrets.AWS_ROLE_ARN }}
246- aws-region : ${{ env.AWS_REGION }}
247- - name : Set token environment variable
248- shell : bash
249- run : echo "APIGEE_ACCESS_TOKEN=${{ steps.get-token.outputs.apigee-access-token }}" >> $GITHUB_ENV
250123 - name : " Setup Python project"
251124 uses : ./.github/actions/setup-python-project
252125 with :
@@ -256,7 +129,6 @@ jobs:
256129 with :
257130 python-version : ${{ inputs.python_version }}
258131 - name : " Run integration test"
259- shell : bash
260132 run : make test-integration
261133 - name : " Upload integration test results"
262134 if : always()
@@ -275,20 +147,9 @@ jobs:
275147 name : " Acceptance tests"
276148 runs-on : ubuntu-latest
277149 timeout-minutes : 10
278- needs : [generate-apigee-token]
279150 steps :
280151 - name : " Checkout code"
281152 uses : actions/checkout@v6
282- - name : Retrieve Apigee token
283- id : get-token
284- uses : ./.github/actions/retrieve-apigee-token
285- with :
286- secret-name : ${{ needs.generate-apigee-token.outputs.secret-name }}
287- aws-role-arn : ${{ secrets.AWS_ROLE_ARN }}
288- aws-region : ${{ env.AWS_REGION }}
289- - name : Set token environment variable
290- shell : bash
291- run : echo "APIGEE_ACCESS_TOKEN=${{ steps.get-token.outputs.apigee-access-token }}" >> $GITHUB_ENV
292153 - name : " Setup Python project"
293154 uses : ./.github/actions/setup-python-project
294155 with :
@@ -369,30 +230,3 @@ jobs:
369230 -Dsonar.organization=${{ vars.SONAR_ORGANISATION_KEY }}
370231 -Dsonar.projectKey=${{ vars.SONAR_PROJECT_KEY }}
371232 -Dsonar.python.coverage.reportPaths=coverage-reports/${{ needs.create-coverage-name.outputs.coverage-name }}.xml
372-
373- cleanup-apigee-token :
374- name : " Cleanup Apigee token"
375- runs-on : ubuntu-latest
376- needs : [generate-apigee-token, test-unit, test-contract, test-schema, test-integration, test-acceptance]
377- if : always()
378- timeout-minutes : 2
379- steps :
380- - name : Configure AWS credentials
381- uses : aws-actions/configure-aws-credentials@a7a2c1125c67f40a1e95768f4e4a7d8f019f87af
382- with :
383- role-to-assume : ${{ secrets.AWS_ROLE_ARN }}
384- aws-region : ${{ env.AWS_REGION }}
385-
386- - name : Delete secret from AWS Secrets Manager
387- shell : bash
388- run : |
389- SECRET_NAME="${{ needs.generate-apigee-token.outputs.secret-name }}"
390- if [ -n "$SECRET_NAME" ]; then
391- aws secretsmanager delete-secret \
392- --secret-id "$SECRET_NAME" \
393- --force-delete-without-recovery \
394- --region ${{ env.AWS_REGION }} || true
395- echo "Secret $SECRET_NAME deleted from Secrets Manager"
396- else
397- echo "No secret name provided, skipping cleanup"
398- fi
0 commit comments