#name: Main

on:
  pull_request:
    types: [opened, synchronize, reopened]
  push:
    branches: [main]

jobs:
  quality:
    runs-on: ubuntu-latest
    steps:
      - name: Check out
        uses: actions/checkout@v4

      - uses: actions/cache@v4
        with:
          path: ~/.cache/pre-commit
          key: pre-commit-${{hashFiles('.pre-commit-config.yaml')}}

      - name: Set up the environment
        uses: ./.github/actions/setup-python-env

      - name: Run pre-commit
        run: uv run pre-commit run -a --show-diff-on-failure

      - name: Inspect dependencies
        run: uv run deptry .

      - name: Check lock file consistency
        run: uv sync --locked

  tests-and-type-check:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
      fail-fast: false
    defaults:
      run:
        shell: bash
    steps:
      - name: Check out
        uses: actions/checkout@v4

      - name: Set up the environment
        uses: ./.github/actions/setup-python-env
        with:
          python-version: ${{matrix.python-version}}

      - name: Run tests
        run: uv run python -m pytest tests --cov --cov-config=pyproject.toml --cov-report=xml

      - name: Check typing
        run: uv run mypy

      - name: Upload coverage reports to Codecov with GitHub Action on Python 3.11 for Ubuntu
        uses: codecov/codecov-action@v3
        if: ${{matrix.python-version == '3.11'}}

  check-docs:
    runs-on: ubuntu-latest
    steps:
      - name: Check out
        uses: actions/checkout@v4

      - name: Set up the environment
        uses: ./.github/actions/setup-python-env

      - name: Check if documentation can be built
        run: uv run mkdocs build -s
# 
