---
name: Python package

"on": [push, pull_request]

env:
  PYO3_USE_ABI3_FORWARD_COMPATIBILITY: "1"

jobs:
  build:

    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest]
        python-version: ["3.10", "3.11", '3.12', '3.13', '3.14']
# See https://github.com/actions/toolkit/issues/399
#        include:
#          - os: ubuntu-latest
#            python-version: pypy3
#            experimental: true
      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 (apt)
        run: |
          sudo apt install quilt
        if: "matrix.os == 'ubuntu-latest'"
      - name: Install dependencies (brew)
        run: |
          brew install quilt
        if: "matrix.os == 'macos-latest'"
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          python -m pip install -U pip "setuptools>=60" setuptools-gettext cython setuptools-rust
          python -m pip install -U pip coverage codecov cython testscenarios dulwich typing-extensions
          # paramiko (via pynacl) is broken on python 3.14
          if [[ "${{ matrix.python-version }}" == "3.14"* ]]; then
            python -m pip install ".[dev,doc,launchpad,git,fastimport]";
          else
            python -m pip install ".[dev,paramiko,doc,launchpad,git,fastimport]";
          fi
      - name: Install dependencies (linux/pip)
        run: |
          sudo apt install libgpgme-dev libgpg-error-dev
          mkdir -p "$HOME/.local/bin"
          cp .github/gpgme-config "$HOME/.local/bin/gpgme-config"
          cp .github/gpg-error-config "$HOME/.local/bin/gpg-error-config"
          echo "$HOME/.local/bin" >> $GITHUB_PATH
          pip install pyinotify
          pip install ".[workspace,pgp]"
        if: "matrix.os == 'ubuntu-latest'"
      - name: Build docs
        run: |
          make docs PYTHON=python
      - name: Build extensions
        run: |
          make extensions PYTHON=python
        if: "matrix.python-version != 'pypy3'"
      - name: Test suite run (Linux)
        run: |
          ./brz selftest
        env:
          PYTHONHASHSEED: random
          BRZ_PLUGIN_PATH: -site:-user
          PYTHONPATH: .
        if: "matrix.os == 'ubuntu-latest'"
      - name: Test suite run (Mac OS)
        run: |
          ./brz selftest --subunit2 | subunit-filter --fixup-expected-failures=xfail.macos -s --passthrough | subunit2pyunit
        env:
          PYTHONHASHSEED: random
          BRZ_PLUGIN_PATH: -site:-user
          PYTHONPATH: .
        if: "matrix.os == 'macos-latest'"
      - name: Test suite run (Windows)
        run: |
          python -m breezy selftest --subunit2 | subunit-filter --fixup-expected-failures=xfail.windows -s --passthrough | subunit2pyunit
        env:
          PYTHONHASHSEED: random
          BRZ_PLUGIN_PATH: -site:-user
          PYTHONPATH: .
        shell: bash
        if: "matrix.os == 'windows-latest'"
      - name: Run mypy
        run: |
          python -m pip install mypy types-PyYAML types-paramiko types-setuptools typing-extensions
          python -m mypy breezy
        if: "matrix.python-version != 'pypy3'"
