name: Reusable Standard Test on: workflow_call: inputs: python-version: required: true type: string cmake-args: required: false type: string default: '' runs-on: required: true type: string env: PYTHONDEVMODE: 1 PIP_BREAK_SYSTEM_PACKAGES: 1 PIP_ONLY_BINARY: numpy FORCE_COLOR: 3 PYTEST_TIMEOUT: 300 # For cmake: VERBOSE: 1 CMAKE_COLOR_DIAGNOSTICS: 1 jobs: standard: name: 🧪 runs-on: ${{ inputs.runs-on }} timeout-minutes: 90 steps: - uses: actions/checkout@v5 - name: Setup Python ${{ inputs.python-version }} uses: actions/setup-python@v6 with: python-version: ${{ inputs.python-version }} allow-prereleases: true # Python 3.13.4 broken on Windows check-latest: >- ${{ inputs.python-version == '3.13' && runner.os == 'Windows' }} - name: Setup Boost (Linux) if: runner.os == 'Linux' run: sudo apt-get install libboost-dev - name: Setup Boost (macOS) if: runner.os == 'macOS' run: brew install boost - name: Install uv uses: astral-sh/setup-uv@v6 with: enable-cache: true - name: Prepare env run: uv pip install --python=python --system -r tests/requirements.txt - name: Setup annotations on Linux if: runner.os == 'Linux' run: uv pip install --python=python --system pytest-github-actions-annotate-failures # TODO Resolve Windows Ninja shared object issue on Python 3.8+ - name: Use Ninja except on Windows if: runner.os != 'Windows' run: echo "CMAKE_GENERATOR=Ninja" >> "$GITHUB_ENV" - name: Configure run: > cmake -S. -Bbuild -Werror=dev -DPYBIND11_WERROR=ON -DPYBIND11_PYTEST_ARGS=-v -DDOWNLOAD_CATCH=ON -DDOWNLOAD_EIGEN=ON ${{ inputs.cmake-args }} - name: Build run: cmake --build build - name: Python tests run: cmake --build build --target pytest - name: C++ tests run: cmake --build build --target cpptest - name: Interface test run: cmake --build build --target test_cmake_build - name: Visibility test run: cmake --build build --target test_cross_module_rtti - name: Setuptools helpers test run: | uv pip install --python=python --system setuptools pytest tests/extra_setuptools