ci: fix msrv job #37
This file contains 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.10" | |
- 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", | |
"pypy-3.9", | |
] | |
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", | |
}, | |
{ | |
os: "windows-latest", | |
python-architecture: "x86", | |
rust-target: "i686-pc-windows-msvc", | |
}, | |
] | |
exclude: | |
# PyPy doesn't release 32-bit Windows builds any more | |
- python-version: pypy-3.9 | |
platform: { os: "windows-latest", python-architecture: "x86" } | |
include: | |
# Test minimal supported Rust version | |
- rust: 1.63.0 | |
python-version: "3.10" | |
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.12" | |
platform: | |
{ | |
os: "ubuntu-latest", | |
python-architecture: "x64", | |
rust-target: "x86_64-unknown-linux-gnu", | |
} | |
msrv: "nightly" | |
extra_features: "nightly" | |
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: Unify MSRV dependencies | |
run: | | |
import toml | |
cargo_toml = toml.load("Cargo.toml") | |
cargo_toml["dependencies"]["tokio"]["version"] = "1.38.1" | |
with open("Cargo.toml", "w") as f: | |
toml.dump(cargo_toml, f) | |
shell: python | |
- if: ${{ matrix.msrv == 'MSRV' }} | |
name: Generate lockfile | |
run: cargo generate-lockfile | |
- if: ${{ matrix.msrv == 'MSRV' }} | |
name: Unify dependencies to MSRV-compatible versions | |
run: | | |
import toml | |
import subprocess | |
cargo_lock = toml.load("Cargo.lock") | |
for pkg in cargo_lock["package"]: | |
pkg_id = pkg["name"] + ":" + pkg["version"] | |
if pkg["name"] == "tokio" and pkg["version"] != "1.38.1": | |
subprocess.run(["cargo", "update", "--package", pkg_id, "--precise", "1.38.1"], check=True) | |
- 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 | |
- if: ${{ matrix.platform.os != 'windows-latest' && !startsWith(matrix.python-version, 'pypy') }} | |
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 | |
with: | |
toolchain: nightly | |
override: true | |
- name: Install pyo3-asyncio test dependencies | |
run: | | |
python -m pip install -U uvloop | |
- uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
args: --all-features | |
env: | |
CARGO_INCREMENTAL: 0 | |
RUSTFLAGS: "-Zprofile -Ccodegen-units=1 -Cllvm-args=--inline-threshold=0 -Clink-dead-code -Coverflow-checks=off" | |
RUSTDOCFLAGS: "-Zprofile -Ccodegen-units=1 -Cllvm-args=--inline-threshold=0 -Clink-dead-code -Coverflow-checks=off" | |
- uses: actions-rs/[email protected] | |
id: coverage | |
- uses: codecov/codecov-action@v4 | |
with: | |
file: ${{ steps.coverage.outputs.report }} |