name: build

on: [push, pull_request]

jobs:
  test:
    name: Build, lint, and test on Node.js ${{ matrix.node }}

    runs-on: ubuntu-latest
    strategy:
      matrix:
        node: [18, 20]

    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js ${{ matrix.node }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node }}
          cache: npm

      - name: Install dependencies
        run: npm ci

      # Running this after `npm ci` because `npm ci` removes `node_modules`:
      - name: Download Turborepo cache
        uses: actions/cache@v3
        with:
          path: node_modules/.cache/turbo
          key: ${{ runner.os }}-node-${{ matrix.node }}-turbo-${{ hashFiles('node_modules/.cache/turbo') }}
          restore-keys: |
            ${{ runner.os }}-node-${{ matrix.node }}-turbo-

      - name: Check types
        run: npm run tsc

      - name: Build packages
        run: npm run build

      - name: Run tests
        run: npm run test -- --ci --coverage --maxWorkers=2 --reporters=default --reporters=github-actions
