[go: up one dir, main page]

pyo3 0.12.3

Bindings to Python interpreter
Documentation
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.5, 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 }}

      - 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 }}