Skip to content

Commit 6944298

Browse files
authored
Merge branch 'main' into feature/CCM-13116-Letter-Queue-Operations
2 parents 55bf655 + a7a2ebc commit 6944298

18 files changed

Lines changed: 208 additions & 27 deletions
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
name: E2E tests
2+
description: "Run end-to-end tests for this repo"
3+
4+
runs:
5+
using: "composite"
6+
7+
steps:
8+
- name: Install poetry and e2e test dependencies
9+
shell: bash
10+
run: |
11+
pipx install poetry
12+
cd tests/e2e-tests && poetry install
13+
14+
- name: Run e2e tests
15+
shell: bash
16+
run: |
17+
echo "$INTERNAL_DEV_TEST_PEM" > "${GITHUB_WORKSPACE}/internal-dev-test-1.pem"
18+
chmod 600 "${GITHUB_WORKSPACE}/internal-dev-test-1.pem"
19+
export PROXY_NAME=nhs-notify-supplier--internal-dev--nhs-notify-supplier
20+
export API_ENVIRONMENT=internal-dev
21+
export NON_PROD_PRIVATE_KEY="${GITHUB_WORKSPACE}/internal-dev-test-1.pem"
22+
make .internal-dev-test

.github/workflows/cicd-1-pull-request.yaml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ jobs:
2929
does_pull_request_exist: ${{ steps.pr_exists.outputs.does_pull_request_exist }}
3030
pr_number: ${{ steps.pr_exists.outputs.pr_number }}
3131
skip_trivy_package: ${{ steps.skip_trivy.outputs.skip_trivy_package }}
32+
deploy_proxy: ${{ steps.deploy_proxy.outputs.deploy_proxy }}
3233
steps:
3334
- name: "Checkout code"
3435
uses: actions/checkout@v5
@@ -87,6 +88,26 @@ jobs:
8788
else
8889
echo "skip_trivy_package=false" >> $GITHUB_OUTPUT
8990
fi
91+
- name: "Determine if proxy should be deployed"
92+
id: deploy_proxy
93+
env:
94+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
95+
PR_NUMBER: ${{ steps.pr_exists.outputs.pr_number }}
96+
run: |
97+
if [[ -z "$PR_NUMBER" ]]; then
98+
echo "No pull request detected; proxy deployment will run."
99+
echo "deploy_proxy=true" >> $GITHUB_OUTPUT
100+
exit 0
101+
fi
102+
103+
labels=$(gh pr view "$PR_NUMBER" --json labels --jq '.labels[].name')
104+
echo "Labels on PR #$PR_NUMBER: $labels"
105+
106+
if echo "$labels" | grep -Fxq 'deploy-proxy'; then
107+
echo "deploy_proxy=true" >> $GITHUB_OUTPUT
108+
else
109+
echo "deploy_proxy=false" >> $GITHUB_OUTPUT
110+
fi
90111
- name: "List variables"
91112
run: |
92113
export BUILD_DATETIME_LONDON="${{ steps.variables.outputs.build_datetime_london }}"
@@ -141,6 +162,7 @@ jobs:
141162
terraform_version: "${{ needs.metadata.outputs.terraform_version }}"
142163
version: "${{ needs.metadata.outputs.version }}"
143164
pr_number: "${{ needs.metadata.outputs.pr_number }}"
165+
deploy_proxy: "${{ needs.metadata.outputs.deploy_proxy }}"
144166
secrets: inherit
145167
acceptance-stage: # Recommended maximum execution time is 10 minutes
146168
name: "Acceptance stage"
@@ -156,6 +178,7 @@ jobs:
156178
terraform_version: "${{ needs.metadata.outputs.terraform_version }}"
157179
version: "${{ needs.metadata.outputs.version }}"
158180
pr_number: ${{ needs.metadata.outputs.pr_number }}
181+
proxy_deployed: "${{ needs.metadata.outputs.deploy_proxy }}"
159182
secrets: inherit
160183
publish-stage: # Recommended maximum execution time is 10 minutes
161184
name: "Publish stage"

.github/workflows/stage-3-build.yaml

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ on:
3535
description: "PR Number if it exists"
3636
required: false
3737
type: string
38+
deploy_proxy:
39+
description: "True if the APIM proxy should be deployed"
40+
required: true
41+
type: string
3842

3943
permissions:
4044
id-token: write # This is required for requesting the JWT
@@ -133,9 +137,13 @@ jobs:
133137
pr-create-dynamic-environment:
134138
name: Create Dynamic Environment
135139
runs-on: ubuntu-latest
136-
if: inputs.pr_number != ''
140+
outputs:
141+
environment_name: ${{ steps.set-environment.outputs.environment_name }}
137142
steps:
138143
- uses: actions/checkout@v5
144+
- name: Set environment name
145+
id: set-environment
146+
run: echo "environment_name=${{ inputs.pr_number != '' && format('pr{0}', inputs.pr_number) || 'main' }}" >> $GITHUB_OUTPUT
139147
- name: Trigger dynamic environment creation
140148
env:
141149
APP_CLIENT_ID: ${{ secrets.APP_CLIENT_ID }}
@@ -148,7 +156,7 @@ jobs:
148156
--infraRepoName "$(echo ${{ github.repository }} | cut -d'/' -f2)" \
149157
--releaseVersion ${{ github.head_ref || github.ref_name }} \
150158
--targetWorkflow "dispatch-deploy-dynamic-env.yaml" \
151-
--targetEnvironment "pr${PR_NUMBER}" \
159+
--targetEnvironment "${{ steps.set-environment.outputs.environment_name }}" \
152160
--targetComponent "api" \
153161
--targetAccountGroup "nhs-notify-supplier-api-dev" \
154162
--terraformAction "apply" \
@@ -157,12 +165,11 @@ jobs:
157165
artefact-proxies:
158166
name: "Build proxies"
159167
runs-on: ubuntu-latest
160-
if: inputs.pr_number != ''
168+
if: inputs.deploy_proxy == 'true'
161169
needs: [artefact-oas-spec-sandbox, pr-create-dynamic-environment]
162170
timeout-minutes: 10
163171
env:
164172
PROXYGEN_API_NAME: nhs-notify-supplier
165-
PR_NUMBER: ${{ inputs.pr_number }}
166173
APP_CLIENT_ID: ${{ secrets.APP_CLIENT_ID }}
167174
APP_PEM_FILE: ${{ secrets.APP_PEM_FILE }}
168175
steps:
@@ -172,7 +179,7 @@ jobs:
172179
uses: ./.github/actions/build-proxies
173180
with:
174181
version: "${{ inputs.version }}"
175-
environment: ${{ inputs.pr_number != '' && format('pr{0}', inputs.pr_number) || 'main' }}
182+
environment: ${{ needs.pr-create-dynamic-environment.outputs.environment_name }}
176183
apimEnv: "internal-dev-sandbox"
177184
runId: "${{ github.run_id }}"
178185
buildSandbox: true

.github/workflows/stage-4-acceptance.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ on:
3434
pr_number:
3535
required: true
3636
type: string
37+
proxy_deployed:
38+
description: "True if the APIM proxy was deployed"
39+
required: true
40+
type: string
3741

3842
permissions:
3943
id-token: write
@@ -77,3 +81,20 @@ jobs:
7781
--targetEnvironment "$ENVIRONMENT" \
7882
--targetAccountGroup "nhs-notify-supplier-api-dev" \
7983
--targetComponent "api"
84+
85+
run-e2e-tests:
86+
name: Run End-to-End Tests
87+
runs-on: ubuntu-latest
88+
if: inputs.proxy_deployed == 'true'
89+
steps:
90+
- uses: actions/checkout@v5.0.0
91+
92+
- name: "Run e2e tests"
93+
#uses: ./.github/actions/e2e-tests
94+
env:
95+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
96+
NON_PROD_API_KEY: ${{ secrets.NON_PROD_API_KEY }}
97+
INTERNAL_DEV_TEST_PEM: ${{ secrets.INTERNAL_DEV_TEST_PEM }}
98+
shell: bash
99+
run: |
100+
echo "E2E tests are currently disabled. See CCM-14778"

infrastructure/terraform/components/api/README.md

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,13 @@ No requirements.
2020
| <a name="input_enable_alarms"></a> [enable\_alarms](#input\_enable\_alarms) | Enable CloudWatch alarms for this deployed environment | `bool` | `true` | no |
2121
| <a name="input_enable_api_data_trace"></a> [enable\_api\_data\_trace](#input\_enable\_api\_data\_trace) | Enable API Gateway data trace logging | `bool` | `false` | no |
2222
| <a name="input_enable_backups"></a> [enable\_backups](#input\_enable\_backups) | Enable backups | `bool` | `false` | no |
23+
| <a name="input_enable_event_anomaly_detection"></a> [enable\_event\_anomaly\_detection](#input\_enable\_event\_anomaly\_detection) | Enable CloudWatch anomaly detection alarm for SNS message Detects abnormal drops or spikes in event publishing volume. | `bool` | `true` | no |
2324
| <a name="input_enable_event_cache"></a> [enable\_event\_cache](#input\_enable\_event\_cache) | Enable caching of events to an S3 bucket | `bool` | `true` | no |
2425
| <a name="input_enable_sns_delivery_logging"></a> [enable\_sns\_delivery\_logging](#input\_enable\_sns\_delivery\_logging) | Enable SNS Delivery Failure Notifications | `bool` | `true` | no |
2526
| <a name="input_environment"></a> [environment](#input\_environment) | The name of the tfscaffold environment | `string` | n/a | yes |
27+
| <a name="input_event_anomaly_band_width"></a> [event\_anomaly\_band\_width](#input\_event\_anomaly\_band\_width) | The width of the anomaly detection band. Higher values (e.g. 4-6) reduce sensitivity and noise, lower values (e.g. 2-3) increase sensitivity. Recommended: 2-4. | `number` | `4` | no |
28+
| <a name="input_event_anomaly_evaluation_periods"></a> [event\_anomaly\_evaluation\_periods](#input\_event\_anomaly\_evaluation\_periods) | Number of evaluation periods for the anomaly alarm. Each period is defined by event\_anomaly\_period. | `number` | `3` | no |
29+
| <a name="input_event_anomaly_period"></a> [event\_anomaly\_period](#input\_event\_anomaly\_period) | The period in seconds over which the specified statistic is applied for anomaly detection. Minimum 300 seconds (5 minutes). Recommended: 300-600. | `number` | `300` | no |
2630
| <a name="input_eventpub_control_plane_bus_arn"></a> [eventpub\_control\_plane\_bus\_arn](#input\_eventpub\_control\_plane\_bus\_arn) | ARN of the EventBridge control plane bus for eventpub | `string` | `""` | no |
2731
| <a name="input_eventpub_data_plane_bus_arn"></a> [eventpub\_data\_plane\_bus\_arn](#input\_eventpub\_data\_plane\_bus\_arn) | ARN of the EventBridge data plane bus for eventpub | `string` | `""` | no |
2832
| <a name="input_force_destroy"></a> [force\_destroy](#input\_force\_destroy) | Flag to force deletion of S3 buckets | `bool` | `false` | no |
@@ -45,31 +49,31 @@ No requirements.
4549
| Name | Source | Version |
4650
|------|--------|---------|
4751
| <a name="module_amendment_event_transformer"></a> [amendment\_event\_transformer](#module\_amendment\_event\_transformer) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
48-
| <a name="module_amendments_queue"></a> [amendments\_queue](#module\_amendments\_queue) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.5/terraform-sqs.zip | n/a |
52+
| <a name="module_amendments_queue"></a> [amendments\_queue](#module\_amendments\_queue) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.6/terraform-sqs.zip | n/a |
4953
| <a name="module_authorizer_lambda"></a> [authorizer\_lambda](#module\_authorizer\_lambda) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
5054
| <a name="module_ddb_alarms_letter_queue"></a> [ddb\_alarms\_letter\_queue](#module\_ddb\_alarms\_letter\_queue) | ../../modules/alarms-ddb | n/a |
5155
| <a name="module_ddb_alarms_letters"></a> [ddb\_alarms\_letters](#module\_ddb\_alarms\_letters) | ../../modules/alarms-ddb | n/a |
5256
| <a name="module_ddb_alarms_mi"></a> [ddb\_alarms\_mi](#module\_ddb\_alarms\_mi) | ../../modules/alarms-ddb | n/a |
5357
| <a name="module_ddb_alarms_suppliers"></a> [ddb\_alarms\_suppliers](#module\_ddb\_alarms\_suppliers) | ../../modules/alarms-ddb | n/a |
54-
| <a name="module_domain_truststore"></a> [domain\_truststore](#module\_domain\_truststore) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.4/terraform-s3bucket.zip | n/a |
55-
| <a name="module_eventpub"></a> [eventpub](#module\_eventpub) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.4/terraform-eventpub.zip | n/a |
58+
| <a name="module_domain_truststore"></a> [domain\_truststore](#module\_domain\_truststore) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.6/terraform-s3bucket.zip | n/a |
59+
| <a name="module_eventpub"></a> [eventpub](#module\_eventpub) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.6/terraform-eventpub.zip | n/a |
5660
| <a name="module_eventsub"></a> [eventsub](#module\_eventsub) | ../../modules/eventsub | n/a |
5761
| <a name="module_get_letter"></a> [get\_letter](#module\_get\_letter) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
5862
| <a name="module_get_letter_data"></a> [get\_letter\_data](#module\_get\_letter\_data) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
5963
| <a name="module_get_letters"></a> [get\_letters](#module\_get\_letters) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
6064
| <a name="module_get_status"></a> [get\_status](#module\_get\_status) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
6165
| <a name="module_kms"></a> [kms](#module\_kms) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-kms.zip | n/a |
6266
| <a name="module_lambda_alarms"></a> [lambda\_alarms](#module\_lambda\_alarms) | ../../modules/alarms-lambda | n/a |
63-
| <a name="module_letter_status_updates_queue"></a> [letter\_status\_updates\_queue](#module\_letter\_status\_updates\_queue) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.5/terraform-sqs.zip | n/a |
67+
| <a name="module_letter_status_updates_queue"></a> [letter\_status\_updates\_queue](#module\_letter\_status\_updates\_queue) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.6/terraform-sqs.zip | n/a |
6468
| <a name="module_letter_updates_transformer"></a> [letter\_updates\_transformer](#module\_letter\_updates\_transformer) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
6569
| <a name="module_mi_updates_transformer"></a> [mi\_updates\_transformer](#module\_mi\_updates\_transformer) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-lambda.zip | n/a |
6670
| <a name="module_patch_letter"></a> [patch\_letter](#module\_patch\_letter) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
6771
| <a name="module_post_letters"></a> [post\_letters](#module\_post\_letters) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
6872
| <a name="module_post_mi"></a> [post\_mi](#module\_post\_mi) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
6973
| <a name="module_s3bucket_test_letters"></a> [s3bucket\_test\_letters](#module\_s3bucket\_test\_letters) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-s3bucket.zip | n/a |
7074
| <a name="module_sqs_alarms"></a> [sqs\_alarms](#module\_sqs\_alarms) | ../../modules/alarms-sqs | n/a |
71-
| <a name="module_sqs_letter_updates"></a> [sqs\_letter\_updates](#module\_sqs\_letter\_updates) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.5/terraform-sqs.zip | n/a |
72-
| <a name="module_sqs_supplier_allocator"></a> [sqs\_supplier\_allocator](#module\_sqs\_supplier\_allocator) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.5/terraform-sqs.zip | n/a |
75+
| <a name="module_sqs_letter_updates"></a> [sqs\_letter\_updates](#module\_sqs\_letter\_updates) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.6/terraform-sqs.zip | n/a |
76+
| <a name="module_sqs_supplier_allocator"></a> [sqs\_supplier\_allocator](#module\_sqs\_supplier\_allocator) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.6/terraform-sqs.zip | n/a |
7377
| <a name="module_supplier_allocator"></a> [supplier\_allocator](#module\_supplier\_allocator) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |
7478
| <a name="module_supplier_ssl"></a> [supplier\_ssl](#module\_supplier\_ssl) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.26/terraform-ssl.zip | n/a |
7579
| <a name="module_update_letter_queue"></a> [update\_letter\_queue](#module\_update\_letter\_queue) | https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/v2.0.29/terraform-lambda.zip | n/a |

infrastructure/terraform/components/api/module_domain_truststore.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
module "domain_truststore" {
2-
source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.4/terraform-s3bucket.zip"
2+
source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.6/terraform-s3bucket.zip"
33

44
name = "truststore"
55
aws_account_id = var.aws_account_id

infrastructure/terraform/components/api/module_sqs_amendments.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Queue to transport letter status amendment messages
22
module "amendments_queue" {
3-
source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.5/terraform-sqs.zip"
3+
source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.6/terraform-sqs.zip"
44

55
name = "amendments_queue"
66

infrastructure/terraform/components/api/module_sqs_letter_status_updates.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Queue to transport update letter status messages. Now replaced by module.amendments_queue.
22
# This queue will not be removed just yet, to allow it to be drained following the release in which module.amendments_queue replaces it.
33
module "letter_status_updates_queue" {
4-
source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.5/terraform-sqs.zip"
4+
source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.6/terraform-sqs.zip"
55

66
name = "letter_status_updates_queue"
77

infrastructure/terraform/components/api/module_sqs_letter_updates.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
module "sqs_letter_updates" {
2-
source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.5/terraform-sqs.zip"
2+
source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.6/terraform-sqs.zip"
33

44
aws_account_id = var.aws_account_id
55
component = var.component

infrastructure/terraform/components/api/module_sqs_supplier_allocator.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
module "sqs_supplier_allocator" {
2-
source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.5/terraform-sqs.zip"
2+
source = "https://github.com/NHSDigital/nhs-notify-shared-modules/releases/download/3.0.6/terraform-sqs.zip"
33

44
aws_account_id = var.aws_account_id
55
component = var.component

0 commit comments

Comments
 (0)