pact-foundation/pact-js

View on GitHub
.github/workflows/build-and-test.yml

Summary

Maintainability
Test Coverage
name: Build, test, test all examples

on:
  push:
  pull_request:
    branches: [master, 9.x.x]
  workflow_dispatch:

env:
  GIT_COMMIT: ${{ github.sha }}
  GIT_REF: ${{ github.ref }}
  GIT_BRANCH: ${{ github.head_ref || github.ref_name }}
  LOG_LEVEL: info

jobs:
  build-and-test:
    runs-on: ${{ matrix.os }}
    defaults:
      run:
        shell: bash
    strategy:
      fail-fast: false
      matrix:
        node-version: [16, 18, 20, 22]
        os: [macos-14, macos-12, ubuntu-latest, windows-latest]
        docker: [false]
        alpine: [false]
        include:
          - os: ubuntu-latest
            docker: true
            alpine: true
            arch: amd64
            node-version: 22
          - os: ubuntu-latest
            docker: true
            alpine: true
            arch: amd64
            node-version: 20
          - os: ubuntu-latest
            docker: true
            alpine: true
            arch: amd64
            node-version: 18
          # ARM64 Builds under Qemu
          - os: ubuntu-latest
            docker: true
            alpine: false
            arch: arm64
            node-version: 22
          - os: ubuntu-latest
            docker: true
            alpine: true
            arch: arm64
            node-version: 22
          - os: ubuntu-latest
            docker: true
            alpine: false
            arch: arm64
            node-version: 20
          - os: ubuntu-latest
            docker: true
            alpine: true
            arch: arm64
            node-version: 20
          - os: ubuntu-latest
            docker: true
            alpine: true
            arch: arm64
            node-version: 18
    name: Test ${{ matrix.docker == true && matrix.alpine == true && 'linux-musl' || matrix.docker == true && matrix.alpine == false && 'linux' || matrix.os }}-${{ matrix.arch }}-node-${{ matrix.node-version }}

    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}

      - run: scripts/ci/build-and-test.sh
        if: ${{ matrix.docker != true }}

      - name: Set up QEMU
        if: ${{ matrix.docker == true && matrix.arch == 'arm64' }}
        uses: docker/setup-qemu-action@v3

      - if: ${{ matrix.docker == true && matrix.alpine != true && matrix.arch == 'arm64' }}
        name: test linux ${{ matrix.arch }} glibc
        run: |
          npm run docker:debian:build
          npm run docker:debian:run
        env:
          DOCKER_DEFAULT_PLATFORM: linux/${{ matrix.arch }}
          NODE_VERSION: ${{ matrix.node-version }}
          GITHUB_ACTIONS: ${{ env.GITHUB_ACTIONS }}
          SKIP_EXAMPLES: true

      - if: ${{ matrix.docker == true && matrix.alpine == true && matrix.arch == 'amd64' }}
        name: test linux ${{ matrix.arch }} musl
        run: |
          npm run docker:alpine:build
          npm run docker:alpine:run
        env:
          DOCKER_DEFAULT_PLATFORM: linux/${{ matrix.arch }}
          NODE_VERSION: ${{ matrix.node-version }}
          GITHUB_ACTIONS: ${{ env.GITHUB_ACTIONS }}

      - if: ${{ matrix.docker == true && matrix.alpine == true && matrix.arch == 'arm64' }}
        name: test linux ${{ matrix.arch }} musl
        run: |
          npm run docker:alpine:build
          npm run docker:alpine:run
        env:
          DOCKER_DEFAULT_PLATFORM: linux/${{ matrix.arch }}
          NODE_VERSION: ${{ matrix.node-version }}
          GITHUB_ACTIONS: ${{ env.GITHUB_ACTIONS }}
          SKIP_EXAMPLES: true