name: CI on: push: branches: - master pull_request: env: CARGO_TERM_COLOR: always jobs: fmt: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 - run: pip install black==19.10b0 - uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal components: rustfmt - 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 profile: minimal components: clippy - run: make clippy build: needs: [fmt] # don't wait for clippy as fails rarely and takes longer name: python${{ matrix.python-version }}-${{ matrix.platform.python-architecture }} ${{ matrix.platform.os }} ${{ matrix.msrv }} runs-on: ${{ matrix.platform.os }} strategy: fail-fast: false # If one platform fails, allow the rest to keep testing. matrix: rust: [stable] python-version: [3.6, 3.7, 3.8, 3.9, pypy3] 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: # See https://github.com/PyO3/pyo3/pull/1215 for why. - python-version: pypy3 platform: { os: "windows-latest" } include: # Test minimal supported Rust version - rust: 1.39.0 python-version: 3.9 platform: { os: "ubuntu-latest", python-architecture: "x64", rust-target: "x86_64-unknown-linux-gnu" } msrv: "MSRV" steps: - 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: toolchain: ${{ matrix.rust }} target: ${{ matrix.platform.rust-target }} profile: minimal default: true - if: matrix.platform.os == 'ubuntu-latest' name: Prepare LD_LIBRARY_PATH (Ubuntu only) run: echo LD_LIBRARY_PATH=${pythonLocation}/lib >> $GITHUB_ENV - name: Build without default features run: cargo build --no-default-features --verbose --target ${{ matrix.platform.rust-target }} - name: Build with default features run: cargo build --features "num-bigint num-complex" --verbose --target ${{ matrix.platform.rust-target }} # Run tests (except on PyPy, because no embedding API). - if: matrix.python-version != 'pypy3' name: Test run: cargo test --features "num-bigint num-complex" --target ${{ matrix.platform.rust-target }} # Run tests again, but in abi3 mode - if: matrix.python-version != 'pypy3' name: Test (abi3) run: cargo test --no-default-features --features "abi3,macros" --target ${{ matrix.platform.rust-target }} - name: Test proc-macro code run: cargo test --manifest-path=pyo3-derive-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 cd $example_dir tox -c "tox.ini" -e py cd - done env: RUST_BACKTRACE: 1 coverage: needs: [fmt] runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: toolchain: nightly override: true profile: minimal - uses: actions-rs/cargo@v1 with: command: test args: --features "num-bigint num-complex" --no-fail-fast env: 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 }}