Skip to content

chore: rewrite test workflow #3

chore: rewrite test workflow

chore: rewrite test workflow #3

Workflow file for this run

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 }}