pybind11/.github/workflows/ci.yml

384 lines
9.7 KiB
YAML
Raw Normal View History

name: CI
on:
workflow_dispatch:
pull_request:
push:
branches:
- master
- stable
- v*
jobs:
standard:
strategy:
fail-fast: false
matrix:
2020-07-26 22:17:11 +00:00
runs-on: [ubuntu-latest, windows-latest, macos-latest]
2020-07-26 22:42:53 +00:00
arch: [x64]
python:
- 2.7
- 3.5
- 3.8
- pypy2
- pypy3
include:
2020-07-26 22:17:11 +00:00
- runs-on: ubuntu-latest
python: 3.6
2020-07-26 22:42:53 +00:00
arch: x64
args: >
-DPYBIND11_FINDPYTHON=ON
2020-07-26 22:17:11 +00:00
- runs-on: windows-2016
python: 3.7
2020-07-26 22:42:53 +00:00
arch: x86
args2: >
-DCMAKE_CXX_FLAGS="/permissive- /EHsc /GR"
2020-08-02 03:09:32 +00:00
- runs-on: windows-latest
python: 3.6
arch: x64
args: >
-DPYBIND11_FINDPYTHON=ON
2020-08-02 03:09:32 +00:00
- runs-on: windows-latest
python: 3.7
arch: x64
- runs-on: ubuntu-latest
python: 3.9-dev
arch: x64
- runs-on: macos-latest
python: 3.9-dev
arch: x64
args: >
-DPYBIND11_FINDPYTHON=ON
exclude:
# Currently 32bit only, and we build 64bit
2020-07-26 22:17:11 +00:00
- runs-on: windows-latest
python: pypy2
2020-07-26 22:42:53 +00:00
arch: x64
2020-07-26 22:17:11 +00:00
- runs-on: windows-latest
python: pypy3
2020-07-26 22:42:53 +00:00
arch: x64
# Currently broken on embed_test
2020-07-26 22:17:11 +00:00
- runs-on: windows-latest
python: 3.8
2020-07-26 22:42:53 +00:00
arch: x64
2020-07-26 22:17:11 +00:00
- runs-on: windows-latest
python: 3.9-dev
2020-07-26 22:42:53 +00:00
arch: x64
name: "🐍 ${{ matrix.python }} • ${{ matrix.runs-on }} • ${{ matrix.arch }} ${{ matrix.args }}"
2020-07-26 22:17:11 +00:00
runs-on: ${{ matrix.runs-on }}
2020-08-24 22:04:37 +00:00
continue-on-error: ${{ endsWith(matrix.python, 'dev') }}
steps:
- uses: actions/checkout@v2
- name: Setup Python ${{ matrix.python }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python }}
2020-07-26 22:42:53 +00:00
architecture: ${{ matrix.arch }}
- name: Setup Boost (Windows / Linux latest)
2020-08-14 16:24:58 +00:00
run: echo "::set-env name=BOOST_ROOT::$BOOST_ROOT_1_72_0"
- name: Update CMake
uses: jwlawson/actions-setup-cmake@v1.3
2020-07-24 15:45:22 +00:00
- name: Cache wheels
2020-08-14 16:24:58 +00:00
if: runner.os == 'macOS'
2020-07-24 15:45:22 +00:00
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
2020-07-27 00:25:21 +00:00
key: ${{ runner.os }}-pip-${{ matrix.python }}-${{ matrix.arch }}-${{ hashFiles('tests/requirements.txt') }}
2020-07-24 15:45:22 +00:00
- name: Prepare env
2020-08-20 16:00:28 +00:00
run: python -m pip install -r tests/requirements.txt --prefer-binary
2020-08-24 22:04:37 +00:00
- name: Setup annotations
if: runner.os == 'Linux'
2020-08-24 22:04:37 +00:00
run: python -m pip install pytest-github-actions-annotate-failures
- name: Configure C++11 ${{ matrix.args }}
run: >
cmake -S . -B .
-DPYBIND11_WERROR=ON
-DDOWNLOAD_CATCH=ON
2020-07-26 17:44:10 +00:00
-DDOWNLOAD_EIGEN=ON
2020-07-24 00:30:47 +00:00
-DCMAKE_CXX_STANDARD=11
${{ matrix.args }}
2020-07-24 00:30:47 +00:00
- name: Build C++11
run: cmake --build . -j 2
2020-07-24 00:30:47 +00:00
- name: Python tests C++11
run: cmake --build . --target pytest -j 2
2020-07-24 00:30:47 +00:00
- name: C++11 tests
run: cmake --build . --target cpptest -j 2
2020-07-24 00:30:47 +00:00
- name: Interface test C++11
run: cmake --build . --target test_cmake_build
- name: Clean directory
run: git clean -fdx
2020-07-24 00:30:47 +00:00
- name: Configure ${{ matrix.args2 }}
2020-07-24 00:30:47 +00:00
run: >
2020-07-26 22:42:53 +00:00
cmake -S . -B build2
-DPYBIND11_WERROR=ON
2020-07-24 00:30:47 +00:00
-DDOWNLOAD_CATCH=ON
2020-07-26 17:44:10 +00:00
-DDOWNLOAD_EIGEN=ON
-DCMAKE_CXX_STANDARD=17
${{ matrix.args }}
${{ matrix.args2 }}
- name: Build
2020-07-30 20:04:26 +00:00
run: cmake --build build2 -j 2
2020-07-24 00:30:47 +00:00
- name: Python tests
2020-07-26 22:42:53 +00:00
run: cmake --build build2 --target pytest
2020-07-24 00:30:47 +00:00
- name: C++ tests
2020-07-26 22:42:53 +00:00
run: cmake --build build2 --target cpptest
2020-07-24 00:30:47 +00:00
- name: Interface test
2020-07-26 22:42:53 +00:00
run: cmake --build build2 --target test_cmake_build
2020-07-24 00:30:47 +00:00
clang:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
clang:
- 3.6
- 3.7
- 3.9
- 5
- 7
- 9
- dev
2020-07-26 22:42:53 +00:00
name: "🐍 3 • Clang ${{ matrix.clang }} • x64"
2020-07-24 00:30:47 +00:00
container: "silkeh/clang:${{ matrix.clang }}"
steps:
- uses: actions/checkout@v2
- name: Add wget and python3
2020-07-26 17:44:10 +00:00
run: apt-get update && apt-get install -y python3-dev python3-numpy python3-pytest libeigen3-dev
2020-07-24 00:30:47 +00:00
- 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
2020-07-24 00:30:47 +00:00
run: cmake --build build --target pytest
- name: C++ tests
2020-07-24 00:30:47 +00:00
run: cmake --build build --target cpptest
- name: Interface test
run: cmake --build build --target test_cmake_build
2020-07-26 17:54:11 +00:00
gcc:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
gcc:
- 7
- latest
2020-07-26 22:42:53 +00:00
name: "🐍 3 • GCC ${{ matrix.gcc }} • x64"
2020-07-26 17:54:11 +00:00
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
2020-07-26 22:42:53 +00:00
name: "🐍 3 • CentOS ${{ matrix.centos }} • x64"
2020-07-26 17:54:11 +00:00
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
2020-08-20 16:00:28 +00:00
run: python3 -m pip install cmake -r tests/requirements.txt --prefer-binary
2020-07-26 17:54:11 +00:00
- 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
2020-07-26 18:15:20 +00:00
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 python3-dev python3-pytest
- name: Configure
run: cmake -S . -B build -DPYBIND11_CUDA_TESTS=ON -DPYBIND11_WERROR=ON -DDOWNLOAD_CATCH=ON
- name: Build
run: cmake --build build -j2 -v
- name: Python tests
run: cmake --build build --target pytest
2020-07-26 18:15:20 +00:00
install-classic:
2020-07-26 22:42:53 +00:00
name: "🐍 3.5 • Debian • x86 • Install"
2020-07-26 18:15:20 +00:00
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
pip3 install "pytest==3.1.*"
2020-07-26 18:15:20 +00:00
- name: Configure for install
2020-08-01 02:45:19 +00:00
run: >
cmake .
-DPYBIND11_INSTALL=1 -DPYBIND11_TEST=0
-DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)")
2020-07-26 18:15:20 +00:00
- 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
2020-08-01 02:45:19 +00:00
run: >
cmake ../pybind11-tests
-DDOWNLOAD_CATCH=ON
-DPYBIND11_WERROR=ON
-DPYTHON_EXECUTABLE=$(python3 -c "import sys; print(sys.executable)")
2020-07-26 18:15:20 +00:00
working-directory: /build-tests
- name: Run tests
run: make pytest -j 2
working-directory: /build-tests
2020-07-26 18:37:39 +00:00
doxygen:
2020-07-26 22:17:11 +00:00
name: "Documentation build test"
2020-07-26 18:37:39 +00:00
runs-on: ubuntu-latest
container: alpine:3.12
steps:
- uses: actions/checkout@v2
- name: Install system requirements
2020-07-26 18:37:39 +00:00
run: apk add doxygen python3-dev
- name: Ensure pip
run: python3 -m ensurepip
- name: Install docs & setup requirements
run: python3 -m pip install -r docs/requirements.txt pytest setuptools
2020-07-26 18:37:39 +00:00
- 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