name: Run unit tests

on:
  workflow_dispatch:
  push:
    branches: [main]
  pull_request:

jobs:
  versions:
    runs-on: ubuntu-latest

    outputs:
      py-versions: ${{ steps.supported-versions.outputs.py-versions }}

    steps:
    - uses: actions/checkout@v4

    - uses: './.github/actions/setup-project'

    - id: supported-versions
      name: Get supported versions
      run: |
        set -e
        echo "py-versions=$(uv run ./scripts/supported_py_versions.py)" >> "$GITHUB_OUTPUT"

  test:
    runs-on: ubuntu-latest

    needs: versions
    strategy:
      matrix:
        py-version: ${{ fromJson(needs.versions.outputs.py-versions) }}

    steps:
      - uses: actions/checkout@v4

      - uses: './.github/actions/setup-project'
        with:
          python-version: ${{ matrix.py-version }}

      - name: Run unit tests
        run: uv run --group test --python ${{ matrix.py-version }} pytest

  results:
    runs-on: ubuntu-latest
    needs: test
    steps:
      - run: |
          result="${{ needs.test.result }}"
          if [[ $result == "success" || $result == "skipped" ]]; then
            exit 0
          else
            exit 1
          fi
