ci: test 3.14, configure trusted publishing #111
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| branches: | |
| - main | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| fmt: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.13" | |
| - run: pip install black==24.10.0 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| toolchain: stable | |
| 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@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| toolchain: stable | |
| 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.9", | |
| "3.10", | |
| "3.11", | |
| "3.12", | |
| "3.13", | |
| "3.13t", | |
| "3.14-dev", | |
| "3.14t-dev", | |
| "pypy-3.11", | |
| ] | |
| platform: | |
| [ | |
| { | |
| os: "macos-latest", | |
| python-architecture: "arm64", | |
| rust-target: "aarch64-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", | |
| }, | |
| ] | |
| include: | |
| # Test minimal supported Rust version | |
| - rust: 1.63.0 | |
| python-version: "3.13" | |
| platform: | |
| { | |
| os: "ubuntu-latest", | |
| python-architecture: "x64", | |
| rust-target: "x86_64-unknown-linux-gnu", | |
| } | |
| msrv: "MSRV" | |
| # Test the `nightly` feature | |
| - rust: nightly | |
| python-version: "3.13" | |
| platform: | |
| { | |
| os: "ubuntu-latest", | |
| python-architecture: "x64", | |
| rust-target: "x86_64-unknown-linux-gnu", | |
| } | |
| msrv: "nightly" | |
| extra_features: "nightly" | |
| # Test 32-bit windows just on latest Python | |
| - rust: stable | |
| python-version: "3.13" | |
| platform: | |
| { | |
| os: "windows-latest", | |
| python-architecture: "x86", | |
| rust-target: "i686-pc-windows-msvc", | |
| } | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| architecture: ${{ matrix.platform.python-architecture }} | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| toolchain: ${{ matrix.rust }} | |
| target: ${{ matrix.platform.rust-target }} | |
| - if: ${{ matrix.msrv == 'MSRV' }} | |
| name: Set MSRV dependencies | |
| run: | | |
| cargo add tokio@=1.38.1 | |
| cargo update -p once_cell --precise 1.20.3 | |
| - name: Build (no features) | |
| run: cargo build --no-default-features --verbose --target ${{ matrix.platform.rust-target }} | |
| - name: Build | |
| run: cargo build --features=${{env.features}} --verbose --target ${{ matrix.platform.rust-target }} | |
| # uvloop doesn't compile under Windows and PyPy, nor for free-threaded Python | |
| - if: ${{ matrix.platform.os != 'windows-latest' && !startsWith(matrix.python-version, 'pypy') && !endsWith(matrix.python-version, 't') }} | |
| name: Install pyo3-asyncio test dependencies | |
| run: | | |
| python -m pip install -U uvloop | |
| - if: ${{ matrix.msrv != 'MSRV' && !startsWith(matrix.python-version, 'pypy') }} | |
| name: Test | |
| run: cargo test --all-features --target ${{ matrix.platform.rust-target }} | |
| - if: ${{ matrix.msrv == 'MSRV' && !startsWith(matrix.python-version, 'pypy') }} | |
| name: Test (MSRV, --no-default-features) | |
| run: cargo test --no-default-features --features tokio-runtime,async-std-runtime,attributes,unstable-streams --target ${{ matrix.platform.rust-target }} | |
| env: | |
| RUST_BACKTRACE: 1 | |
| RUSTFLAGS: "-D warnings" | |
| coverage: | |
| needs: [fmt] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: taiki-e/install-action@cargo-llvm-cov | |
| - name: Install pyo3-asyncio test dependencies | |
| run: python -m pip install -U uvloop | |
| - run: cargo llvm-cov --all-features --codecov --output-path coverage.json | |
| - uses: codecov/codecov-action@v5 | |
| with: | |
| files: coverage.json |