Skip to content

Commit 9a5abf9

Browse files
committed
Merge branch 'main' into feature/CCM-11029_run-pact-tests
2 parents 184ee2d + fd97d66 commit 9a5abf9

File tree

6 files changed

+211
-105
lines changed

6 files changed

+211
-105
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
name: 'Node modules cache + setup'
2+
description: 'Setup Node, restore node_modules cache, and optionally run npm ci on cache miss'
3+
4+
inputs:
5+
node_version:
6+
description: 'Node.js version'
7+
required: true
8+
cache_lock_path:
9+
description: 'Path(s) to package-lock.json for cache key'
10+
required: false
11+
default: '**/package-lock.json'
12+
skip_restore:
13+
description: 'Skips restoring node_modules'
14+
required: false
15+
default: false
16+
17+
runs:
18+
using: 'composite'
19+
steps:
20+
- name: 'Use Node.js'
21+
uses: actions/setup-node@v5
22+
with:
23+
cache: 'npm'
24+
cache-dependency-path: '${{ inputs.cache_lock_path }}'
25+
node-version: '${{ inputs.node_version }}'
26+
package-manager-cache: true
27+
28+
- name: 'Restore node_modules from cache'
29+
id: node-modules-cache
30+
uses: actions/cache@v4
31+
with:
32+
path: |
33+
node_modules
34+
**/node_modules
35+
key: ${{ runner.os }}-node-${{ inputs.node_version }}-${{ hashFiles(inputs.cache_lock_path) }}
36+
restore-keys: |
37+
${{ runner.os }}-node-${{ inputs.node_version }}-
38+
lookup-only: ${{ inputs.skip_restore }}
39+
40+
- name: 'Install dependencies (cache miss)'
41+
if: steps.node-modules-cache.outputs.cache-hit != 'true'
42+
shell: bash
43+
run: make dependencies
44+
env:
45+
GITHUB_TOKEN: ${{ github.token }}

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

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ concurrency:
1111
group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }}
1212
cancel-in-progress: false
1313

14+
permissions:
15+
contents: read # This is required for actions/checkout
16+
packages: read # This is required to install packages from GitHub package registry
1417

1518
jobs:
1619
metadata:
@@ -77,9 +80,23 @@ jobs:
7780
export DOES_PULL_REQUEST_EXIST="${{ steps.pr_exists.outputs.does_pull_request_exist }}"
7881
export IS_VERSION_PRERELEASE="${{ steps.variables.outputs.is_version_prerelease }}"
7982
make list-variables
83+
84+
dependencies:
85+
name: Install / cache dependencies
86+
needs: [metadata]
87+
runs-on: ubuntu-latest
88+
steps:
89+
- name: "Checkout code"
90+
uses: actions/[email protected]
91+
- name: "Install / cache node_modules"
92+
uses: ./.github/actions/node-modules-cache
93+
with:
94+
node_version: "${{ inputs.nodejs_version }}"
95+
skip_restore: true
96+
8097
commit-stage: # Recommended maximum execution time is 2 minutes
8198
name: "Commit stage"
82-
needs: [metadata]
99+
needs: [metadata, dependencies]
83100
uses: ./.github/workflows/stage-1-commit.yaml
84101
with:
85102
build_datetime: "${{ needs.metadata.outputs.build_datetime }}"
@@ -92,7 +109,7 @@ jobs:
92109
secrets: inherit
93110
test-stage: # Recommended maximum execution time is 5 minutes
94111
name: "Test stage"
95-
needs: [metadata, commit-stage]
112+
needs: [metadata, dependencies, commit-stage]
96113
uses: ./.github/workflows/stage-2-test.yaml
97114
with:
98115
build_datetime: "${{ needs.metadata.outputs.build_datetime }}"
@@ -105,7 +122,7 @@ jobs:
105122
secrets: inherit
106123
acceptance-stage: # Recommended maximum execution time is 10 minutes
107124
name: "Acceptance stage"
108-
needs: [metadata, test-stage]
125+
needs: [metadata, dependencies, test-stage]
109126
uses: ./.github/workflows/stage-4-acceptance.yaml
110127
if: needs.metadata.outputs.does_pull_request_exist == 'true' || (github.event_name == 'pull_request' && (github.event.action == 'opened' || github.event.action == 'reopened')) || (github.event_name == 'push' && github.ref == 'refs/heads/main')
111128
secrets: inherit

.github/workflows/stage-1-commit.yaml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -249,10 +249,10 @@ jobs:
249249
- name: "Checkout code"
250250
uses: actions/checkout@v4
251251

252-
- name: Install dependencies
253-
run: make dependencies
254-
env:
255-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
252+
- name: "Restore node_modules from cache"
253+
uses: ./.github/actions/node-modules-cache
254+
with:
255+
node_version: "${{ inputs.nodejs_version }}"
256256

257257
- name: Re-generate schemas
258258
run: npm --workspace packages/event-schemas run generate-json-schemas
@@ -296,9 +296,9 @@ jobs:
296296
steps:
297297
- name: "Checkout code"
298298
uses: actions/[email protected]
299-
- name: "Install dependencies"
300-
run: make dependencies
301-
env:
302-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
299+
- name: "Restore node_modules from cache"
300+
uses: ./.github/actions/node-modules-cache
301+
with:
302+
node_version: "${{ inputs.nodejs_version }}"
303303
- name: "Run provider contract tests"
304304
run: make test-contract-producer

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

Lines changed: 79 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -39,105 +39,149 @@ env:
3939
permissions:
4040
id-token: write # This is required for requesting the JWT
4141
contents: read # This is required for actions/checkout
42-
packages: read # This is required to install packages from GitHub package registry
4342

4443
jobs:
44+
discover-workspaces:
45+
runs-on: ubuntu-latest
46+
outputs:
47+
matrix: ${{ steps.get-workspaces.outputs.matrix }}
48+
steps:
49+
- name: "Checkout code"
50+
uses: actions/[email protected]
51+
- name: "Get workspaces"
52+
id: "get-workspaces"
53+
run: |
54+
echo "matrix=$(jq -c '.workspaces' package.json)" >> "$GITHUB_OUTPUT"
55+
4556
check-generated-dependencies:
4657
name: "Check generated dependencies"
4758
runs-on: ubuntu-latest
4859
timeout-minutes: 5
4960
steps:
5061
- name: "Checkout code"
5162
uses: actions/[email protected]
52-
- name: "Repo setup"
53-
run: make dependencies
54-
env:
55-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
63+
- name: "Restore node_modules from cache"
64+
uses: ./.github/actions/node-modules-cache
65+
with:
66+
node_version: "${{ inputs.nodejs_version }}"
5667
- name: "Generate dependencies"
5768
run: |
5869
npm run generate-dependencies --workspaces --if-present
5970
git diff --exit-code
71+
6072
test-unit:
6173
name: "Unit tests"
6274
runs-on: ubuntu-latest
6375
timeout-minutes: 5
76+
needs: [discover-workspaces]
77+
strategy:
78+
fail-fast: false
79+
matrix:
80+
workspace: ${{ fromJSON(needs.discover-workspaces.outputs.matrix) }}
6481
steps:
6582
- name: "Checkout code"
6683
uses: actions/[email protected]
67-
- name: "Repo setup"
68-
run: make dependencies
69-
env:
70-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
84+
- name: "Restore node_modules from cache"
85+
uses: ./.github/actions/node-modules-cache
86+
with:
87+
node_version: "${{ inputs.nodejs_version }}"
7188
- name: "Generate dependencies"
7289
run: |
7390
npm run generate-dependencies --workspaces --if-present
7491
- name: "Run unit test suite"
7592
run: |
76-
make test-unit
77-
- name: "Save the result of fast test suite"
93+
WORKSPACE=${{ matrix.workspace }} make test-unit
94+
- name: Compute safe artifact names
95+
id: names
96+
shell: bash
97+
run: |
98+
echo "safe=$(echo '${{ matrix.workspace }}' | tr '/' '-_')" >> "$GITHUB_OUTPUT"
99+
- name: "Save the result of test suite"
78100
uses: actions/upload-artifact@v4
79101
with:
80-
name: unit-tests
81-
path: "**/.reports/unit"
102+
name: unit-tests-${{ steps.names.outputs.safe }}
103+
path: "${{ matrix.workspace }}/.reports/unit"
82104
include-hidden-files: true
105+
if-no-files-found: ignore
83106
if: always()
84107
- name: "Save the result of code coverage"
85108
uses: actions/upload-artifact@v4
86109
with:
87-
name: code-coverage-report
88-
path: ".reports/lcov.info"
110+
name: code-coverage-${{ steps.names.outputs.safe }}
111+
path: "${{ matrix.workspace }}/.reports/unit/coverage/lcov.info"
112+
if-no-files-found: ignore
89113
if: always()
114+
90115
test-lint:
91116
name: "Linting"
92117
runs-on: ubuntu-latest
93118
timeout-minutes: 5
94119
steps:
95120
- name: "Checkout code"
96121
uses: actions/[email protected]
97-
- name: "Repo setup"
98-
run: make dependencies
99-
env:
100-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
122+
- name: "Restore node_modules from cache"
123+
uses: ./.github/actions/node-modules-cache
124+
with:
125+
node_version: "${{ inputs.nodejs_version }}"
101126
- name: "Generate dependencies"
102127
run: |
103128
npm run generate-dependencies --workspaces --if-present
104129
- name: "Run linting"
105130
run: |
106131
make test-lint
132+
107133
test-typecheck:
108134
name: "Typecheck"
109135
runs-on: ubuntu-latest
110136
timeout-minutes: 5
111137
steps:
112138
- name: "Checkout code"
113139
uses: actions/[email protected]
114-
- name: "Repo setup"
115-
run: make dependencies
116-
env:
117-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
140+
- name: "Restore node_modules from cache"
141+
uses: ./.github/actions/node-modules-cache
142+
with:
143+
node_version: "${{ inputs.nodejs_version }}"
118144
- name: "Generate dependencies"
119145
run: |
120146
npm run generate-dependencies --workspaces --if-present
121147
- name: "Run typecheck"
122148
run: |
123149
make test-typecheck
124-
test-coverage:
125-
name: "Test coverage"
126-
needs: [test-unit]
150+
151+
merge-coverage:
152+
name: "Merge coverage"
127153
runs-on: ubuntu-latest
128-
timeout-minutes: 5
154+
needs: [test-unit]
129155
steps:
130-
- name: "Checkout code"
131-
uses: actions/[email protected]
132-
- name: "Run test coverage check"
133-
run: |
134-
make test-coverage
135-
- name: "Save the coverage check result"
156+
- uses: actions/checkout@v5
157+
158+
- name: Download coverage artifacts
159+
uses: actions/download-artifact@v4
160+
with:
161+
pattern: code-coverage-*
162+
merge-multiple: false
163+
path: ./_cov_parts
164+
165+
- name: Merge LCOV files
136166
run: |
137-
echo "Nothing to save"
167+
set -euo pipefail
168+
mkdir -p .reports
169+
npx --yes lcov-result-merger \
170+
"./_cov_parts/**/lcov.info" \
171+
".reports/lcov.info" \
172+
--ignore "node_modules" \
173+
--prepend-source-files \
174+
--prepend-path-fix "../../"
175+
176+
- name: Upload merged LCOV
177+
uses: actions/upload-artifact@v4
178+
with:
179+
name: code-coverage-report
180+
path: .reports/lcov.info
181+
138182
perform-static-analysis:
139183
name: "Perform static analysis"
140-
needs: [test-unit]
184+
needs: [test-unit, merge-coverage]
141185
runs-on: ubuntu-latest
142186
permissions:
143187
id-token: write

0 commit comments

Comments
 (0)