| name: CI |
| |
| on: |
| workflow_dispatch: |
| pull_request: |
| push: |
| branches: |
| - master |
| - stable |
| - v* |
| |
| jobs: |
| standard: |
| strategy: |
| fail-fast: false |
| matrix: |
| runs-on: [ubuntu-latest, windows-latest, macos-latest] |
| arch: [x64] |
| max-cxx-std: [17] |
| python: |
| - 2.7 |
| - 3.5 |
| - 3.8 |
| - 3.9-dev |
| - pypy2 |
| - pypy3 |
| |
| include: |
| - runs-on: ubuntu-latest |
| python: 3.6 |
| arch: x64 |
| max-cxx-std: 17 |
| - runs-on: macos-latest |
| python: 3.7 |
| arch: x64 |
| max-cxx-std: 17 |
| - runs-on: windows-2016 |
| python: 3.7 |
| arch: x86 |
| max-cxx-std: 14 |
| |
| exclude: |
| # Currently 32bit only, and we build 64bit |
| - runs-on: windows-latest |
| python: pypy2 |
| arch: x64 |
| max-cxx-std: 17 |
| - runs-on: windows-latest |
| python: pypy3 |
| arch: x64 |
| max-cxx-std: 17 |
| |
| # Currently can't build due to warning, fixed in CPython > 3.9b5 |
| - runs-on: macos-latest |
| python: 3.9-dev |
| arch: x64 |
| max-cxx-std: 17 |
| |
| # Currently broken on embed_test |
| - runs-on: windows-latest |
| python: 3.8 |
| arch: x64 |
| max-cxx-std: 17 |
| - runs-on: windows-latest |
| python: 3.9-dev |
| arch: x64 |
| max-cxx-std: 17 |
| |
| name: "🐍 ${{ matrix.python }} • ${{ matrix.runs-on }} • ${{ matrix.arch }}" |
| runs-on: ${{ matrix.runs-on }} |
| |
| steps: |
| - uses: actions/checkout@v2 |
| |
| - name: Setup Python ${{ matrix.python }} |
| uses: actions/setup-python@v2 |
| with: |
| python-version: ${{ matrix.python }} |
| architecture: ${{ matrix.arch }} |
| |
| - name: Cache wheels |
| if: startsWith(runner.os, 'macOS') |
| uses: actions/cache@v2 |
| with: |
| # This path is specific to macOS - we really only need it for PyPy NumPy wheels |
| # See https://github.com/actions/cache/blob/master/examples.md#python---pip |
| # for ways to do this more generally |
| path: ~/Library/Caches/pip |
| # Look to see if there is a cache hit for the corresponding requirements file |
| key: ${{ runner.os }}-pip-${{ matrix.python }}-${{ matrix.arch }}-${{ hashFiles('tests/requirements.txt') }} |
| |
| - name: Prepare env |
| run: python -m pip install -r tests/requirements.txt |
| |
| - name: Configure C++11 |
| shell: bash |
| run: > |
| cmake -S . -B build |
| -DPYBIND11_WERROR=ON |
| -DDOWNLOAD_CATCH=ON |
| -DDOWNLOAD_EIGEN=ON |
| -DCMAKE_CXX_STANDARD=11 |
| -DPYTHON_EXECUTABLE=$(python -c "import sys; print(sys.executable)") |
| |
| - name: Build C++11 |
| run: cmake --build build -j 2 |
| |
| - name: Python tests C++11 |
| run: cmake --build build --target pytest -j 2 -v |
| |
| - name: C++11 tests |
| run: cmake --build build --target cpptest -j 2 -v |
| |
| - name: Interface test C++11 |
| run: cmake --build build --target test_cmake_build |
| |
| - name: Configure C++${{ matrix.max-cxx-std }} |
| shell: bash |
| run: > |
| cmake -S . -B build2 |
| -DPYBIND17_WERROR=ON |
| -DDOWNLOAD_CATCH=ON |
| -DDOWNLOAD_EIGEN=ON |
| -DCMAKE_CXX_STANDARD=${{ matrix.max-cxx-std }} |
| -DPYTHON_EXECUTABLE=$(python -c "import sys; print(sys.executable)") |
| |
| - name: Build C++${{ matrix.max-cxx-std }} |
| run: cmake --build build2 -j 2 |
| |
| - name: Python tests C++${{ matrix.max-cxx-std }} |
| run: cmake --build build2 --target pytest |
| |
| - name: C++${{ matrix.max-cxx-std }} tests |
| run: cmake --build build2 --target cpptest |
| |
| - name: Interface test C++${{ matrix.max-cxx-std }} |
| run: cmake --build build2 --target test_cmake_build |
| |
| clang: |
| runs-on: ubuntu-latest |
| strategy: |
| fail-fast: false |
| matrix: |
| clang: |
| - 3.6 |
| - 3.7 |
| - 3.9 |
| - 5 |
| - 7 |
| - 9 |
| - dev |
| |
| name: "🐍 3 • Clang ${{ matrix.clang }} • x64" |
| container: "silkeh/clang:${{ matrix.clang }}" |
| |
| steps: |
| - uses: actions/checkout@v2 |
| |
| - name: Add wget and python3 |
| run: apt-get update && apt-get install -y python3-dev python3-numpy python3-pytest libeigen3-dev |
| |
| - name: Configure |
| shell: bash |
| run: > |
| cmake -S . -B build |
| -DPYBIND11_WERROR=ON |
| -DDOWNLOAD_CATCH=ON |
| -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") |
| |
| - name: Build |
| run: cmake --build build -j 2 |
| |
| - 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 |
| |
| gcc: |
| runs-on: ubuntu-latest |
| strategy: |
| fail-fast: false |
| matrix: |
| gcc: |
| - 7 |
| - latest |
| |
| name: "🐍 3 • GCC ${{ matrix.gcc }} • x64" |
| container: "gcc:${{ matrix.gcc }}" |
| |
| steps: |
| - uses: actions/checkout@v1 |
| |
| - name: Add Python 3 |
| run: apt-get update; apt-get install -y python3-dev python3-numpy python3-pytest python3-pip libeigen3-dev |
| |
| - name: Update pip |
| run: python3 -m pip install --upgrade pip |
| |
| - name: Setup CMake 3.18 |
| uses: jwlawson/actions-setup-cmake@v1.3 |
| with: |
| cmake-version: 3.18 |
| |
| - name: Configure |
| shell: bash |
| run: > |
| cmake -S . -B build |
| -DPYBIND11_WERROR=ON |
| -DDOWNLOAD_CATCH=ON |
| -DCMAKE_CXX_STANDARD=11 |
| -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") |
| |
| - name: Build |
| run: cmake --build build -j 2 |
| |
| - 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 |
| |
| centos: |
| runs-on: ubuntu-latest |
| strategy: |
| fail-fast: false |
| matrix: |
| centos: |
| - 7 # GCC 4.8 |
| - 8 |
| |
| name: "🐍 3 • CentOS ${{ matrix.centos }} • x64" |
| container: "centos:${{ matrix.centos }}" |
| |
| steps: |
| - uses: actions/checkout@v2 |
| |
| - name: Add Python 3 |
| run: yum update -y && yum install -y python3-devel gcc-c++ make git |
| |
| - name: Update pip |
| run: python3 -m pip install --upgrade pip |
| |
| - name: Install dependencies |
| run: python3 -m pip install cmake -r tests/requirements.txt |
| |
| - name: Configure |
| shell: bash |
| run: > |
| cmake -S . -B build |
| -DPYBIND11_WERROR=ON |
| -DDOWNLOAD_CATCH=ON |
| -DDOWNLOAD_EIGEN=ON |
| -DCMAKE_CXX_STANDARD=11 |
| -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") |
| |
| - name: Build |
| run: cmake --build build -j 2 |
| |
| - 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 |
| |
| install-classic: |
| name: "🐍 3.5 • Debian • x86 • Install" |
| runs-on: ubuntu-latest |
| container: i386/debian:stretch |
| |
| steps: |
| - uses: actions/checkout@v1 |
| |
| - name: Install requirements |
| run: | |
| apt-get update |
| apt-get install -y git make cmake g++ libeigen3-dev python3-dev python3-pip python3-pytest |
| |
| - name: Configure for install |
| run: cmake -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") -DPYBIND11_INSTALL=1 -DPYBIND11_TEST=0 . |
| |
| - name: Make and install |
| run: make install |
| |
| - name: Copy tests to new directory |
| run: cp -a tests /pybind11-tests |
| |
| - name: Make a new test directory |
| run: mkdir /build-tests |
| |
| - name: Configure tests |
| run: cmake -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") ../pybind11-tests -DPYBIND11_WERROR=ON |
| working-directory: /build-tests |
| |
| - name: Run tests |
| run: make pytest -j 2 |
| working-directory: /build-tests |
| |
| |
| doxygen: |
| name: "Documentation build test" |
| runs-on: ubuntu-latest |
| container: alpine:3.12 |
| |
| steps: |
| - uses: actions/checkout@v2 |
| |
| - name: Install requirements |
| run: apk add doxygen python3-dev |
| |
| - name: Ensure pip |
| run: python3 -m ensurepip |
| |
| - name: Install python docs requirements |
| run: python3 -m pip install "sphinx<3" sphinx_rtd_theme breathe==4.13.1 pytest setuptools |
| |
| - name: Build docs |
| run: python3 -m sphinx -W -b html docs docs/.build |
| |
| - name: Make SDist |
| run: python3 setup.py sdist |
| |
| - name: Compare Dists (headers only) |
| run: | |
| python3 -m pip install --user -U ./dist/* |
| installed=$(python3 -c "import pybind11; print(pybind11.get_include(True) + '/pybind11')") |
| diff -rq $installed ./include/pybind11 |