name: Run tests

on:
  pull_request:
  push:

jobs:
  check-lockfile:
    name: check lockfile correctness
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
      - name: Check that lockfile does not need an update
        run: pnpm install --frozen-lockfile

  test-web:
    name: web sanity check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 'lts/*'
      - uses: pnpm/action-setup@v4
      - run: .github/test.sh web

  test-api:
    name: api sanity check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
      - run: .github/test.sh api

  check-services:
    name: test service functionality
    runs-on: ubuntu-latest
    outputs:
      services: ${{ steps.checkServices.outputs.service_list }}
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
      - id: checkServices
        run: pnpm i --frozen-lockfile && echo "service_list=$(node api/src/util/test-ci get-services)" >> "$GITHUB_OUTPUT"

  test-services:
    needs: check-services
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        service: ${{ fromJson(needs.check-services.outputs.services) }}
    name: "test service: ${{ matrix.service }}"
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
      - run: pnpm i --frozen-lockfile && node api/src/util/test-ci run-tests-for ${{ matrix.service }}