| name: Upstream | |
| on: | |
| workflow_dispatch: | |
| pull_request: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: upstream-${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| PIP_BREAK_SYSTEM_PACKAGES: 1 | |
| # For cmake: | |
| VERBOSE: 1 | |
| jobs: | |
| standard: | |
| name: "🐍 3.15 latest • ubuntu-latest • x64" | |
| runs-on: ubuntu-latest | |
| # Only runs when the 'python dev' label is selected | |
| if: "contains(github.event.pull_request.labels.*.name, 'python dev')" | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Setup Python 3.15 | |
| uses: actions/setup-python@v7 | |
| with: | |
| python-version: "3.15" | |
| allow-prereleases: true | |
| - name: Setup Boost | |
| run: sudo apt-get install libboost-dev | |
| - name: Update CMake | |
| uses: jwlawson/actions-setup-cmake@v2.2 | |
| - name: Run pip installs | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -r tests/requirements.txt | |
| - name: Show platform info | |
| run: | | |
| python -m platform | |
| cmake --version | |
| pip list | |
| # First build - C++11 mode and inplace | |
| - name: Configure C++11 | |
| run: > | |
| cmake -S . -B build11 | |
| -DPYBIND11_WERROR=ON | |
| -DDOWNLOAD_CATCH=ON | |
| -DDOWNLOAD_EIGEN=ON | |
| -DCMAKE_CXX_STANDARD=11 | |
| -DCMAKE_BUILD_TYPE=Debug | |
| - name: Build C++11 | |
| run: cmake --build build11 -j 2 | |
| - name: Python tests C++11 | |
| run: cmake --build build11 --target pytest -j 2 | |
| - name: C++11 tests | |
| timeout-minutes: 3 | |
| run: cmake --build build11 --target cpptest -j 2 | |
| - name: Interface test C++11 | |
| run: cmake --build build11 --target test_cmake_build | |
| # Second build - C++17 mode and in a build directory | |
| - name: Configure C++17 | |
| run: > | |
| cmake -S . -B build17 | |
| -DPYBIND11_WERROR=ON | |
| -DDOWNLOAD_CATCH=ON | |
| -DDOWNLOAD_EIGEN=ON | |
| -DCMAKE_CXX_STANDARD=17 | |
| - name: Build C++17 | |
| run: cmake --build build17 -j 2 | |
| - name: Python tests C++17 | |
| run: cmake --build build17 --target pytest | |
| - name: C++17 tests | |
| timeout-minutes: 3 | |
| run: cmake --build build17 --target cpptest | |
| # Third build - C++17 mode with unstable ABI | |
| - name: Configure (unstable ABI) | |
| run: > | |
| cmake -S . -B build17max | |
| -DPYBIND11_WERROR=ON | |
| -DDOWNLOAD_CATCH=ON | |
| -DDOWNLOAD_EIGEN=ON | |
| -DCMAKE_CXX_STANDARD=17 | |
| -DPYBIND11_INTERNALS_VERSION=10000000 | |
| - name: Build (unstable ABI) | |
| run: cmake --build build17max -j 2 | |
| - name: Python tests (unstable ABI) | |
| run: cmake --build build17max --target pytest | |
| - name: Interface test (unstable ABI) | |
| run: cmake --build build17max --target test_cmake_build | |
| # This makes sure the setup_helpers module can build packages using | |
| # setuptools | |
| - name: Setuptools helpers test | |
| run: | | |
| pip install setuptools | |
| pytest tests/extra_setuptools |