-
-
Notifications
You must be signed in to change notification settings - Fork 349
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
The motivation for this is improve the speed at which the CI tasks complete in the Pact-JS repository. This hopefully achieves this by having more parallel builds which are each smaller and cached. I have also reduced the reliance on the scripts as it appeared to me that they duplicate a number of steps. These duplications are justified when running locally to ensure all previous steps are run, but in CI it likely results in longer runs thhan necessary. Signed-off-by: JP-Ellis <[email protected]>
- Loading branch information
Showing
2 changed files
with
269 additions
and
123 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,269 @@ | ||
name: Test | ||
|
||
on: | ||
push: | ||
branches: | ||
- master | ||
pull_request: | ||
branches: | ||
- master | ||
workflow_dispatch: | ||
|
||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.ref || github.run_id }} | ||
cancel-in-progress: true | ||
|
||
env: | ||
GIT_COMMIT: ${{ github.sha }} | ||
GIT_REF: ${{ github.ref }} | ||
GIT_BRANCH: ${{ github.head_ref || github.ref_name }} | ||
LOG_LEVEL: info | ||
PACT_BROKER_BASE_URL: ${{ secrets.PACT_BROKER_BASE_URL }} | ||
PACT_BROKER_TOKEN: ${{ secrets.PACT_BROKER_TOKEN }} | ||
|
||
jobs: | ||
complete: | ||
name: Test completion check | ||
if: always() | ||
|
||
permissions: | ||
contents: none | ||
|
||
runs-on: ubuntu-latest | ||
needs: | ||
- test-x86 | ||
- test-alpine | ||
- test-arm64 | ||
- lint | ||
- format | ||
- examples | ||
|
||
steps: | ||
- name: Failed | ||
run: exit 1 | ||
if: > | ||
contains(needs.*.result, 'failure') | ||
|| contains(needs.*.result, 'cancelled') | ||
|| contains(needs.*.result, 'skipped') | ||
lint: | ||
name: Lint | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | ||
|
||
- name: Setup Node.JS | ||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4 | ||
with: | ||
cache: npm | ||
|
||
- name: Install dependencies | ||
run: npm ci | ||
|
||
- name: Lint | ||
run: npm run lint | ||
|
||
format: | ||
name: Format | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | ||
|
||
- name: Setup Node.JS | ||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4 | ||
with: | ||
cache: npm | ||
|
||
- name: Install dependencies | ||
run: npm ci | ||
|
||
- name: Format | ||
run: npm run format:check | ||
|
||
test-x86: | ||
name: >- | ||
Test x86_64 | ||
on ${{ startsWith(matrix.os, 'macos-') && 'macOS' || startsWith(matrix.os, 'windows-') && 'Windows' || 'Linux' }} | ||
with Node ${{ matrix.node-version }} | ||
runs-on: ${{ matrix.os }} | ||
|
||
strategy: | ||
fail-fast: false | ||
matrix: | ||
node-version: [18, 20, 22] | ||
os: | ||
- macos-13 | ||
- macos-latest | ||
- ubuntu-latest | ||
- windows-latest | ||
|
||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | ||
|
||
- name: Setup Node.js ${{ matrix.node-version }} | ||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4 | ||
with: | ||
node-version: ${{ matrix.node-version }} | ||
cache: npm | ||
|
||
- name: Install dependencies | ||
run: | | ||
npm ci | ||
npm run dist | ||
- name: Run tests | ||
run: npm test | ||
|
||
- name: Coverage | ||
if: startsWith(matrix.os, 'ubuntu-') | ||
run: npm run coverage | ||
|
||
- name: Codecov | ||
if: startsWith(matrix.os, 'ubuntu-') | ||
uses: codecov/codecov-action@v5 | ||
|
||
# On Ubuntu, we also package the `dist` folder to be re-used by the | ||
# examples | ||
- name: Re-use dict folder | ||
if: startsWith(matrix.os, 'ubuntu-') | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: dist | ||
path: dist/ | ||
|
||
|
||
test-alpine: | ||
name: >- | ||
Test Alpine | ||
on ${{ startsWith(matrix.os, 'macos-') && 'macOS' || startsWith(matrix.os, 'windows-') && 'Windows' || 'Linux' }} | ||
with Node ${{ matrix.node-version }} | ||
runs-on: ubuntu-latest | ||
container: | ||
image: node:${{ matrix.node-version }}-alpine | ||
|
||
strategy: | ||
fail-fast: false | ||
matrix: | ||
os: [ubuntu-latest] | ||
node-version: [18, 20, 22] | ||
|
||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | ||
|
||
- name: Install dependencies | ||
run: | | ||
npm ci | ||
npm run dist | ||
- name: Run tests | ||
run: npm test | ||
|
||
test-arm64: | ||
name: >- | ||
Test ARM64 | ||
on ${{ startsWith(matrix.os, 'macos-') && 'macOS' || startsWith(matrix.os, 'windows-') && 'Windows' || 'Linux' }} | ||
with Node ${{ matrix.node-version }} | ||
runs-on: ${{ matrix.os }} | ||
|
||
strategy: | ||
fail-fast: false | ||
matrix: | ||
node-version: [18, 20, 22] | ||
os: | ||
- ubuntu-latest | ||
- macos-latest | ||
|
||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | ||
|
||
- name: Set up QEMU | ||
if: startsWith(matrix.os, 'ubuntu-') | ||
uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v3 | ||
|
||
- name: Setup Node.js ${{ matrix.node-version }} | ||
if: startsWith(matrix.os, 'macos-') | ||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4 | ||
with: | ||
node-version: ${{ matrix.node-version }} | ||
cache: npm | ||
|
||
- name: Install dependencies | ||
if: startsWith(matrix.os, 'macos-') | ||
run: | | ||
npm ci | ||
npm run dist | ||
- name: Test | ||
if: startsWith(matrix.os, 'macos-') | ||
run: | | ||
npm test | ||
- name: Install dependencies and test | ||
if: startsWith(matrix.os, 'ubuntu-') | ||
run: | | ||
docker run \ | ||
--rm \ | ||
-v $(pwd):/${{ github.workspace }} \ | ||
-w /${{ github.workspace }} \ | ||
--platform linux/arm64 \ | ||
node:${{ matrix.node-version }}-alpine \ | ||
sh -c "npm ci && npm run dist && npm test" | ||
examples: | ||
name: >- | ||
Test Examples | ||
on ${{ startsWith(matrix.os, 'macos-') && 'macOS' || startsWith(matrix.os, 'windows-') && 'Windows' || 'Linux' }} | ||
with Node ${{ matrix.node-version }} | ||
runs-on: ${{ matrix.os }} | ||
needs: | ||
- test-x86 | ||
|
||
strategy: | ||
fail-fast: false | ||
matrix: | ||
node-version: [22] | ||
os: [ubuntu-latest] | ||
d: | ||
- e2e | ||
- graphql | ||
- jest | ||
- messages | ||
- mocha | ||
- serverless | ||
- typescript | ||
- v3 | ||
- v4 | ||
|
||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | ||
|
||
- name: Setup Node.js ${{ matrix.node-version }} | ||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4 | ||
with: | ||
node-version: ${{ matrix.node-version }} | ||
cache: npm | ||
|
||
- name: Download dist folder | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: dist | ||
|
||
- name: Run tests | ||
working-directory: examples/${{ matrix.d }} | ||
run: | | ||
jq '.dependencies["@pact-foundation/pact"] = "file:../../dist"' package.json > package.json.tmp | ||
mv package.json.tmp package.json | ||
npm install | ||
npm run test:${{ matrix.d }} |