Skip to content

Commit d779e0b

Browse files
committed
CCM-10483: add to CI
1 parent dc2cc5e commit d779e0b

File tree

6 files changed

+121
-18
lines changed

6 files changed

+121
-18
lines changed

.github/workflows/stage-2-test.yaml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,3 +153,60 @@ jobs:
153153
sonar_organisation_key: "${{ vars.SONAR_ORGANISATION_KEY }}"
154154
sonar_project_key: "${{ vars.SONAR_PROJECT_KEY }}"
155155
sonar_token: "${{ secrets.SONAR_TOKEN }}"
156+
157+
158+
consumer-contracts:
159+
name: Consumer Contract Tests
160+
runs-on: ubuntu-latest
161+
steps:
162+
- name: Checkout repository
163+
uses: actions/checkout@v4
164+
165+
- name: Install dependencies
166+
run: npm ci
167+
168+
- name: Configure AWS credentials
169+
uses: aws-actions/configure-aws-credentials@v4
170+
with:
171+
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ASSUME_ROLE_NAME }}
172+
role-session-name: templates-ci-contract-tests
173+
aws-region: ${{ env.AWS_REGION }}
174+
175+
- name: Run consumer contract tests
176+
run: npm run test:contracts:consumers
177+
178+
- name: Upload consumer Pact files
179+
run: |
180+
export PACT_BUCKET="nhs-notify-${{ secrets.AWS_ACCOUNT_ID }}-${{ env.AWS_REGION }}-main-acct-artefacts"
181+
npm run test:contracts:upload:consumer
182+
183+
- name: Upload Pact contracts as artifacts
184+
uses: actions/upload-artifact@v4
185+
with:
186+
name: consumer-pacts
187+
path: tests/contracts/tests/*/consumer/pacts/*.json
188+
if-no-files-found: warn
189+
190+
191+
provider-contracts:
192+
name: Provider Contract Tests
193+
runs-on: ubuntu-latest
194+
steps:
195+
- name: Checkout repository
196+
uses: actions/checkout@v4
197+
198+
- name: Install dependencies
199+
run: npm ci
200+
201+
- name: Configure AWS credentials
202+
uses: aws-actions/configure-aws-credentials@v4
203+
with:
204+
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_ASSUME_ROLE_NAME }}
205+
role-session-name: templates-ci-contract-tests
206+
aws-region: ${{ env.AWS_REGION }}
207+
208+
- name: Download consumer generated Pact files and run provider contract tests
209+
env:
210+
run: |
211+
export PACT_BUCKET="nhs-notify-${{ secrets.AWS_ACCOUNT_ID }}-${{ env.AWS_REGION }}-main-acct-artefacts"
212+
npm run test:contracts:provider:ci

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,10 @@
4343
"start": "npm run start --workspace frontend",
4444
"test:contracts:clean": "npm --workspace=tests/contracts run pact:clean",
4545
"test:contracts:consumers": "npm --workspace=tests/contracts run test:consumers",
46-
"test:contracts:download": "npm --workspace=tests/contracts run pact:download",
46+
"test:contracts:download:consumer": "npm --workspace=tests/contracts run pact:download:consumer",
4747
"test:contracts:provider": "npm --workspace=tests/contracts run test:provider",
48-
"test:contracts:upload": "npm --workspace=tests/contracts run pact:upload",
48+
"test:contracts:provider:ci": "npm --workspace=tests/contracts run test:provider:ci",
49+
"test:contracts:upload:consumer": "npm --workspace=tests/contracts run pact:upload:consumer",
4950
"test:unit": "npm run test:unit --workspaces",
5051
"typecheck": "npm run typecheck --workspaces"
5152
},

tests/contracts/package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@
1111
"private": true,
1212
"scripts": {
1313
"pact:clean": "./scripts/clean.sh",
14-
"pact:download:consumer": "./scripts/download-pacts.sh",
15-
"pact:upload:consumer": "./scripts/upload-pacts.sh",
14+
"pact:download:consumer": "./scripts/download-consumer-pacts.sh",
15+
"pact:upload:consumer": "./scripts/upload-consumer-pacts.sh",
1616
"test:consumers": "jest consumer.pact.test.ts",
17-
"test:provider": "jest provider.pact.test.ts"
17+
"test:provider": "jest provider.pact.test.ts",
18+
"test:provider:ci": "./scripts/ci-verify-provider.sh"
1819
},
1920
"version": "1.0.0"
2021
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
4+
script_path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )";
5+
6+
source "${script_path}/lib/download-consumer-pacts.sh"
7+
8+
contract_tests_root_dir=$(realpath "${script_path}/..")
9+
10+
SUMMARY_FILE="${GITHUB_STEP_SUMMARY:-"$HOME/Desktop/summary.md"}"
11+
# SUMMARY_FILE="${GITHUB_STEP_SUMMARY:-/dev/null}"
12+
13+
provider="templates"
14+
15+
echo "Downloading Pact files for provider: ${provider}"
16+
17+
count=$(download_consumer_pacts $provider)
18+
19+
echo "Downloaded ${count} Pact files for provider: ${provider}"
20+
21+
if [[ "$count" -gt 0 ]]; then
22+
echo "Pact contracts found — running provider contract tests..."
23+
24+
echo "### 🟢 Pact contracts found for provider \`$provider\`" >> "$SUMMARY_FILE"
25+
26+
if npm run test:contracts:provider; then
27+
echo "### 🟢 Provider contract tests: **PASSED**" >> "$SUMMARY_FILE"
28+
else
29+
echo "### 🔴 Provider contract tests: **FAILED**" >> "$SUMMARY_FILE"
30+
exit 1
31+
fi
32+
else
33+
echo "### 🟡 No contracts found for \`$provider\` — skipping provider contract tests" >> "$SUMMARY_FILE"
34+
echo "### 🟡 Provider contract tests: **SKIPPED**" >> "$SUMMARY_FILE"
35+
fi
Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,15 @@
11
#!/bin/bash
22
set -euo pipefail
33

4-
# Downloads all consumer-generated Pact contract files for a provider, for use in producer-side tests
5-
64
script_path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )";
75

8-
provider="templates"
9-
10-
provider_dir=$(realpath "${script_path}/../tests/${provider}")
6+
source "${script_path}/lib/download-consumer-pacts.sh"
117

12-
target_dir="${provider_dir}/provider/pacts"
13-
14-
echo "Downloading Pact files for provider: $provider"
8+
# Downloads all consumer-generated Pact contract files for a provider, for use in producer-side tests
9+
provider="templates"
1510

16-
mkdir -p "$target_dir"
11+
echo "Downloading Pact files for provider: ${provider}"
1712

18-
aws s3 sync "s3://$PACT_BUCKET/pacts/$provider/" "$target_dir/" \
19-
--exclude "*" \
20-
--include "*.json"
13+
count=$(download_consumer_pacts $provider)
2114

22-
echo "Pact files downloaded to $target_dir"
15+
echo "Downloaded ${count} Pact files for provider: ${provider}"
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
function download_consumer_pacts {
2+
local provider=$1
3+
4+
script_path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )";
5+
contract_tests_root_dir=$(realpath "${script_path}/../..")
6+
target_dir="${contract_tests_root_dir}/tests/${provider}/provider/pacts"
7+
8+
rm -rf $target_dir
9+
mkdir -p "$target_dir"
10+
11+
aws s3 sync "s3://$PACT_BUCKET/pacts/$provider/" "$target_dir/" \
12+
--exclude "*" \
13+
--include "*.json" 1>/dev/null
14+
15+
find "$target_dir" -maxdepth 1 -name '*.json' -type f | wc -l | xargs
16+
}

0 commit comments

Comments
 (0)