11name : End To End test run
22
33on :
4+ pull_request :
45 workflow_call :
56 inputs :
67 git_reference_for_application_image :
1112 description : The environment to build the base image against
1213 type : string
1314 required : false
14- default : " next"
15+ default : " origin/ next"
1516 secrets :
1617 HTTP_AUTH_TOKEN_FOR_TESTS :
1718 description : HTTP Basic Auth token for the environment under test
1819 required : true
1920 MAVIS_TESTING_REPO_ACCESS_TOKEN :
2021 description : Access token for the manage-vaccinations-in-schools-testing repository
2122 required : true
23+ workflow_dispatch :
24+ inputs :
25+ git_reference_for_application_image :
26+ description : The git reference for deploying containerized mavis application
27+ type : string
28+ required : false
29+ git_reference_for_database_image :
30+ description : The environment to build the base image against
31+ type : string
32+ required : false
33+ default : " origin/next"
2234
2335permissions : { }
2436
2537jobs :
38+ check-if-run-needed :
39+ name : Check if tests are required
40+ runs-on : ubuntu-latest
41+ if : github.event_name == 'pull_request'
42+ steps :
43+ - uses : actions/checkout@v6
44+ with :
45+ ref : ${{ inputs.git_reference_for_application_image || github.event.pull_request.head.sha || github.sha }}
46+ repository : nhsuk/manage-vaccinations-in-schools
47+ - name : Check if end-to-end tests need to run
48+ id : check
49+ uses : ./.github/actions/run-test-suites-check
50+ outputs :
51+ run-test-suites : ${{ steps.check.outputs.run-test-suites }}
2652 check-development-image-presence :
27- name : Check if docker image already exists
53+ name : Check if mavis docker image already exists
2854 runs-on : ubuntu-latest
2955 permissions :
3056 id-token : write
@@ -39,24 +65,24 @@ jobs:
3965 - name : Check if image exists
4066 id : check-image
4167 run : |
42- if aws ecr describe-images --repository-name mavis/development --image-ids imageTag=${{ github.sha }} > /dev/null 2>&1; then
68+ if aws ecr describe-images --repository-name mavis/development --image-ids imageTag=${{ inputs.git_reference_for_application_image || github.event.pull_request.head.sha || github.sha }} > /dev/null 2>&1; then
4369 echo "Docker image with given tag already exists"
4470 echo "build-needed=false" >> $GITHUB_OUTPUT
4571 else
4672 echo "Docker image does not exist. Build needed"
4773 echo "build-needed=true" >> $GITHUB_OUTPUT
4874 fi
4975 build-and-push-development-image :
50- needs : [ check-development-image-presence ]
51- if : needs.check-development-image-presence.outputs.build-needed == 'true'
76+ needs : [ check-development-image-presence, check-if-run-needed ]
77+ if : ${{ !cancelled() && needs.check-development-image-presence.outputs.build-needed == 'true' && (github.event_name != 'pull_request' || needs.check-if-run-needed.outputs.run-test-suites == 'true') }}
5278 runs-on : ubuntu-latest
5379 permissions :
5480 id-token : write
5581 steps :
5682 - name : Checkout code
5783 uses : actions/checkout@v6
5884 with :
59- ref : ${{ inputs.git_reference_for_application_image || github.ref }}
85+ ref : ${{ inputs.git_reference_for_application_image || github.event.pull_request.head.sha || github.sha }}
6086 repository : nhsuk/manage-vaccinations-in-schools
6187 - name : Configure AWS Credentials
6288 uses : aws-actions/configure-aws-credentials@v5
75101 .
76102 docker push "393416225559.dkr.ecr.eu-west-2.amazonaws.com/mavis/development:${{ github.sha }}"
77103 check-database-image-presence :
78- name : Check if docker image already exists
104+ name : Check if database docker image already exists
79105 runs-on : ubuntu-latest
80106 permissions :
81107 id-token : write
@@ -87,19 +113,24 @@ jobs:
87113 with :
88114 role-to-assume : arn:aws:iam::393416225559:role/GitHubAssuranceTestRole
89115 aws-region : eu-west-2
116+ - uses : actions/checkout@v6
117+ with :
118+ fetch-depth : 0
90119 - name : Check if image exists
91120 id : check-image
121+ env :
122+ GIT_REF : ${{ inputs.git_reference_for_database_image || (github.event_name == 'pull_request' && github.event.pull_request.base.sha) || github.sha }}
92123 run : |
93- if aws ecr describe-images --repository-name mavis/development --image-ids imageTag=${{ github.event.pull_request.base.ref }} > /dev/null 2>&1; then
124+ if aws ecr describe-images --repository-name mavis/development --image-ids imageTag=$GIT_REF > /dev/null 2>&1; then
94125 echo "Docker image with given tag already exists"
95126 echo "build-needed=false" >> $GITHUB_OUTPUT
96127 else
97128 echo "Docker image does not exist. Build needed"
98129 echo "build-needed=true" >> $GITHUB_OUTPUT
99130 fi
100131 build-and-push-database-image :
101- needs : [ check-database-image-presence ]
102- if : needs.check-database-image-presence.outputs.build-needed == 'true'
132+ needs : [ check-database-image-presence, check-if-run-needed ]
133+ if : ${{ !cancelled() && needs.check-database-image-presence.outputs.build-needed == 'true' && (github.event_name != 'pull_request' || needs.check-if-run-needed.outputs.run-test-suites == 'true') }}
103134 permissions :
104135 id-token : write
105136 contents : read
@@ -110,13 +141,14 @@ jobs:
110141 needs : [ check-development-image-presence,
111142 build-and-push-development-image,
112143 check-database-image-presence,
113- build-and-push-database-image ]
144+ build-and-push-database-image,
145+ check-if-run-needed ]
114146 if : ${{ !cancelled() &&
115147 (needs.build-and-push-development-image.result == 'success' ||
116148 (needs.check-development-image-presence.result == 'success' && needs.build-and-push-development-image.result == 'skipped')) &&
117149 (needs.build-and-push-database-image.result == 'success' ||
118150 (needs.check-database-image-presence.result == 'success' && needs.build-and-push-database-image.result == 'skipped'))
119- }}
151+ && (github.event_name != 'pull_request' || needs.check-if-run-needed.outputs.run-test-suites == 'true') }}
120152 runs-on : ubuntu-latest
121153 permissions :
122154 id-token : write
0 commit comments