From b3bdaceea2b495bac6d20140a597dd445173a837 Mon Sep 17 00:00:00 2001 From: Eric Cousineau Date: Thu, 4 Mar 2021 15:56:40 -0500 Subject: [PATCH] drake: Pull in partial ci changes from upstream --- .github/workflows/ci.yml | 745 +++++++++++++++++++++++++++----- .github/workflows/configure.yml | 94 ++-- .github/workflows/format.yml | 60 ++- 3 files changed, 720 insertions(+), 179 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 762fafca2f..fc7ea9b7ee 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,65 +8,55 @@ on: - drake jobs: + # This is the "main" test suite, which tests a large number of different + # versions of default compilers and Python versions in GitHub Actions. standard: strategy: fail-fast: false matrix: # runs-on: [ubuntu-latest, windows-latest, macos-latest] runs-on: [ubuntu-latest, macos-latest] - arch: [x64] - max-cxx-std: [17] python: # - 2.7 # - 3.5 + - 3.6 - 3.7 - 3.8 - - 3.9-dev + - 3.9 + - 3.10-dev # - pypy2 # - pypy3 + # Items in here will either be added to the build matrix (if not + # present), or add new keys to an existing matrix element if all the + # existing keys match. + # + # We support three optional keys: args (both build), args1 (first + # build), and args2 (second build). include: + # Just add a key - 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 + args: > + -DPYBIND11_FINDPYTHON=ON # - 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 }}" + # python: 3.6 + # args: > + # -DPYBIND11_FINDPYTHON=ON + + # # These items will be removed from the build matrix, keys must match. + # exclude: + # # Currently 32bit only, and we build 64bit + # - runs-on: windows-latest + # python: pypy2 + # - runs-on: windows-latest + # python: pypy3 + + # # TODO: PyPy2 7.3.3 segfaults, while 7.3.2 was fine. + # - runs-on: ubuntu-latest + # python: pypy2 + + name: "🐍 ${{ matrix.python }} • ${{ matrix.runs-on }} • x64 ${{ matrix.args }}" runs-on: ${{ matrix.runs-on }} steps: @@ -76,10 +66,16 @@ jobs: uses: actions/setup-python@v2 with: python-version: ${{ matrix.python }} - architecture: ${{ matrix.arch }} + + - name: Setup Boost (Windows / Linux latest) + shell: bash + run: echo "BOOST_ROOT=$BOOST_ROOT_1_72_0" >> $GITHUB_ENV + + - name: Update CMake + uses: jwlawson/actions-setup-cmake@v1.8 - name: Cache wheels - if: startsWith(runner.os, 'macOS') + if: runner.os == 'macOS' uses: actions/cache@v2 with: # This path is specific to macOS - we really only need it for PyPy NumPy wheels @@ -87,55 +83,168 @@ jobs: # 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') }} + key: ${{ runner.os }}-pip-${{ matrix.python }}-x64-${{ hashFiles('tests/requirements.txt') }} - name: Prepare env - run: python -m pip install -r tests/requirements.txt + run: python -m pip install -r tests/requirements.txt --prefer-binary - - name: Configure C++11 - shell: bash + - name: Setup annotations on Linux + if: runner.os == 'Linux' + run: python -m pip install pytest-github-actions-annotate-failures + + # First build - C++11 mode and inplace + - name: Configure C++11 ${{ matrix.args }} run: > - cmake -S . -B build + cmake -S . -B . -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON -DDOWNLOAD_EIGEN=ON -DCMAKE_CXX_STANDARD=11 - -DPYTHON_EXECUTABLE=$(python -c "import sys; print(sys.executable)") + ${{ matrix.args }} - name: Build C++11 - run: cmake --build build -j 2 + run: cmake --build . -j 2 - name: Python tests C++11 - run: cmake --build build --target pytest -j 2 + run: cmake --build . --target pytest -j 2 - name: C++11 tests - run: cmake --build build --target cpptest -j 2 + # TODO: Figure out how to load the DLL on Python 3.8+ + if: "!(runner.os == 'Windows' && (matrix.python == 3.8 || matrix.python == 3.9 || matrix.python == '3.10-dev'))" + run: cmake --build . --target cpptest -j 2 - name: Interface test C++11 - run: cmake --build build --target test_cmake_build + run: cmake --build . --target test_cmake_build - - name: Configure C++${{ matrix.max-cxx-std }} - shell: bash + - name: Clean directory + run: git clean -fdx + + # Second build - C++17 mode and in a build directory + - name: Configure ${{ matrix.args2 }} run: > cmake -S . -B build2 -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON -DDOWNLOAD_EIGEN=ON - -DCMAKE_CXX_STANDARD=${{ matrix.max-cxx-std }} - -DPYTHON_EXECUTABLE=$(python -c "import sys; print(sys.executable)") + -DCMAKE_CXX_STANDARD=17 + ${{ matrix.args }} + ${{ matrix.args2 }} - - name: Build C++${{ matrix.max-cxx-std }} + - name: Build run: cmake --build build2 -j 2 - - name: Python tests C++${{ matrix.max-cxx-std }} + - name: Python tests run: cmake --build build2 --target pytest - - name: C++${{ matrix.max-cxx-std }} tests + - name: C++ tests + # TODO: Figure out how to load the DLL on Python 3.8+ + if: "!(runner.os == 'Windows' && (matrix.python == 3.8 || matrix.python == 3.9 || matrix.python == '3.10-dev'))" run: cmake --build build2 --target cpptest - - name: Interface test C++${{ matrix.max-cxx-std }} + - name: Interface test run: cmake --build build2 --target test_cmake_build + # Eventually Microsoft might have an action for setting up + # MSVC, but for now, this action works: + - name: Prepare compiler environment for Windows 🐍 2.7 + if: matrix.python == 2.7 && runner.os == 'Windows' + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: x64 + + # This makes two environment variables available in the following step(s) + - name: Set Windows 🐍 2.7 environment variables + if: matrix.python == 2.7 && runner.os == 'Windows' + shell: bash + run: | + echo "DISTUTILS_USE_SDK=1" >> $GITHUB_ENV + echo "MSSdk=1" >> $GITHUB_ENV + + # This makes sure the setup_helpers module can build packages using + # setuptools + - name: Setuptools helpers test + run: pytest tests/extra_setuptools + + + # deadsnakes: + # strategy: + # fail-fast: false + # matrix: + # include: + # - python-version: 3.9 + # python-debug: true + # valgrind: true + # - python-version: 3.10-dev + # python-debug: false + + # name: "🐍 ${{ matrix.python-version }}${{ matrix.python-debug && '-dbg' || '' }} (deadsnakes)${{ matrix.valgrind && ' • Valgrind' || '' }} • x64" + # runs-on: ubuntu-latest + + # steps: + # - uses: actions/checkout@v2 + + # - name: Setup Python ${{ matrix.python-version }} (deadsnakes) + # uses: deadsnakes/action@v2.1.1 + # with: + # python-version: ${{ matrix.python-version }} + # debug: ${{ matrix.python-debug }} + + # - name: Update CMake + # uses: jwlawson/actions-setup-cmake@v1.7 + + # - name: Valgrind cache + # if: matrix.valgrind + # uses: actions/cache@v2 + # id: cache-valgrind + # with: + # path: valgrind + # key: 3.16.1 # Valgrind version + + # - name: Compile Valgrind + # if: matrix.valgrind && steps.cache-valgrind.outputs.cache-hit != 'true' + # run: | + # VALGRIND_VERSION=3.16.1 + # curl https://sourceware.org/pub/valgrind/valgrind-$VALGRIND_VERSION.tar.bz2 -o - | tar xj + # mv valgrind-$VALGRIND_VERSION valgrind + # cd valgrind + # ./configure + # make -j 2 > /dev/null + + # - name: Install Valgrind + # if: matrix.valgrind + # working-directory: valgrind + # run: | + # sudo make install + # sudo apt-get update + # sudo apt-get install libc6-dbg # Needed by Valgrind + + # - name: Prepare env + # run: python -m pip install -r tests/requirements.txt --prefer-binary + + # - name: Configure + # run: > + # cmake -S . -B build + # -DCMAKE_BUILD_TYPE=Debug + # -DPYBIND11_WERROR=ON + # -DDOWNLOAD_CATCH=ON + # -DDOWNLOAD_EIGEN=ON + # -DCMAKE_CXX_STANDARD=17 + + # - 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: Run Valgrind on Python tests + # if: matrix.valgrind + # run: cmake --build build --target memcheck + + + # Testing on clang using the excellent silkeh clang docker images clang: runs-on: ubuntu-latest strategy: @@ -145,12 +254,20 @@ jobs: # - 3.6 # - 3.7 # - 3.9 - # - 5 - # - 7 + - 7 - 9 - dev - - name: "🐍 3 • Clang ${{ matrix.clang }} • x64" + std: + - 11 + include: + # - clang: 5 + # std: 14 + - clang: 10 + std: 20 + - clang: 10 + std: 17 + + name: "🐍 3 • Clang ${{ matrix.clang }} • C++${{ matrix.std }} • x64" container: "silkeh/clang:${{ matrix.clang }}" steps: @@ -165,6 +282,7 @@ jobs: cmake -S . -B build -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON + -DCMAKE_CXX_STANDARD=${{ matrix.std }} -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") - name: Build @@ -179,6 +297,124 @@ jobs: - name: Interface test run: cmake --build build --target test_cmake_build + + # # Testing NVCC; forces sources to behave like .cu files + # cuda: + # runs-on: ubuntu-latest + # name: "🐍 3.8 • CUDA 11 • Ubuntu 20.04" + # container: nvidia/cuda:11.0-devel-ubuntu20.04 + + # steps: + # - uses: actions/checkout@v2 + + # # tzdata will try to ask for the timezone, so set the DEBIAN_FRONTEND + # - name: Install 🐍 3 + # run: apt-get update && DEBIAN_FRONTEND="noninteractive" apt-get install -y cmake git python3-dev python3-pytest python3-numpy + + # - name: Configure + # run: cmake -S . -B build -DPYBIND11_CUDA_TESTS=ON -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON + + # - name: Build + # run: cmake --build build -j2 --verbose + + # - name: Python tests + # run: cmake --build build --target pytest + + +# TODO: Internal compiler error - report to NVidia +# # Testing CentOS 8 + PGI compilers +# centos-nvhpc8: +# runs-on: ubuntu-latest +# name: "🐍 3 • CentOS8 / PGI 20.11 • x64" +# container: centos:8 +# +# steps: +# - uses: actions/checkout@v2 +# +# - name: Add Python 3 and a few requirements +# run: yum update -y && yum install -y git python3-devel python3-numpy python3-pytest make environment-modules +# +# - name: Install CMake with pip +# run: | +# python3 -m pip install --upgrade pip +# python3 -m pip install cmake --prefer-binary +# +# - name: Install NVidia HPC SDK +# run: > +# yum -y install +# https://developer.download.nvidia.com/hpc-sdk/20.11/nvhpc-20-11-20.11-1.x86_64.rpm +# https://developer.download.nvidia.com/hpc-sdk/20.11/nvhpc-2020-20.11-1.x86_64.rpm +# +# - name: Configure +# shell: bash +# run: | +# source /etc/profile.d/modules.sh +# module load /opt/nvidia/hpc_sdk/modulefiles/nvhpc/20.11 +# cmake -S . -B build -DDOWNLOAD_CATCH=ON -DCMAKE_CXX_STANDARD=14 -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") +# +# - name: Build +# run: cmake --build build -j 2 --verbose +# +# - 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 + + + # # Testing on CentOS 7 + PGI compilers, which seems to require more workarounds + # centos-nvhpc7: + # runs-on: ubuntu-latest + # name: "🐍 3 • CentOS7 / PGI 20.9 • x64" + # container: centos:7 + + # steps: + # - uses: actions/checkout@v2 + + # - name: Add Python 3 and a few requirements + # run: yum update -y && yum install -y epel-release && yum install -y git python3-devel make environment-modules cmake3 + + # - name: Install NVidia HPC SDK + # run: yum -y install https://developer.download.nvidia.com/hpc-sdk/20.9/nvhpc-20-9-20.9-1.x86_64.rpm https://developer.download.nvidia.com/hpc-sdk/20.9/nvhpc-2020-20.9-1.x86_64.rpm + + # # On CentOS 7, we have to filter a few tests (compiler internal error) + # # and allow deeper templete recursion (not needed on CentOS 8 with a newer + # # standard library). On some systems, you many need further workarounds: + # # https://github.com/pybind/pybind11/pull/2475 + # - name: Configure + # shell: bash + # run: | + # source /etc/profile.d/modules.sh + # module load /opt/nvidia/hpc_sdk/modulefiles/nvhpc/20.9 + # cmake3 -S . -B build -DDOWNLOAD_CATCH=ON \ + # -DCMAKE_CXX_STANDARD=11 \ + # -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") \ + # -DCMAKE_CXX_FLAGS="-Wc,--pending_instantiations=0" \ + # -DPYBIND11_TEST_FILTER="test_smart_ptr.cpp;test_virtual_functions.cpp" + + # # Building before installing Pip should produce a warning but not an error + # - name: Build + # run: cmake3 --build build -j 2 --verbose + + # - name: Install CMake with pip + # run: | + # python3 -m pip install --upgrade pip + # python3 -m pip install pytest + + # - name: Python tests + # run: cmake3 --build build --target pytest + + # - name: C++ tests + # run: cmake3 --build build --target cpptest + + # - name: Interface test + # run: cmake3 --build build --target test_cmake_build + + + # Testing on GCC using the GCC docker images (only recent images supported) gcc: runs-on: ubuntu-latest strategy: @@ -187,8 +423,13 @@ jobs: gcc: - 7 - latest + std: + - 11 + include: + - gcc: 10 + std: 20 - name: "🐍 3 • GCC ${{ matrix.gcc }} • x64" + name: "🐍 3 • GCC ${{ matrix.gcc }} • C++${{ matrix.std }}• x64" container: "gcc:${{ matrix.gcc }}" steps: @@ -200,10 +441,8 @@ jobs: - 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: Update CMake + uses: jwlawson/actions-setup-cmake@v1.8 - name: Configure shell: bash @@ -211,7 +450,7 @@ jobs: cmake -S . -B build -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON - -DCMAKE_CXX_STANDARD=11 + -DCMAKE_CXX_STANDARD=${{ matrix.std }} -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") - name: Build @@ -226,6 +465,106 @@ jobs: - name: Interface test run: cmake --build build --target test_cmake_build + + # # Testing on ICC using the oneAPI apt repo + # icc: + # runs-on: ubuntu-20.04 + # strategy: + # fail-fast: false + + # name: "🐍 3 • ICC latest • x64" + + # steps: + # - uses: actions/checkout@v2 + + # - name: Add apt repo + # run: | + # sudo apt-get update + # sudo apt-get install -y wget build-essential pkg-config cmake ca-certificates gnupg + # wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB + # sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2023.PUB + # echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list + + # - name: Add ICC & Python 3 + # run: sudo apt-get update; sudo apt-get install -y intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic cmake python3-dev python3-numpy python3-pytest python3-pip + + # - name: Update pip + # run: | + # set +e; source /opt/intel/oneapi/setvars.sh; set -e + # python3 -m pip install --upgrade pip + + # - name: Install dependencies + # run: | + # set +e; source /opt/intel/oneapi/setvars.sh; set -e + # python3 -m pip install -r tests/requirements.txt --prefer-binary + + # - name: Configure C++11 + # run: | + # set +e; source /opt/intel/oneapi/setvars.sh; set -e + # cmake -S . -B build-11 \ + # -DPYBIND11_WERROR=ON \ + # -DDOWNLOAD_CATCH=ON \ + # -DDOWNLOAD_EIGEN=OFF \ + # -DCMAKE_CXX_STANDARD=11 \ + # -DCMAKE_CXX_COMPILER=$(which icpc) \ + # -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") + + # - name: Build C++11 + # run: | + # set +e; source /opt/intel/oneapi/setvars.sh; set -e + # cmake --build build-11 -j 2 -v + + # - name: Python tests C++11 + # run: | + # set +e; source /opt/intel/oneapi/setvars.sh; set -e + # sudo service apport stop + # cmake --build build-11 --target check + + # - name: C++ tests C++11 + # run: | + # set +e; source /opt/intel/oneapi/setvars.sh; set -e + # cmake --build build-11 --target cpptest + + # - name: Interface test C++11 + # run: | + # set +e; source /opt/intel/oneapi/setvars.sh; set -e + # cmake --build build-11 --target test_cmake_build + + # - name: Configure C++17 + # run: | + # set +e; source /opt/intel/oneapi/setvars.sh; set -e + # cmake -S . -B build-17 \ + # -DPYBIND11_WERROR=ON \ + # -DDOWNLOAD_CATCH=ON \ + # -DDOWNLOAD_EIGEN=OFF \ + # -DCMAKE_CXX_STANDARD=17 \ + # -DCMAKE_CXX_COMPILER=$(which icpc) \ + # -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") + + # - name: Build C++17 + # run: | + # set +e; source /opt/intel/oneapi/setvars.sh; set -e + # cmake --build build-17 -j 2 -v + + # - name: Python tests C++17 + # run: | + # set +e; source /opt/intel/oneapi/setvars.sh; set -e + # sudo service apport stop + # cmake --build build-17 --target check + + # - name: C++ tests C++17 + # run: | + # set +e; source /opt/intel/oneapi/setvars.sh; set -e + # cmake --build build-17 --target cpptest + + # - name: Interface test C++17 + # run: | + # set +e; source /opt/intel/oneapi/setvars.sh; set -e + # cmake --build build-17 --target test_cmake_build + + + # # Testing on CentOS (manylinux uses a centos base, and this is an easy way + # # to get GCC 4.8, which is the manylinux1 compiler). # centos: # runs-on: ubuntu-latest # strategy: @@ -248,7 +587,7 @@ jobs: # run: python3 -m pip install --upgrade pip # - name: Install dependencies - # run: python3 -m pip install cmake -r tests/requirements.txt + # run: python3 -m pip install cmake -r tests/requirements.txt --prefer-binary # - name: Configure # shell: bash @@ -272,65 +611,237 @@ jobs: # - 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 + # # This tests an "install" with the CMake tools + # install-classic: + # name: "🐍 3.5 • Debian • x86 • Install" + # runs-on: ubuntu-latest + # container: i386/debian:stretch - - name: Install requirements - run: | - apt-get update - apt-get install -y git make cmake g++ libeigen3-dev python3-dev python3-pip python3-pytest + # 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 + # pip3 install "pytest==3.1.*" + + # - name: Configure for install + # run: > + # cmake . + # -DPYBIND11_INSTALL=1 -DPYBIND11_TEST=0 + # -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") - - 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: Make and install - run: make install + # - name: Copy tests to new directory + # run: cp -a tests /pybind11-tests - - name: Copy tests to new directory - run: cp -a tests /pybind11-tests + # - name: Make a new test directory + # run: mkdir /build-tests - - name: Make a new test directory - run: mkdir /build-tests + # - name: Configure tests + # run: > + # cmake ../pybind11-tests + # -DDOWNLOAD_CATCH=ON + # -DPYBIND11_WERROR=ON + # -DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)") + # working-directory: /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 - - name: Run tests - run: make pytest -j 2 - working-directory: /build-tests + # # This verifies that the documentation is not horribly broken, and does a + # # basic sanity check on the SDist. + # doxygen: + # name: "Documentation build test" + # runs-on: ubuntu-latest - doxygen: - name: "Documentation build test" - runs-on: ubuntu-latest - container: alpine:3.12 + # steps: + # - uses: actions/checkout@v2 - steps: - - uses: actions/checkout@v2 + # - uses: actions/setup-python@v2 - - name: Install requirements - run: apk add doxygen python3-dev + # - name: Install Doxygen + # run: sudo apt-get install -y doxygen librsvg2-bin # Changed to rsvg-convert in 20.04 - - name: Ensure pip - run: python3 -m ensurepip + # - name: Install docs & setup requirements + # run: python3 -m pip install -r docs/requirements.txt - - 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: Build docs - run: python3 -m sphinx -W -b html docs docs/.build + # - name: Make SDist + # run: python3 setup.py sdist - - name: Make SDist - run: python3 setup.py sdist + # - run: git status --ignored - - 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 + # - name: Check local include dir + # run: > + # ls pybind11; + # python3 -c "import pybind11, pathlib; assert (a := pybind11.get_include()) == (b := str(pathlib.Path('include').resolve())), f'{a} != {b}'" + + # - name: Compare Dists (headers only) + # working-directory: include + # run: | + # python3 -m pip install --user -U ../dist/* + # installed=$(python3 -c "import pybind11; print(pybind11.get_include() + '/pybind11')") + # diff -rq $installed ./pybind11 + + # win32: + # strategy: + # fail-fast: false + # matrix: + # python: + # - 3.5 + # - 3.6 + # - 3.7 + # - 3.8 + # - 3.9 + # - pypy3 + # # TODO: fix hang on pypy2 + + # include: + # - python: 3.9 + # args: -DCMAKE_CXX_STANDARD=20 -DDOWNLOAD_EIGEN=OFF + # - python: 3.8 + # args: -DCMAKE_CXX_STANDARD=17 + + # name: "🐍 ${{ matrix.python }} • MSVC 2019 • x86 ${{ matrix.args }}" + # runs-on: windows-latest + + # steps: + # - uses: actions/checkout@v2 + + # - name: Setup Python ${{ matrix.python }} + # uses: actions/setup-python@v2 + # with: + # python-version: ${{ matrix.python }} + # architecture: x86 + + # - name: Update CMake + # uses: jwlawson/actions-setup-cmake@v1.7 + + # - name: Prepare MSVC + # uses: ilammy/msvc-dev-cmd@v1 + # with: + # arch: x86 + + # - name: Prepare env + # run: python -m pip install -r tests/requirements.txt --prefer-binary + + # # First build - C++11 mode and inplace + # - name: Configure ${{ matrix.args }} + # run: > + # cmake -S . -B build + # -G "Visual Studio 16 2019" -A Win32 + # -DPYBIND11_WERROR=ON + # -DDOWNLOAD_CATCH=ON + # -DDOWNLOAD_EIGEN=ON + # ${{ matrix.args }} + # - name: Build C++11 + # run: cmake --build build -j 2 + + # - name: Run tests + # run: cmake --build build -t pytest + + # win32-msvc2015: + # name: "🐍 ${{ matrix.python }} • MSVC 2015 • x64" + # runs-on: windows-latest + # strategy: + # fail-fast: false + # matrix: + # python: + # - 2.7 + # - 3.6 + # - 3.7 + # # todo: check/cpptest does not support 3.8+ yet + + # steps: + # - uses: actions/checkout@v2 + + # - name: Setup 🐍 ${{ matrix.python }} + # uses: actions/setup-python@v2 + # with: + # python-version: ${{ matrix.python }} + + # - name: Update CMake + # uses: jwlawson/actions-setup-cmake@v1.7 + + # - name: Prepare MSVC + # uses: ilammy/msvc-dev-cmd@v1 + # with: + # toolset: 14.0 + + # - name: Prepare env + # run: python -m pip install -r tests/requirements.txt --prefer-binary + + # # First build - C++11 mode and inplace + # - name: Configure + # run: > + # cmake -S . -B build + # -G "Visual Studio 14 2015" -A x64 + # -DPYBIND11_WERROR=ON + # -DDOWNLOAD_CATCH=ON + # -DDOWNLOAD_EIGEN=ON + + # - name: Build C++14 + # run: cmake --build build -j 2 + + # - name: Run all checks + # run: cmake --build build -t check + + + # win32-msvc2017: + # name: "🐍 ${{ matrix.python }} • MSVC 2017 • x64" + # runs-on: windows-2016 + # strategy: + # fail-fast: false + # matrix: + # python: + # - 2.7 + # - 3.5 + # - 3.7 + # std: + # - 14 + + # include: + # - python: 2.7 + # std: 17 + # args: > + # -DCMAKE_CXX_FLAGS="/permissive- /EHsc /GR" + + # steps: + # - uses: actions/checkout@v2 + + # - name: Setup 🐍 ${{ matrix.python }} + # uses: actions/setup-python@v2 + # with: + # python-version: ${{ matrix.python }} + + # - name: Update CMake + # uses: jwlawson/actions-setup-cmake@v1.7 + + # - name: Prepare env + # run: python -m pip install -r tests/requirements.txt --prefer-binary + + # # First build - C++11 mode and inplace + # - name: Configure + # run: > + # cmake -S . -B build + # -G "Visual Studio 15 2017" -A x64 + # -DPYBIND11_WERROR=ON + # -DDOWNLOAD_CATCH=ON + # -DDOWNLOAD_EIGEN=ON + # -DCMAKE_CXX_STANDARD=${{ matrix.std }} + # ${{ matrix.args }} + + # - name: Build ${{ matrix.std }} + # run: cmake --build build -j 2 + + # - name: Run all checks + # run: cmake --build build -t check diff --git a/.github/workflows/configure.yml b/.github/workflows/configure.yml index 96904341de..77ee8cad8c 100644 --- a/.github/workflows/configure.yml +++ b/.github/workflows/configure.yml @@ -1,78 +1,82 @@ -name: Configure +name: Config on: workflow_dispatch: pull_request: push: branches: - - master - - stable - - v* + - drake jobs: + # This tests various versions of CMake in various combinations, to make sure + # the configure step passes. cmake: strategy: fail-fast: false matrix: - python: - - 2.7 - - 3.8 + runs-on: [ubuntu-latest, macos-latest, windows-latest] + arch: [x64] + cmake: [3.18] - name: CMake ${{ matrix.cmake }} Python ${{ matrix.python }} on ubuntu - runs-on: ubuntu-latest + include: + - runs-on: ubuntu-latest + arch: x64 + cmake: 3.4 + + - runs-on: macos-latest + arch: x64 + cmake: 3.7 + + - runs-on: windows-2016 + arch: x86 + cmake: 3.8 + + - runs-on: windows-2016 + arch: x86 + cmake: 3.18 + + name: 🐍 3.7 • CMake ${{ matrix.cmake }} • ${{ matrix.runs-on }} + runs-on: ${{ matrix.runs-on }} steps: - uses: actions/checkout@v2 - - name: Setup Python ${{ matrix.python }} + - name: Setup Python 3.7 uses: actions/setup-python@v2 with: - python-version: ${{ matrix.python }} + python-version: 3.7 + architecture: ${{ matrix.arch }} - name: Prepare env run: python -m pip install -r tests/requirements.txt - - name: Make build directories - run: | - mkdir build3.7 - mkdir build3.11 - mkdir build3.18 - - - name: Setup CMake 3.7 - uses: jwlawson/actions-setup-cmake@v1.3 + # An action for adding a specific version of CMake: + # https://github.com/jwlawson/actions-setup-cmake + - name: Setup CMake ${{ matrix.cmake }} + uses: jwlawson/actions-setup-cmake@v1.8 with: - cmake-version: 3.7 - - - name: Configure 3.7 - working-directory: build3.7 - run: > - cmake .. - -DPYBIND11_WERROR=ON - -DDOWNLOAD_CATCH=ON - -DPYTHON_EXECUTABLE=$(python -c "import sys; print(sys.executable)") + cmake-version: ${{ matrix.cmake }} - - name: Setup CMake 3.11 - uses: jwlawson/actions-setup-cmake@v1.3 - with: - cmake-version: 3.11 + # These steps use a directory with a space in it intentionally + - name: Make build directories + run: mkdir "build dir" - - name: Configure 3.11 - working-directory: build3.11 + - name: Configure + working-directory: build dir + shell: bash run: > cmake .. -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON -DPYTHON_EXECUTABLE=$(python -c "import sys; print(sys.executable)") - - name: Setup CMake 3.18 - uses: jwlawson/actions-setup-cmake@v1.3 - with: - cmake-version: 3.18 + # Only build and test if this was manually triggered in the GitHub UI + - name: Build + working-directory: build dir + if: github.event_name == 'workflow_dispatch' + run: cmake --build . --config Release - - name: Configure 3.18 - working-directory: build3.18 - run: > - cmake .. - -DPYBIND11_WERROR=ON - -DDOWNLOAD_CATCH=ON - -DPYTHON_EXECUTABLE=$(python -c "import sys; print(sys.executable)") + - name: Test + working-directory: build dir + if: github.event_name == 'workflow_dispatch' + run: cmake --build . --config Release --target check diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index e92f96e6ef..1fb9a4e18a 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -1,19 +1,45 @@ -name: Format +# # This is a format job. Pre-commit has a first-party GitHub action, so we use +# # that: https://github.com/pre-commit/action -on: - workflow_dispatch: - pull_request: - push: - branches: - - master - - stable - - "v*" +# name: Format -jobs: - pre-commit: - name: Format - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 - - uses: pre-commit/action@v2.0.0 +# on: +# workflow_dispatch: +# pull_request: +# push: +# branches: +# - drake + +# jobs: +# pre-commit: +# name: Format +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v2 +# - uses: actions/setup-python@v2 +# - uses: pre-commit/action@v2.0.0 +# with: +# # Slow hooks are marked with manual - slow is okay here, run them too +# extra_args: --hook-stage manual --all-files + +# # TODO(eric.cousineau): This currently breaks current source code. +# clang-tidy: +# name: Clang-Tidy +# runs-on: ubuntu-latest +# container: silkeh/clang:10 +# steps: +# - uses: actions/checkout@v2 + +# - name: Install requirements +# run: apt-get update && apt-get install -y python3-dev python3-pytest + +# - name: Configure +# run: > +# cmake -S . -B build +# -DCMAKE_CXX_CLANG_TIDY="$(which clang-tidy);--warnings-as-errors=*" +# -DDOWNLOAD_EIGEN=ON +# -DDOWNLOAD_CATCH=ON +# -DCMAKE_CXX_STANDARD=17 + +# - name: Build +# run: cmake --build build -j 2