Skip to content

Commit 43ba958

Browse files
matte1782claude
andcommitted
fix(ci): split Miri into parallel jobs to fix 25m timeout
The single Miri job ran core + sparse sequentially, consistently exceeding the 25-minute timeout. Split into miri-core and miri-sparse jobs that run in parallel with 20m timeout each. Zero test coverage regression — identical skip filters, env vars, and feature flags preserved. Hostile review: APPROVED (0C/0M/1m, m1 fixed) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 4ab2575 commit 43ba958

1 file changed

Lines changed: 24 additions & 5 deletions

File tree

.github/workflows/ci.yml

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# W18.2: CI Hardening — Documented timeouts and environment variables
44
# W45.6: CI Optimization — Added Rust dependency caching, Miri skip filters
55
# W46.2: Expanded Miri skips — hybrid::, quantization::product::, hnsw:: (all pure-safe, no UB risk)
6+
# W48.0: Split Miri into parallel jobs (core + sparse) to fix 25m timeout
67
#
78
# Local Simulation:
89
# cargo xtask ci-check
@@ -17,7 +18,8 @@
1718
# lint: 5 minutes (cargo fmt + clippy)
1819
# wasm-check: 5 minutes (cargo check --target wasm32-unknown-unknown)
1920
# fuzz-check: 5 minutes (cargo +nightly check)
20-
# miri: 25 minutes (cargo +nightly miri test, focused on unsafe-adjacent code only)
21+
# miri-core: 20 minutes (cargo +nightly miri test, core features)
22+
# miri-sparse: 20 minutes (cargo +nightly miri test, sparse feature)
2123

2224
name: EdgeVec CI
2325

@@ -113,7 +115,7 @@ jobs:
113115
- name: Check ALL Fuzz Targets Compile
114116
run: cargo +nightly check --manifest-path fuzz/Cargo.toml --all-targets
115117

116-
# Job 5: Miri Safety Audit (UB detection)
118+
# Job 5a: Miri Safety Audit — Core (UB detection)
117119
# Focuses ONLY on unsafe-adjacent code: SIMD, persistence, storage binary ops
118120
# Skipped modules (pure-safe, no unsafe, or too slow under Miri):
119121
# - filter::, metadata:: — zero unsafe code
@@ -122,10 +124,10 @@ jobs:
122124
# - hnsw:: — graph search is safe-only, slow under Miri instrumentation
123125
# - wasm — not available in Miri
124126
# - test_bq_vs_f32_recall_comparison — slow integration test
125-
miri:
126-
name: Miri Safety Check
127+
miri-core:
128+
name: Miri Safety Check (core)
127129
runs-on: ubuntu-latest
128-
timeout-minutes: 25
130+
timeout-minutes: 20
129131
steps:
130132
- uses: actions/checkout@v4
131133

@@ -153,6 +155,23 @@ jobs:
153155
MIRIFLAGS: "-Zmiri-disable-isolation -Zmiri-symbolic-alignment-check -Zmiri-permissive-provenance"
154156
PROPTEST_CASES: "4"
155157

158+
# Job 5b: Miri Safety Audit — Sparse feature (runs in parallel with 5a)
159+
# Skip rationale: see Job 5a comment block above
160+
miri-sparse:
161+
name: Miri Safety Check (sparse)
162+
runs-on: ubuntu-latest
163+
timeout-minutes: 20
164+
steps:
165+
- uses: actions/checkout@v4
166+
167+
- name: Install Nightly Rust with Miri
168+
uses: dtolnay/rust-toolchain@nightly
169+
with:
170+
components: miri
171+
172+
- name: Cache Rust dependencies
173+
uses: Swatinem/rust-cache@v2
174+
156175
- name: Run Miri (sparse feature)
157176
run: |
158177
cargo +nightly miri test --lib --no-default-features --features sparse -- \

0 commit comments

Comments
 (0)