---
name: tests
on:
  push:
    branches:
      - main
      - '*.*.*'
  pull_request:
    branches:
      - main
      - '*.*.*'
jobs:
  tests:
    name: py${{ matrix.python }} unit tests
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        python:
          - '3.13'
          - '3.12'
          - '3.11'
          - '3.10'
    steps:
      - uses: actions/checkout@v4
      - name: Install uv
        uses: astral-sh/setup-uv@v3
        with:
          enable-cache: true
      - name: Install Python ${{ matrix.python }}
        run: uv python install ${{ matrix.python }}
      - name: Install apt dependencies
        run: |
          sudo apt update
          sudo DEBIAN_FRONTEND=noninteractive apt --yes --quiet install apparmor-utils libsasl2-dev python3-dev libldap2-dev libssl-dev slapd ldap-utils
      - name: App armor configuration for slapd
        if: ${{ !env.ACT }}
        run: sudo aa-complain /usr/sbin/slapd
      - name: Run tests
        run: |
          # python tzinfo fails on 'act' without this
          ulimit -n 1024
          export TZ=UTC
          uv sync --all-extras
          uv run pytest --showlocals

  minversions:
    name: minimum dependency versions
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install uv
        uses: astral-sh/setup-uv@v3
        with:
          enable-cache: true
      - name: Install Python 3.10
        run: uv python install 3.10
      - name: Install apt dependencies
        run: |
          sudo apt update
          sudo DEBIAN_FRONTEND=noninteractive apt --yes --quiet install apparmor-utils libsasl2-dev python3-dev libldap2-dev libssl-dev slapd ldap-utils
      - name: App armor configuration for slapd
        if: ${{ !env.ACT }}
        run: sudo aa-complain /usr/sbin/slapd
      - name: Run tests
        run: |
          # python tzinfo fails on 'act' without this
          ulimit -n 1024
          export TZ=UTC
          uv sync --all-extras --resolution=lowest-direct
          uv run pytest --showlocals

  style:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install uv
        uses: astral-sh/setup-uv@v3
        with:
          enable-cache: true
      - name: Run linters
        run: |
          sudo apt update
          sudo DEBIAN_FRONTEND=noninteractive apt --yes --quiet install apparmor-utils libsasl2-dev python3-dev libldap2-dev libssl-dev slapd ldap-utils
      - name: App armor configuration for slapd
        if: ${{ !env.ACT }}
        run: sudo aa-complain /usr/sbin/slapd
      - name: Run tests
        run: |
          # python tzinfo fails on 'act' without this
          ulimit -n 1024
          export TZ=UTC
          uv sync --all-extras
          uv run pre-commit run --all-files

  doc:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install uv
        uses: astral-sh/setup-uv@v3
        with:
          enable-cache: true
      - name: Install apt dependencies
        run: |
          sudo apt update
          sudo DEBIAN_FRONTEND=noninteractive apt --yes --quiet install libsasl2-dev python3-dev libldap2-dev libssl-dev slapd ldap-utils
      - run: |
          export TZ=UTC
          uv sync --group doc
          uv run sphinx-build doc build/sphinx/html --fail-on-warning
