build(deps-dev): update mypy requirement from >=2.0.0 to >=2.1.0 in /python #29
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: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| CARGO_TERM_COLOR: always | |
| RUSTFLAGS: -D warnings | |
| jobs: | |
| markdown-format: | |
| name: prettier markdown | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: oven-sh/setup-bun@v2 | |
| - run: bunx prettier --check '**/*.md' | |
| gpudirect-check: | |
| name: cargo check (rdma + gpudirect) | |
| runs-on: ubuntu-latest | |
| container: | |
| image: nvidia/cuda:12.5.0-devel-ubuntu22.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install build deps | |
| run: | | |
| apt-get update | |
| apt-get install -y --no-install-recommends \ | |
| curl build-essential pkg-config clang \ | |
| libibverbs-dev libnuma-dev ca-certificates \ | |
| python3 python3-dev | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: gpudirect-check | |
| - run: cargo check -p aether-stream --tests --features "rdma gpudirect" | |
| - run: cargo check -p aethergraph-py --features gpudirect | |
| rust: | |
| name: rust ${{ matrix.label }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: macos-latest | |
| label: macos-stable-default | |
| features: "" | |
| run_rdma: false | |
| - os: ubuntu-latest | |
| label: ubuntu-stable-default | |
| features: "" | |
| run_rdma: false | |
| - os: ubuntu-latest | |
| label: ubuntu-stable-rdma | |
| features: "rdma" | |
| run_rdma: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: clippy, rustfmt | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: ${{ matrix.label }} | |
| - name: Install ubuntu system deps | |
| if: matrix.os == 'ubuntu-latest' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends \ | |
| clang libbpf-dev pkg-config libibverbs-dev libnuma-dev | |
| - name: rustfmt | |
| run: cargo fmt --all -- --check | |
| - name: clippy (no features) | |
| run: cargo clippy --workspace --all-targets --no-deps -- -D warnings | |
| - name: clippy (with features) | |
| if: matrix.features != '' | |
| run: | | |
| cargo clippy --workspace --all-targets --no-deps \ | |
| --features "${{ matrix.features }}" -- -D warnings | |
| - name: xdp_bpf compile check | |
| if: matrix.os == 'ubuntu-latest' | |
| run: cargo check -p aether-stream --tests --features xdp_bpf | |
| - name: cargo test --lib | |
| run: | | |
| if [ -n "${{ matrix.features }}" ]; then | |
| cargo test --workspace --lib --features "${{ matrix.features }}" | |
| else | |
| cargo test --workspace --lib | |
| fi | |
| - name: cargo test --tests | |
| run: | | |
| if [ -n "${{ matrix.features }}" ]; then | |
| cargo test --workspace --tests --features "${{ matrix.features }}" | |
| else | |
| cargo test --workspace --tests | |
| fi | |
| - name: cargo check --benches | |
| run: cargo check --workspace --benches | |
| - name: bench smoke | |
| if: matrix.label == 'ubuntu-stable-default' | |
| run: cargo bench --workspace --no-fail-fast -- --quick --noplot | |
| - name: Coverage summary | |
| if: always() | |
| run: | | |
| features="${{ matrix.features }}" | |
| [ -z "$features" ] && features="(none)" | |
| ts=$(find target/debug/deps -maxdepth 1 -type f \ | |
| -name '*-*' \ | |
| ! -name '*.d' \ | |
| ! -name '*.rlib' \ | |
| ! -name '*.rmeta' \ | |
| 2>/dev/null | wc -l | tr -d ' ') | |
| { | |
| echo "## ${{ matrix.label }}" | |
| echo "" | |
| echo "| metric | value |" | |
| echo "|---|---|" | |
| echo "| os | ${{ matrix.os }} |" | |
| echo "| features | $features |" | |
| echo "| compiled test binaries | $ts |" | |
| } >> "$GITHUB_STEP_SUMMARY" | |
| miri: | |
| name: miri unsafe-code interpreter | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@nightly | |
| with: | |
| components: miri | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: miri | |
| - run: cargo +nightly miri test -p aether-graph --test miri_smoke | |
| env: | |
| MIRIFLAGS: -Zmiri-strict-provenance | |
| - name: Summary | |
| if: always() | |
| run: | | |
| { | |
| echo "## miri" | |
| echo "" | |
| echo "Ran \`aether-graph::tests::miri_smoke\` under \`cargo miri\` with" | |
| echo "\`-Zmiri-strict-provenance\`. Covers Arena, Chunk, CTree, and" | |
| echo "\`DynamicGraph::Writer\` paths end-to-end." | |
| } >> "$GITHUB_STEP_SUMMARY" | |
| wal: | |
| name: wal recovery | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: wal | |
| - run: cargo test -p aether-graph --features wal | |
| - name: Summary | |
| if: always() | |
| run: | | |
| { | |
| echo "## wal" | |
| echo "" | |
| echo "Round-trip + crash-recovery tests for the append-only WAL." | |
| } >> "$GITHUB_STEP_SUMMARY" | |
| loom: | |
| name: loom model checker | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: loom | |
| - run: cargo test -p aether-graph --features loom --test loom_writer_guard | |
| - name: Summary | |
| if: always() | |
| run: | | |
| { | |
| echo "## loom" | |
| echo "" | |
| echo "Exhaustive interleaving check of the writer-guard CAS." | |
| } >> "$GITHUB_STEP_SUMMARY" | |
| supply-chain: | |
| name: cargo-deny + audit | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: supply-chain | |
| - name: Install cargo-deny + cargo-audit | |
| run: cargo install --locked cargo-deny cargo-audit | |
| - name: cargo deny check | |
| run: cargo deny check | |
| - name: cargo audit | |
| # Mirror `[advisories.ignore]` in deny.toml — cargo-audit has no local config. | |
| run: cargo audit --ignore RUSTSEC-2024-0436 | |
| fuzz: | |
| name: cargo-fuzz short budget | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 8 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@nightly | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: fuzz | |
| - run: cargo install cargo-fuzz --locked | |
| - name: Verify corpus is reproducible | |
| working-directory: fuzz | |
| run: cargo test --test seed_determinism | |
| - name: Regenerate fixed-seed corpus | |
| working-directory: fuzz | |
| run: cargo run --bin seed_corpus | |
| - name: ctree_insert_sequences (60s) | |
| working-directory: fuzz | |
| run: cargo +nightly fuzz run ctree_insert_sequences -- -max_total_time=60 | |
| - name: csr_loader_bytes (60s) | |
| working-directory: fuzz | |
| run: cargo +nightly fuzz run csr_loader_bytes -- -max_total_time=60 | |
| python: | |
| name: python ${{ matrix.os }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: astral-sh/setup-uv@v3 | |
| with: | |
| enable-cache: true | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: python-${{ matrix.os }} | |
| - name: Sync test deps | |
| # uv 0.11+ build isolation drops cargo off PATH; install deps without | |
| # the project, then build the wheel without re-syncing. | |
| working-directory: python | |
| run: uv sync --group test --group dev --no-install-project | |
| - name: Build extension | |
| working-directory: python | |
| run: uv run --no-sync maturin develop --release | |
| - name: Run pytest | |
| working-directory: python | |
| run: uv run pytest tests/ -v --tb=short | |
| rdma-hardware: | |
| name: rdma hardware (self-hosted) | |
| # TODO(infra): wire to a self-hosted Linux runner with rdma_rxe loaded | |
| # and `aether-test-rdma` label. Until then this job is opt-in via | |
| # workflow_dispatch and skips on PR. | |
| if: | | |
| github.event_name == 'workflow_dispatch' || | |
| contains(github.event.head_commit.message, '[rdma]') | |
| runs-on: [self-hosted, linux, aether-test-rdma] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: rdma-hw | |
| - name: Verify rxe module | |
| run: ip link show rxe0 || (sudo modprobe rdma_rxe && sudo rdma link add rxe0 type rxe netdev lo) | |
| - name: Run gated RDMA tests | |
| run: | | |
| cargo test -p aether-stream --features rdma --tests -- --ignored | |
| env: | |
| AETHER_SKIP_RDMA: "" | |
| summary: | |
| name: coverage summary | |
| runs-on: ubuntu-latest | |
| needs: [markdown-format, gpudirect-check, rust, miri, loom, wal, supply-chain, python] | |
| if: always() | |
| steps: | |
| - name: Render summary | |
| run: | | |
| { | |
| echo "# AetherGraph CI coverage" | |
| echo "" | |
| echo "| job | platform | features | result |" | |
| echo "|---|---|---|---|" | |
| echo "| markdown-format | Linux x86_64 | prettier | ${{ needs.markdown-format.result }} |" | |
| echo "| gpudirect-check | Linux x86_64 | rdma + gpudirect (cargo check) | ${{ needs.gpudirect-check.result }} |" | |
| echo "| rust macos-stable-default | macOS arm64 | (none) | ${{ needs.rust.result }} |" | |
| echo "| rust ubuntu-stable-default | Linux x86_64 | (none) | ${{ needs.rust.result }} |" | |
| echo "| rust ubuntu-stable-rdma | Linux x86_64 | rdma | ${{ needs.rust.result }} |" | |
| echo "| miri | Linux x86_64 | nightly + miri | ${{ needs.miri.result }} |" | |
| echo "| loom | Linux x86_64 | loom feature | ${{ needs.loom.result }} |" | |
| echo "| wal | Linux x86_64 | wal feature | ${{ needs.wal.result }} |" | |
| echo "| python ubuntu | Linux x86_64 | test group | ${{ needs.python.result }} |" | |
| echo "| python macos | macOS arm64 | test group | ${{ needs.python.result }} |" | |
| echo "" | |
| echo "Hardware-gated tests (SoftRoCE micro-bench, SRD loopback," | |
| echo "billion-node scale) run only on the self-hosted \`rdma-hardware\`" | |
| echo "job (opt-in via \`[rdma]\` in commit message or workflow_dispatch)." | |
| } >> "$GITHUB_STEP_SUMMARY" | |
| # TODO(bench): criterion job that publishes flamegraphs + numbers to | |
| # gh-pages for side-by-side comparison vs PyG / DGL. Skeleton lives in | |
| # `crates/aethergraph-core/benches/`; the missing piece is a runner pinned | |
| # to a quiet machine class so benchmark noise stays comparable across runs. |