chore: rewrite test workflow #1
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
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 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 format | |
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 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 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 dist | |
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 }} | |
strategy: | |
fail-fast: false | |
matrix: | |
node-version: [18, 20, 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 }} |