name: Test

on:

  push:
    branches:
      - master

  pull_request:
    branches:
      - master

  schedule:
    - cron: "00 16 07 * *"  # = monthly

  # Allow manually running (from GitHub Web)
  workflow_dispatch:

  # Allow calling this workflow (e.g. from release workflow)
  workflow_call:

jobs:
  test:

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

    runs-on: "ubuntu-latest"

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

      - name: Checkout
        uses: actions/checkout@v4

      - name: Install possible lxml build requirements (if building from source)
        run: sudo apt-get install -y libxml2-dev libxslt-dev python3-dev
      - name: Install possible shapely build requirements (if building from source)
        run: sudo apt-get install -y libgeos-dev

      - name: Update pip
        run: python3 -m pip install -U pip
      - name: Install requirements*.txt
        run: |
          for requirements_txt in requirements*.txt; do
            python3 -m pip install -r $requirements_txt;
          done

      - name: Test
        run: |
            cd src
            python3 -m pytest --junitxml=../${{matrix.python-version}}-junit.xml -o junit_family=legacy
      - name: Upload test results
        uses: actions/upload-artifact@v4
        if: success() || failure()
        with:
          name: test-results-${{matrix.python-version}}
          path: ${{matrix.python-version}}-junit.xml