name: elementpath

on:
  push:
    branches: [master, develop]
  pull_request:
    branches: [master, develop]

jobs:
  build:

    runs-on:  ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        python-version: ["3.10", "3.11", "3.12", "3.13", "3.14.0", "3.15.0-alpha.3", "pypy-3.10"]
        exclude:
          - os: macos-latest
            python-version: 3.10
          - os: windows-latest
            python-version: 3.10

    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 pip and setuptools
        run: |
          python -m pip install --upgrade pip
          pip install setuptools
      - name: Lint with flake8
        run: |
          pip install flake8
          flake8 elementpath --max-line-length=100 --statistics
      - name: Lint with mypy==1.18.2
        if: ${{ matrix.python-version == '3.15.0-alpha.3' || matrix.python-version == 'pypy-3.10' }}
        run: |
          pip install mypy==1.18.2 xmlschema lxml-stubs
          mypy --show-error-codes --strict elementpath
      - name: Lint with mypy==1.19.1
        if: ${{ matrix.python-version != '3.15.0-alpha.3' && matrix.python-version != 'pypy-3.10' }}
        run: |
          pip install mypy==1.19.1 xmlschema lxml-stubs
          mypy --show-error-codes --strict elementpath
      - name: Install optional dependencies
        if: ${{ matrix.python-version != '3.15.0-alpha.3' }}
        run: pip install lxml
      - name: Test with unittest
        run: |
          python -m unittest
