name: Python package

on:
  - push
  - pull_request

jobs:
  pythontests:

    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        python-version: ["3.9", "3.10", "3.11", "3.12"]
      fail-fast: false

    steps:
    - uses: actions/checkout@v4
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -U pip coverage codecov flake8 pycalendar vobject requests six tzlocal attrs multidict pytest
    - name: Install dependencies (linux)
      run: |
        sudo apt -y update
        sudo apt -y install libsystemd-dev
        python -m pip install -e ".[systemd,prometheus]"
      if: "matrix.os == 'ubuntu-latest'"
    - name: Install dependencies (non-linux)
      run: |
        python -m pip install -e ".[prometheus]"
      if: "matrix.os != 'ubuntu-latest'"
    - name: Style checks
      run: |
        python -m flake8
    - name: Typing checks
      run: |
        pip install -U mypy types-python-dateutil
        python -m mypy xandikos
    - name: Test suite run
      run: |
        python -m unittest xandikos.tests.test_suite
      env:
        PYTHONHASHSEED: random
