name: Linting and testing

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

jobs:
  build:
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install system dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y libcairo2-dev

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          python -m pip install poetry
          python -m poetry install --with dev

      - name: Test with Coverage and Pytest (fail if coverage is low)
        run: |
          poetry run coverage run --source=./maigret -m pytest --reruns 3 --reruns-delay 5 tests
          poetry run coverage report --fail-under=60
          poetry run coverage html

      - name: Upload coverage report
        uses: actions/upload-artifact@v4
        with:
          name: htmlcov-${{ strategy.job-index }}
          path: htmlcov

  minimal-install:
    # Verify a fresh `pip install maigret` succeeds and the test suite
    # passes WITHOUT the optional [pdf] extra and WITHOUT system cairo.
    # Catches regressions where core code accidentally grows a hard
    # dependency on xhtml2pdf / pycairo / libcairo2.
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: "3.12"

      - name: Install Maigret without [pdf] extra (no libcairo on host)
        run: |
          python -m pip install --upgrade pip
          pip install .
          pip install pytest pytest-asyncio pytest-rerunfailures pytest-httpserver

      - name: Smoke-check the install
        run: |
          python -c "import maigret; from maigret.report import save_pdf_report; print('import OK')"
          maigret --version

      - name: Run tests without [pdf] extra
        run: pytest --reruns 3 --reruns-delay 5 tests