Skip to content

Commit 0e725b9

Browse files
Rename workflow and add sidekiq
- Rename workflow to fit scope better - Add sidekiq container to allow tests to pass
1 parent 2750ad7 commit 0e725b9

3 files changed

Lines changed: 129 additions & 34 deletions

File tree

Lines changed: 61 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@ name: Regression test run
22

33
on:
44
workflow_call:
5+
inputs:
6+
github_ref:
7+
description: The git reference for deploying containerized mavis application
8+
type: string
9+
required: false
10+
secrets:
11+
HTTP_AUTH_TOKEN_FOR_TESTS:
12+
description: HTTP Basic Auth token for the environment under test
13+
required: true
14+
MAVIS_TESTING_REPO_ACCESS_TOKEN:
15+
description: Access token for the manage-vaccinations-in-schools-testing repository
16+
required: true
517

618
permissions: { }
719

@@ -37,7 +49,10 @@ jobs:
3749
id-token: write
3850
steps:
3951
- name: Checkout code
40-
uses: actions/checkout@v5
52+
uses: actions/checkout@v6
53+
with:
54+
ref: ${{ inputs.github_ref || github.ref }}
55+
repository: nhsuk/manage-vaccinations-in-schools
4156
- name: Configure AWS Credentials
4257
uses: aws-actions/configure-aws-credentials@v5
4358
with:
@@ -71,24 +86,31 @@ jobs:
7186
with:
7287
role-to-assume: arn:aws:iam::393416225559:role/GitHubAssuranceTestRole
7388
aws-region: eu-west-2
74-
- name: Render task definition
75-
id: render-task-definition
89+
- name: Render task definition 1
90+
id: render-task-definition-1
7691
uses: aws-actions/amazon-ecs-render-task-definition@v1
7792
with:
7893
task-definition-family: "assurance-testing-regression-task-definition-template"
79-
container-name: "mavis-regression"
94+
container-name: "mavis-regression-web"
95+
image: "393416225559.dkr.ecr.eu-west-2.amazonaws.com/mavis/regression:${{ github.sha }}"
96+
- name: Render task definition 2
97+
id: render-task-definition-2
98+
uses: aws-actions/amazon-ecs-render-task-definition@v1
99+
with:
100+
task-definition: ${{ steps.render-task-definition-1.outputs.task-definition }}
101+
container-name: "mavis-regression-sidekiq"
80102
image: "393416225559.dkr.ecr.eu-west-2.amazonaws.com/mavis/regression:${{ github.sha }}"
81103
- name: Prepare deployment
82104
id: prepare-deployment
83105
run: |
84106
file_path="assurance-testing-regression-task-definition.json"
85107
family_name="assurance-testing-regression-task-definition"
86-
echo "$(jq --arg f "$family_name" '.family = $f' "${{ steps.render-task-definition.outputs.task-definition }}")" > "$file_path"
108+
echo "$(jq --arg f "$family_name" '.family = $f' "${{ steps.render-task-definition-2.outputs.task-definition }}")" > "$file_path"
87109
cat "$file_path" #TODO: Debugging, remove later
88-
110+
89111
subnet_id=$(aws ec2 describe-subnets --filters Name=tag:Name,Values=assurance-testing-subnet --query 'Subnets[0].SubnetId' --output text)
90112
security_group_id=$(aws ec2 describe-security-groups --filters Name=group-name,Values=assurance-testing-regression-sg --query 'SecurityGroups[0].GroupId' --output text)
91-
113+
92114
echo "run-task-subnets=$subnet_id" >> $GITHUB_OUTPUT
93115
echo "run-task-security-groups=$security_group_id" >> $GITHUB_OUTPUT
94116
- name: Deploy task definition
@@ -176,9 +198,12 @@ jobs:
176198
run: |
177199
TASK_ARN=$(echo '${{ needs.launch-dockerized-devimage.outputs.run_task_arn }}' | jq -r '.[0]')
178200
TASK_ID=$(sed 's:^.*/::' <<< $TASK_ARN)
179-
CLOUDWATCH_URL="https://eu-west-2.console.aws.amazon.com/cloudwatch/home?region=eu-west-2#logsV2:log-groups/log-group/assurance-testing-ecs/log-events/assurance-testing-logs\$252Fmavis-regression\$252F${TASK_ID}\$3Fstart\$3D$(date +%s)000\$26end\$3D$(date -d '+30 minutes' +%s)000"
201+
WEB_CLOUDWATCH_URL="https://eu-west-2.console.aws.amazon.com/cloudwatch/home?region=eu-west-2#logsV2:log-groups/log-group/assurance-testing-ecs/log-events/assurance-testing-logs\$252Fmavis-regression-web\$252F${TASK_ID}\$3Fstart\$3D$(date +%s)000\$26end\$3D$(date -d '+30 minutes' +%s)000"
202+
SIDEKIQ_CLOUDWATCH_URL="https://eu-west-2.console.aws.amazon.com/cloudwatch/home?region=eu-west-2#logsV2:log-groups/log-group/assurance-testing-ecs/log-events/assurance-testing-logs\$252Fmavis-regression-sidekiq\$252F${TASK_ID}\$3Fstart\$3D$(date +%s)000\$26end\$3D$(date -d '+30 minutes' +%s)000"
180203
echo "**Task ID:** $TASK_ID" >> $GITHUB_STEP_SUMMARY
181-
echo "**Container Logs:** $CLOUDWATCH_URL" >> $GITHUB_STEP_SUMMARY
204+
echo "**Container Logs:** " >> $GITHUB_STEP_SUMMARY
205+
echo " * WEB logs: $WEB_CLOUDWATCH_URL" >> $GITHUB_STEP_SUMMARY
206+
echo " * SIDEKIQ logs: $SIDEKIQ_CLOUDWATCH_URL" >> $GITHUB_STEP_SUMMARY
182207
NETWORK_INTERFACE=$(aws ecs describe-tasks \
183208
--cluster assurance-testing \
184209
--tasks "$TASK_ARN" \
@@ -190,30 +215,39 @@ jobs:
190215
echo "container_ip=$CONTAINER_IP" >> $GITHUB_OUTPUT
191216
echo "task_arn=$TASK_ARN" >> $GITHUB_OUTPUT
192217
echo "Started task: $TASK_ARN"
193-
echo "Logs for server: ${CLOUDWATCH_URL}"
218+
echo "Logs for server: [web](${WEB_CLOUDWATCH_URL}) and [sidekiq](${SIDEKIQ_CLOUDWATCH_URL})"
219+
find-correct-test-branch:
220+
needs: [wait-for-task-stability]
221+
if: ${{ !cancelled() && needs.wait-for-task-stability.result == 'success'}}
222+
runs-on: ubuntu-latest
223+
permissions:
224+
contents: read
225+
outputs:
226+
test_branch: ${{ steps.check-branch.outputs.test_branch }}
227+
steps:
228+
- name: Check if branch exists
229+
id: check-branch
230+
run: |
231+
if git ls-remote --exit-code --heads https://github.com/NHSDigital/manage-vaccinations-in-schools-testing.git "$BRANCH_TO_CHECK" > /dev/null 2>&1; then
232+
echo "test_branch=$BRANCH_TO_CHECK" >> $GITHUB_OUTPUT
233+
else
234+
echo "test_branch=main" >> $GITHUB_OUTPUT
235+
fi
236+
env:
237+
BRANCH_TO_CHECK: ${{ github.head_ref }}
194238
call-functional-tests:
195-
needs: [launch-dockerized-devimage, wait-for-task-stability]
239+
needs: [launch-dockerized-devimage, wait-for-task-stability, find-correct-test-branch]
196240
if: ${{ !cancelled() && needs.launch-dockerized-devimage.result == 'success' && needs.wait-for-task-stability.result == 'success'}}
197-
uses: NHSDigital/manage-vaccinations-in-schools-testing/.github/workflows/functional_selected_device.yaml@make-workflow-callable #TODO: Change once this is in main
241+
uses: NHSDigital/manage-vaccinations-in-schools-testing/.github/workflows/functional_selected_device.yaml@containerized_regression_tests_for_PRs #TODO: Change once this is in main
198242
permissions:
199243
contents: write
200244
with:
201-
tests: ''
202-
device: 'Desktop Chrome'
203-
programmes: 'FLU,HPV,MENACWY,MMR,TD_IPV'
204-
endpoint: "http://${{ needs.wait-for-task-stability.outputs.container_ip }}:4000"
205-
screenshot_all_steps: 'false'
206-
enable_reruns: 'true'
207-
test_workers: '4'
208-
set_feature_flags: 'false'
209-
additional_feature_flags: ''
245+
cross_service_tests: false
246+
github_ref: ${{ needs.find-correct-test-branch.outputs.test_branch }}
247+
endpoint: 'http://${{ needs.wait-for-task-stability.outputs.container_ip }}:4000'
210248
secrets:
211249
HTTP_AUTH_TOKEN_FOR_TESTS: ${{ secrets.HTTP_AUTH_TOKEN_FOR_TESTS }}
212-
# IMMS_API_KEY: ${{ secrets.IMMS_API_KEY }}
213-
# IMMS_API_KID: ${{ secrets.IMMS_API_KID }}
214-
# IMMS_API_PEM: ${{ secrets.IMMS_API_PEM }}
215-
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
216-
#
250+
MAVIS_TESTING_REPO_ACCESS_TOKEN: ${{ secrets.MAVIS_TESTING_REPO_ACCESS_TOKEN }}
217251
stop-docker-environment:
218252
needs: [call-functional-tests, launch-dockerized-devimage, wait-for-task-stability]
219253
if: ${{ always() && needs.launch-dockerized-devimage.result != 'skipped'}}
@@ -227,4 +261,4 @@ jobs:
227261
role-to-assume: arn:aws:iam::393416225559:role/GitHubAssuranceTestRole
228262
aws-region: eu-west-2
229263
- name: Stop dockerized dev image
230-
run: aws ecs stop-task --cluster assurance-testing --task ${{ needs.wait-for-task-stability.outputs.task_arn }}
264+
run: aws ecs stop-task --cluster assurance-testing --task ${{ needs.wait-for-task-stability.outputs.task_arn }}

.github/workflows/test.yml

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,20 +79,23 @@ jobs:
7979
bin/rails parallel:load_schema
8080
- name: Run tests
8181
run: bin/rails parallel:spec
82-
regression:
83-
name: Regression Tests
82+
end-to-end-tests:
83+
name: End to End tests
8484
needs: run-test-suites-check
8585
if: needs.run-test-suites-check.outputs.run-test-suites == 'true'
8686
permissions:
8787
id-token: write
8888
contents: write
89-
uses: ./.github/workflows/regression-test-run.yml
89+
uses: ./.github/workflows/end-to-end-tests.yml
90+
secrets:
91+
HTTP_AUTH_TOKEN_FOR_TESTS: ${{ secrets.HTTP_AUTH_TOKEN_FOR_TESTS }}
92+
MAVIS_TESTING_REPO_ACCESS_TOKEN: ${{ secrets.MAVIS_TESTING_REPO_ACCESS_TOKEN }}
9093

9194
seeds:
9295
name: Seeds
9396
runs-on: ubuntu-latest
94-
needs: pre-rails-tests
95-
if: needs.pre-rails-tests.outputs.run-rails-tests == 'true'
97+
needs: run-test-suites-check
98+
if: needs.run-test-suites-check.outputs.run-test-suites == 'true'
9699
services:
97100
postgres:
98101
image: postgres:17.2

terraform/assurance_testing/ecs.tf

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ resource "aws_ecs_task_definition" "regression" {
5151
task_role_arn = aws_iam_role.ecs_task_role.arn
5252
container_definitions = jsonencode([
5353
{
54-
name = "mavis-regression"
54+
name = "mavis-regression-web"
5555
image = "CHANGE_ME"
5656
essential = true
5757
environment = [
@@ -74,6 +74,10 @@ resource "aws_ecs_task_definition" "regression" {
7474
{
7575
name = "SKIP_TEST_DATABASE"
7676
value = "true"
77+
},
78+
{
79+
name = "SERVER_TYPE"
80+
value = "web"
7781
}
7882
]
7983
portMappings = [
@@ -88,7 +92,7 @@ resource "aws_ecs_task_definition" "regression" {
8892
options = {
8993
awslogs-group = aws_cloudwatch_log_group.this.name
9094
awslogs-region = "eu-west-2"
91-
awslogs-stream-prefix = "${var.identifier}-logs"
95+
awslogs-stream-prefix = "${var.identifier}-web-logs"
9296
}
9397
}
9498
healthCheck = {
@@ -103,6 +107,60 @@ resource "aws_ecs_task_definition" "regression" {
103107
condition = "HEALTHY"
104108
}]
105109
},
110+
{
111+
name = "mavis-regression-sidekiq"
112+
image = "CHANGE_ME"
113+
essential = false
114+
environment = [
115+
{
116+
name = "DATABASE_HOST"
117+
value = "localhost"
118+
},
119+
{
120+
name = "DATABASE_USER"
121+
value = "postgres"
122+
},
123+
{
124+
name = "DATABASE_PASSWORD"
125+
value = "postgres"
126+
},
127+
{
128+
name = "RAILS_MASTER_KEY"
129+
value = "intentionally-insecure-dev-key00"
130+
},
131+
{
132+
name = "SKIP_TEST_DATABASE"
133+
value = "true"
134+
},
135+
{
136+
name = "SERVER_TYPE"
137+
value = "sidekiq"
138+
},
139+
{
140+
name = "HTTP_PORT"
141+
value = "5000"
142+
}
143+
]
144+
logConfiguration = {
145+
logDriver = "awslogs"
146+
options = {
147+
awslogs-group = aws_cloudwatch_log_group.this.name
148+
awslogs-region = "eu-west-2"
149+
awslogs-stream-prefix = "${var.identifier}-logs"
150+
}
151+
}
152+
healthCheck = {
153+
command = ["CMD-SHELL", "grep -q '[s]idekiq' /proc/*/cmdline 2>/dev/null || exit 1"]
154+
interval = 30
155+
timeout = 5
156+
retries = 3
157+
startPeriod = 90
158+
}
159+
dependsOn = [{
160+
containerName = "mavis-regression-db"
161+
condition = "HEALTHY"
162+
}]
163+
},
106164
{
107165
name = "mavis-regression-db"
108166
image = "${data.aws_caller_identity.current.account_id}.dkr.ecr.eu-west-2.amazonaws.com/mavis/dev/postgres_db:latest"

0 commit comments

Comments
 (0)