name: Tests

on:
  pull_request:
  push:
  workflow_dispatch:

jobs:
  vitest:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        shard: [1, 2, 3, 4]
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

      - uses: pnpm/action-setup@903f9c1a6ebcba6cf41d87230be49611ac97822e # v6.0.3
        with:
          version: 9

      - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
        with:
          node-version: 20
          cache: pnpm

      - run: pnpm install --frozen-lockfile
      # Run Vitest directly so `--shard` is parsed as an option
      - run: pnpm -s exec vitest run --coverage --shard ${{ matrix.shard }}/4 --pool forks
      - name: Upload coverage reports to Codecov
        uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          files: ./coverage/lcov.info
          flags: vitest,shard-${{ matrix.shard }}
          name: vitest-shard-${{ matrix.shard }}
          fail_ci_if_error: true
