88env :
99 CARGO_TERM_COLOR : always
1010 RUST_BACKTRACE : 1
11+ # Skip building unused proc-macro features in test bin link steps
12+ CARGO_INCREMENTAL : 0
1113
1214jobs :
1315 fmt :
@@ -67,10 +69,158 @@ jobs:
6769 - name : Clippy (workspace)
6870 run : cargo clippy --workspace --exclude ruvector-postgres --all-targets -- -W warnings
6971
72+ # The full workspace test suite exceeds the 30-minute timeout on a single
73+ # runner. We split the work into parallel matrix jobs grouped by domain so
74+ # each shard fits comfortably under the timeout, and use `cargo-nextest` for
75+ # faster test discovery and execution.
7076 test :
71- name : Tests
77+ name : Tests (${{ matrix.name }})
7278 runs-on : ubuntu-latest
73- timeout-minutes : 30
79+ # `core-and-rest` is the catch-all shard and compiles ~50 crates; on a
80+ # cold cache the build alone has hit ~90min, so headroom matters more
81+ # than tight feedback for this job. Faster shards still finish in ~10–20m.
82+ timeout-minutes : 150
83+ strategy :
84+ fail-fast : false
85+ matrix :
86+ include :
87+ - name : vector-index
88+ packages : >-
89+ -p ruvector-rabitq
90+ -p ruvector-rulake
91+ -p ruvector-diskann
92+ -p ruvector-graph
93+ -p ruvector-gnn
94+ -p ruvector-cnn
95+ - name : rvagent
96+ packages : >-
97+ -p rvagent-a2a
98+ -p rvagent-acp
99+ -p rvagent-backends
100+ -p rvagent-cli
101+ -p rvagent-core
102+ -p rvagent-mcp
103+ -p rvagent-middleware
104+ -p rvagent-subagents
105+ -p rvagent-tools
106+ -p rvagent-wasm
107+ - name : ruvix
108+ packages : >-
109+ -p ruvix-aarch64
110+ -p ruvix-bench
111+ -p ruvix-boot
112+ -p ruvix-cap
113+ -p ruvix-demo
114+ -p ruvix-drivers
115+ -p ruvix-hal
116+ -p ruvix-integration
117+ -p ruvix-nucleus
118+ -p ruvix-proof
119+ -p ruvix-queue
120+ -p ruvix-region
121+ -p ruvix-sched
122+ -p ruvix-shell
123+ -p ruvix-types
124+ -p ruvix-vecgraph
125+ - name : ruqu-quantum
126+ packages : >-
127+ -p ruqu
128+ -p ruqu-algorithms
129+ -p ruqu-core
130+ -p ruqu-exotic
131+ -p ruqu-wasm
132+ - name : ml-research-heavy
133+ # Heaviest crates split into their own shard so ml-research
134+ # doesn't exceed the 45-min timeout.
135+ packages : >-
136+ -p ruvector-attention
137+ -p ruvector-mincut
138+ -p ruvector-fpga-transformer
139+ -p ruvector-graph-transformer
140+ - name : ml-research-rest
141+ packages : >-
142+ -p ruvector-scipix
143+ -p ruvector-sparse-inference
144+ -p ruvector-sparsifier
145+ -p ruvector-solver
146+ -p ruvector-domain-expansion
147+ -p ruvector-robotics
148+ - name : core-and-rest-heavy
149+ # Hoist the known-heavy long-tail crates out of core-and-rest
150+ # so neither shard exceeds the 90-min timeout.
151+ packages : >-
152+ -p ruvllm
153+ -p ruvllm-cli
154+ -p ruvector-dag
155+ -p ruvector-nervous-system
156+ -p ruvector-math
157+ -p ruvector-consciousness
158+ -p prime-radiant
159+ -p mcp-brain
160+ -p ruvector-decompiler
161+ - name : core-and-rest
162+ # Everything else: core, delta, server/cluster, etc.
163+ # Uses --workspace + --exclude to subtract the groups above so we
164+ # don't have to enumerate ~100 crates by hand.
165+ packages : >-
166+ --workspace
167+ --exclude ruvector-postgres
168+ --exclude ruvector-decompiler
169+ --exclude ruvllm
170+ --exclude ruvllm-cli
171+ --exclude ruvector-dag
172+ --exclude ruvector-nervous-system
173+ --exclude ruvector-math
174+ --exclude ruvector-consciousness
175+ --exclude prime-radiant
176+ --exclude mcp-brain
177+ --exclude ruvector-rabitq
178+ --exclude ruvector-rulake
179+ --exclude ruvector-diskann
180+ --exclude ruvector-graph
181+ --exclude ruvector-gnn
182+ --exclude ruvector-cnn
183+ --exclude rvagent-a2a
184+ --exclude rvagent-acp
185+ --exclude rvagent-backends
186+ --exclude rvagent-cli
187+ --exclude rvagent-core
188+ --exclude rvagent-mcp
189+ --exclude rvagent-middleware
190+ --exclude rvagent-subagents
191+ --exclude rvagent-tools
192+ --exclude rvagent-wasm
193+ --exclude ruvix-aarch64
194+ --exclude ruvix-bench
195+ --exclude ruvix-boot
196+ --exclude ruvix-cap
197+ --exclude ruvix-demo
198+ --exclude ruvix-drivers
199+ --exclude ruvix-hal
200+ --exclude ruvix-integration
201+ --exclude ruvix-nucleus
202+ --exclude ruvix-proof
203+ --exclude ruvix-queue
204+ --exclude ruvix-region
205+ --exclude ruvix-sched
206+ --exclude ruvix-shell
207+ --exclude ruvix-types
208+ --exclude ruvix-vecgraph
209+ --exclude ruqu
210+ --exclude ruqu-algorithms
211+ --exclude ruqu-core
212+ --exclude ruqu-exotic
213+ --exclude ruqu-wasm
214+ --exclude ruvector-attention
215+ --exclude ruvector-mincut
216+ --exclude ruvector-scipix
217+ --exclude ruvector-fpga-transformer
218+ --exclude ruvector-sparse-inference
219+ --exclude ruvector-sparsifier
220+ --exclude ruvector-solver
221+ --exclude ruvector-graph-transformer
222+ --exclude ruvector-domain-expansion
223+ --exclude ruvector-robotics
74224 steps :
75225 - uses : actions/checkout@v4
76226
@@ -82,20 +232,35 @@ jobs:
82232
83233 - name : Cache Rust
84234 uses : Swatinem/rust-cache@v2
235+ with :
236+ key : test-${{ matrix.name }}
237+
238+ - name : Install cargo-nextest
239+ uses : taiki-e/install-action@v2
240+ with :
241+ tool : cargo-nextest
85242
86- - name : Run tests (workspace)
87- run : cargo test --workspace --exclude ruvector-postgres --exclude ruvector-decompiler
243+ - name : Run tests (${{ matrix.name }})
244+ run : cargo nextest run --no-fail-fast ${{ matrix.packages }}
245+
246+ - name : Run doctests (${{ matrix.name }})
247+ # nextest does not run doctests; do them in a separate step. Cheap
248+ # because compilation is already cached from the nextest run.
249+ run : cargo test --doc ${{ matrix.packages }}
88250
89251 audit :
90252 name : Security audit
91253 runs-on : ubuntu-latest
92254 timeout-minutes : 30
93- continue-on-error : true
94255 steps :
95256 - uses : actions/checkout@v4
96257
97258 - name : Install cargo-audit
98- run : cargo install cargo-audit --locked
259+ uses : taiki-e/install-action@v2
260+ with :
261+ tool : cargo-audit
99262
100263 - name : Run cargo audit
264+ # Configuration (including the justified ignore list) lives in
265+ # .cargo/audit.toml at the workspace root.
101266 run : cargo audit
0 commit comments