Skip to content

Commit fc62a94

Browse files
authored
Merge pull request #5758 from nhsuk/next
Version 6.11.0
2 parents 3c0f822 + c7db5d9 commit fc62a94

194 files changed

Lines changed: 2674 additions & 1037 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: 'Run Test Suites Check'
2+
description: 'Determines whether Rails test suites should run based on changed files'
3+
4+
inputs:
5+
base-ref:
6+
description: 'Base ref for comparison'
7+
required: false
8+
default: ${{ github.event.pull_request.base.ref }}
9+
10+
outputs:
11+
run-test-suites:
12+
description: 'Whether to run test suites (true/false)'
13+
value: ${{ steps.check.outputs.run-test-suites }}
14+
15+
runs:
16+
using: 'composite'
17+
steps:
18+
- name: Checkout code
19+
uses: actions/checkout@v6
20+
with:
21+
fetch-depth: 0
22+
23+
- name: Determine if rails tests are needed
24+
id: check
25+
shell: bash
26+
run: |
27+
if [ "${{ github.event_name }}" == "pull_request" ]; then
28+
git fetch origin
29+
RELEVANT_DIRS=$(git diff origin/${{ inputs.base-ref }}...HEAD --name-only)
30+
if [ -z "$(echo "$RELEVANT_DIRS" | egrep -v '^(.github|adr|aws|docs|storage|terraform)/')" ]; then
31+
echo "No relevant changes detected, skipping rails tests"
32+
echo "run-test-suites=false" >> $GITHUB_OUTPUT
33+
exit 0
34+
fi
35+
fi
36+
echo "Not a pull request or detected relevant changes: Running rails tests"
37+
echo "run-test-suites=true" >> $GITHUB_OUTPUT
38+
39+
- name: Handle check failure
40+
if: steps.check.outcome == 'failure'
41+
shell: bash
42+
run: echo "run-test-suites=true" >> $GITHUB_OUTPUT

.github/workflows/end-to-end-tests.yml

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
name: End To End test run
22

33
on:
4+
pull_request:
45
workflow_call:
56
inputs:
67
git_reference_for_application_image:
@@ -11,20 +12,45 @@ on:
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

2335
permissions: { }
2436

2537
jobs:
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
@@ -75,7 +101,7 @@ jobs:
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

.github/workflows/test.yml

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,15 @@ permissions: {}
88

99
jobs:
1010
run-test-suites-check:
11-
name: Check if Rails tests need to run
11+
name: Check if E2E test is required
1212
runs-on: ubuntu-latest
1313
steps:
1414
- uses: actions/checkout@v6
15-
with:
16-
fetch-depth: 0
17-
- name: Determine if rails tests are needed
18-
id: check-rails-relevant-changes
19-
continue-on-error: true
20-
run: |
21-
if [ ${{ github.event_name }} == "pull_request" ]; then
22-
git fetch origin
23-
RELEVANT_DIRS=$(git diff origin/${{ github.event.pull_request.base.ref }}...HEAD --name-only)
24-
if [ -z "$(echo "$RELEVANT_DIRS" | egrep -v "^(.github|adr|aws|docs|storage|terraform)/")" ]; then
25-
echo "No relevant changes detected, skipping rails tests"
26-
echo "RUN_TEST_SUITES=false" >> $GITHUB_ENV
27-
exit 0
28-
fi
29-
fi
30-
echo "Not a pull request or detected relevant changes: Running rails tests"
31-
echo "RUN_TEST_SUITES=true" >> $GITHUB_ENV
32-
- name: Run rails tests if diff check fails
33-
id: check-rails-relevant-changes-failure
34-
run: |
35-
if [[ ${{ steps.check-rails-relevant-changes.outcome }} == failure ]]; then
36-
echo "RUN_TEST_SUITES=true" >> $GITHUB_OUTPUT
37-
else
38-
echo "RUN_TEST_SUITES=$RUN_TEST_SUITES" >> $GITHUB_OUTPUT
39-
fi
15+
- name: Check if Rails tests need to run
16+
id: check
17+
uses: ./.github/actions/run-test-suites-check
4018
outputs:
41-
run-test-suites: ${{ steps.check-rails-relevant-changes-failure.outputs.RUN_TEST_SUITES }}
19+
run-test-suites: ${{ steps.check.outputs.run-test-suites }}
4220

4321
rspec:
4422
name: RSpec
@@ -83,19 +61,6 @@ jobs:
8361
run: bundle exec rspec -t local_users
8462
env:
8563
MAVIS__CIS2__ENABLED: false
86-
end-to-end:
87-
name: End to End
88-
needs: run-test-suites-check
89-
if: ${{ needs.run-test-suites-check.outputs.run-test-suites == 'true' && github.event_name != 'push' }}
90-
permissions:
91-
id-token: write
92-
contents: write
93-
uses: ./.github/workflows/end-to-end-tests.yml
94-
with:
95-
git_reference_for_database_image: ${{ github.event.pull_request.base.ref }}
96-
secrets:
97-
HTTP_AUTH_TOKEN_FOR_TESTS: ${{ secrets.HTTP_AUTH_TOKEN_FOR_TESTS }}
98-
MAVIS_TESTING_REPO_ACCESS_TOKEN: ${{ secrets.MAVIS_TESTING_REPO_ACCESS_TOKEN }}
9964

10065
seeds:
10166
name: Seeds

.rubocop.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
inherit_gem:
2+
pundit:
3+
- config/rubocop-rspec.yml
24
rubocop-govuk:
35
- config/default.yml
46
- config/rails.yml

.ruby-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ruby-3.4.6
1+
ruby-4.0.0

.tool-versions

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ nodejs 22.15.0
44
pkl 0.28.1
55
postgres 17.2
66
redis 8.2.1
7-
ruby 3.4.6
7+
ruby 4.0.0
88
terraform 1.13.3
99
tflint 0.55.1

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# check=error=true
33

44
# Make sure RUBY_VERSION matches the Ruby version in .ruby-version
5-
ARG RUBY_VERSION=3.4.6
5+
ARG RUBY_VERSION=4.0.0
66
ARG BUNDLE_WITHOUT="development:test"
77
ARG RAILS_ENV="production"
88
FROM docker.io/library/ruby:$RUBY_VERSION-slim AS base

Gemfile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,10 @@ group :development do
9595
gem "hotwire-livereload"
9696
gem "prettier_print", require: false
9797
gem "rladr"
98-
gem "rubocop-govuk", require: false
98+
gem "rubocop-govuk",
99+
require: false,
100+
github: "alphagov/rubocop-govuk",
101+
branch: "main"
99102
gem "ruby-prof", require: false
100103
gem "rufo", require: false
101104
gem "solargraph", require: false

0 commit comments

Comments
 (0)