name: CI

on:
  push:
    branches:
    - master
  pull_request:

jobs:
  tests:
    name: Python ${{ matrix.python-version }}
    runs-on: ubuntu-20.04

    strategy:
      matrix:
        python-version:
        - '3.9'
        - '3.10'
        - '3.11'
        - '3.12'
        - '3.13'

    steps:
    - uses: actions/checkout@v4

    - uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}
        cache: 'pip'
        cache-dependency-path: 'requirements/*.txt'

    - name: Upgrade packaging tools
      run: python -m pip install --upgrade pip setuptools virtualenv wheel

    - name: Install dependencies
      run: python -m pip install --upgrade tox

    - name: Run tox targets for ${{ matrix.python-version }}
      run: tox run -f py$(echo ${{ matrix.python-version }} | tr -d . | cut -f 1 -d '-')

    - name: Run extra tox targets
      if: ${{ matrix.python-version == '3.9' }}
      run: |
        tox -e base,dist,docs

    - name: Upload coverage
      uses: codecov/codecov-action@v5
      with:
        env_vars: TOXENV,DJANGO

  test-docs:
    name: Test documentation links
    runs-on: ubuntu-22.04
    steps:
    - uses: actions/checkout@v4

    - uses: actions/setup-python@v5
      with:
        python-version: '3.9'

    - name: Install dependencies
      run: pip install -r requirements/requirements-documentation.txt
    
    # Start mkdocs server and wait for it to be ready
    - run: mkdocs serve &
    - run: WAIT_TIME=0 && until nc -vzw 2 localhost 8000 || [ $WAIT_TIME -eq 5 ]; do sleep $(( WAIT_TIME++ )); done
    - run: if [ $WAIT_TIME == 5 ]; then echo cannot start mkdocs server on http://localhost:8000; exit 1; fi
    
    - name: Check links
      continue-on-error: true
      run: pylinkvalidate.py -P http://localhost:8000/
  
    - run: echo "Done"
