pyo3/.github/workflows/ci.yml

156 lines
5.8 KiB
YAML
Raw Normal View History

name: CI
2019-11-16 12:39:59 +00:00
2020-08-16 13:36:15 +00:00
on:
push:
branches:
- master
pull_request:
2019-11-16 12:39:59 +00:00
2020-09-01 19:59:28 +00:00
env:
CARGO_TERM_COLOR: always
2019-11-16 12:39:59 +00:00
jobs:
2020-08-08 17:03:16 +00:00
fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
2020-08-16 13:36:15 +00:00
- uses: actions/setup-python@v2
2020-08-08 17:03:16 +00:00
- run: pip install black==19.10b0
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
2020-08-16 13:36:15 +00:00
profile: minimal
components: rustfmt
2020-08-08 17:03:16 +00:00
- name: Check python formatting (black)
run: black --check .
- name: Check rust formatting (rustfmt)
run: cargo fmt --all -- --check
clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
2020-08-16 13:36:15 +00:00
profile: minimal
components: clippy
2020-08-08 17:03:16 +00:00
- run: make clippy
2019-11-16 12:39:59 +00:00
build:
2020-08-08 17:03:16 +00:00
needs: [fmt] # don't wait for clippy as fails rarely and takes longer
2020-08-16 13:36:15 +00:00
name: python${{ matrix.python-version }}-${{ matrix.platform.python-architecture }} ${{ matrix.platform.os }} ${{ matrix.msrv }}
runs-on: ${{ matrix.platform.os }}
2019-11-16 12:39:59 +00:00
strategy:
2020-09-01 19:56:13 +00:00
fail-fast: false # If one platform fails, allow the rest to keep testing.
2019-11-16 12:39:59 +00:00
matrix:
2020-08-16 13:36:15 +00:00
rust: [stable]
2020-12-17 08:51:00 +00:00
python-version: [3.6, 3.7, 3.8, 3.9, 3.10-dev, pypy-3.6]
platform: [
{ os: "macOS-latest", python-architecture: "x64", rust-target: "x86_64-apple-darwin" },
{ os: "ubuntu-latest", python-architecture: "x64", rust-target: "x86_64-unknown-linux-gnu" },
{ os: "windows-latest", python-architecture: "x64", rust-target: "x86_64-pc-windows-msvc" },
{ os: "windows-latest", python-architecture: "x86", rust-target: "i686-pc-windows-msvc" },
]
exclude:
2020-11-21 01:40:29 +00:00
# There is no 64-bit pypy on windows
2020-12-17 08:51:00 +00:00
- python-version: pypy-3.6
2020-11-21 01:40:29 +00:00
platform: { os: "windows-latest", python-architecture: "x64" }
2020-08-16 13:36:15 +00:00
include:
# Test minimal supported Rust version
- rust: 1.41.1
2020-10-10 09:34:37 +00:00
python-version: 3.9
2020-08-16 13:36:15 +00:00
platform: { os: "ubuntu-latest", python-architecture: "x64", rust-target: "x86_64-unknown-linux-gnu" }
msrv: "MSRV"
2019-11-16 12:39:59 +00:00
steps:
2020-03-25 02:28:33 +00:00
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.platform.python-architecture }}
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
2020-08-16 13:36:15 +00:00
toolchain: ${{ matrix.rust }}
target: ${{ matrix.platform.rust-target }}
2020-08-16 13:36:15 +00:00
profile: minimal
default: true
2020-08-16 13:36:15 +00:00
- if: matrix.platform.os == 'ubuntu-latest'
name: Prepare LD_LIBRARY_PATH (Ubuntu only)
run: echo LD_LIBRARY_PATH=${pythonLocation}/lib >> $GITHUB_ENV
2020-12-17 03:00:48 +00:00
- name: Build docs
run: cargo doc --no-default-features --features "macros num-bigint num-complex hashbrown" --verbose --target ${{ matrix.platform.rust-target }}
2020-12-17 03:00:48 +00:00
- name: Build (no features)
run: cargo build --no-default-features --verbose --target ${{ matrix.platform.rust-target }}
- name: Build (all additive features)
run: cargo build --no-default-features --features "macros num-bigint num-complex hashbrown serde" --verbose --target ${{ matrix.platform.rust-target }}
# Run tests (except on PyPy, because no embedding API).
2020-12-17 08:51:00 +00:00
- if: matrix.python-version != 'pypy-3.6'
name: Test
run: cargo test --no-default-features --features "macros num-bigint num-complex hashbrown serde" --target ${{ matrix.platform.rust-target }}
2020-09-19 15:27:06 +00:00
# Run tests again, but in abi3 mode
2020-12-17 08:51:00 +00:00
- if: matrix.python-version != 'pypy-3.6'
name: Test (abi3)
run: cargo test --no-default-features --features "abi3 macros num-bigint num-complex hashbrown serde" --target ${{ matrix.platform.rust-target }}
2020-12-15 13:57:09 +00:00
# Run tests again, for abi3-py36 (the minimal Python version)
2020-12-20 12:32:46 +00:00
- if: (matrix.python-version != 'pypy-3.6') && (matrix.python-version != '3.6')
2020-12-15 13:57:09 +00:00
name: Test (abi3-py36)
run: cargo test --no-default-features --features "abi3-py36 macros num-bigint num-complex hashbrown serde" --target ${{ matrix.platform.rust-target }}
2020-12-15 13:57:09 +00:00
- name: Test proc-macro code
2020-12-13 11:29:39 +00:00
run: cargo test --manifest-path=pyo3-macros-backend/Cargo.toml --target ${{ matrix.platform.rust-target }}
- name: Install python test dependencies
run: |
python -m pip install -U pip setuptools
pip install setuptools-rust pytest pytest-benchmark tox tox-venv
- name: Test example extension modules
shell: bash
run: |
for example_dir in examples/*; do
2020-11-21 01:40:29 +00:00
tox --discover $(which python) -c $example_dir -e py
done
2020-01-12 14:33:34 +00:00
env:
RUST_BACKTRACE: 1
2020-12-26 08:11:19 +00:00
RUSTFLAGS: "-D warnings"
# TODO: this is a hack to workaround compile_error! warnings about auto-initialize on PyPy
# Once cargo's `resolver = "2"` is stable (~ MSRV Rust 1.52), remove this.
PYO3_CI: 1
coverage:
needs: [fmt]
runs-on: ubuntu-latest
steps:
2020-08-16 13:36:15 +00:00
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
2020-08-16 13:36:15 +00:00
profile: minimal
- uses: actions-rs/cargo@v1
with:
command: test
args: --features "num-bigint num-complex hashbrown serde" --no-fail-fast
env:
2020-08-16 13:36:15 +00:00
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests"
RUSTDOCFLAGS: "-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests"
- uses: actions-rs/grcov@v0.1
id: coverage
- uses: codecov/codecov-action@v1
with:
file: ${{ steps.coverage.outputs.report }}