mirror of
https://github.com/ruvnet/RuVector.git
synced 2026-05-23 04:27:11 +00:00
Natural shard duration drifted to 155–165 min on ci/supply-chain-guards, hitting the 180-min cap and cancelling runs. Restoring headroom by bumping to 240 min. The right long-term fix is splitting heavy crates into a sibling shard, but this unblocks CI immediately. Co-Authored-By: claude-flow <ruv@ruv.net>
354 lines
13 KiB
YAML
354 lines
13 KiB
YAML
name: Workspace CI
|
||
|
||
on:
|
||
push:
|
||
branches: [main]
|
||
pull_request:
|
||
workflow_dispatch:
|
||
|
||
env:
|
||
CARGO_TERM_COLOR: always
|
||
RUST_BACKTRACE: 1
|
||
# Skip building unused proc-macro features in test bin link steps
|
||
CARGO_INCREMENTAL: 0
|
||
|
||
jobs:
|
||
fmt:
|
||
name: Rustfmt
|
||
runs-on: ubuntu-22.04
|
||
timeout-minutes: 30
|
||
continue-on-error: true
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Install Rust stable
|
||
uses: dtolnay/rust-toolchain@stable
|
||
with:
|
||
components: rustfmt
|
||
|
||
- name: Check formatting
|
||
run: cargo fmt --all -- --check
|
||
|
||
check:
|
||
name: Cargo check
|
||
runs-on: ubuntu-22.04
|
||
timeout-minutes: 30
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Install system dependencies
|
||
run: sudo apt-get update && sudo apt-get install -y libfontconfig1-dev
|
||
|
||
- name: Install Rust stable
|
||
uses: dtolnay/rust-toolchain@stable
|
||
|
||
- name: Cache Rust
|
||
uses: Swatinem/rust-cache@v2
|
||
|
||
- name: Cargo check (workspace)
|
||
run: cargo check --workspace --exclude ruvector-postgres
|
||
|
||
clippy:
|
||
name: Clippy
|
||
runs-on: ubuntu-22.04
|
||
timeout-minutes: 30
|
||
continue-on-error: true
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Install system dependencies
|
||
run: sudo apt-get update && sudo apt-get install -y libfontconfig1-dev
|
||
|
||
- name: Install Rust stable
|
||
uses: dtolnay/rust-toolchain@stable
|
||
with:
|
||
components: clippy
|
||
|
||
- name: Cache Rust
|
||
uses: Swatinem/rust-cache@v2
|
||
|
||
- name: Clippy (workspace)
|
||
run: cargo clippy --workspace --exclude ruvector-postgres --all-targets -- -W warnings
|
||
|
||
# The full workspace test suite exceeds the 30-minute timeout on a single
|
||
# runner. We split the work into parallel matrix jobs grouped by domain so
|
||
# each shard fits comfortably under the timeout, and use `cargo-nextest` for
|
||
# faster test discovery and execution.
|
||
test:
|
||
name: Tests (${{ matrix.name }})
|
||
runs-on: ubuntu-22.04
|
||
# `core-and-rest` is the catch-all shard and compiles ~50 crates; on a
|
||
# cold cache the build alone has hit ~90min, so headroom matters more
|
||
# than tight feedback for this job. Faster shards still finish in ~10–20m.
|
||
# Iter 231 — bumped 150→180. Historical successful runs landed at
|
||
# 2h 30m 16s (just under the old cap); two PR-413 runs (iter 228 +
|
||
# iter 230) both hit the cap and got cancelled mid-test. Excluding
|
||
# the iter-219 hailo crates from the catch-all (iter 230) was a
|
||
# necessary but not sufficient fix — the shard was already at the
|
||
# ragged edge. Iter 232+ — natural duration drifted to 155–165 min
|
||
# (ci/supply-chain-guards branch), hitting the 180-min cap. Bumped
|
||
# 180→240 to restore headroom. The right long-term fix is to split
|
||
# heavy crates out into a new sibling shard.
|
||
timeout-minutes: 240
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
include:
|
||
- name: vector-index
|
||
packages: >-
|
||
-p ruvector-rabitq
|
||
-p ruvector-rulake
|
||
-p ruvector-diskann
|
||
-p ruvector-graph
|
||
-p ruvector-gnn
|
||
-p ruvector-cnn
|
||
- name: rvagent
|
||
packages: >-
|
||
-p rvagent-a2a
|
||
-p rvagent-acp
|
||
-p rvagent-backends
|
||
-p rvagent-cli
|
||
-p rvagent-core
|
||
-p rvagent-mcp
|
||
-p rvagent-middleware
|
||
-p rvagent-subagents
|
||
-p rvagent-tools
|
||
-p rvagent-wasm
|
||
- name: ruvix
|
||
packages: >-
|
||
-p ruvix-aarch64
|
||
-p ruvix-bench
|
||
-p ruvix-boot
|
||
-p ruvix-cap
|
||
-p ruvix-demo
|
||
-p ruvix-drivers
|
||
-p ruvix-hal
|
||
-p ruvix-integration
|
||
-p ruvix-nucleus
|
||
-p ruvix-proof
|
||
-p ruvix-queue
|
||
-p ruvix-region
|
||
-p ruvix-sched
|
||
-p ruvix-shell
|
||
-p ruvix-types
|
||
-p ruvix-vecgraph
|
||
- name: ruqu-quantum
|
||
packages: >-
|
||
-p ruqu
|
||
-p ruqu-algorithms
|
||
-p ruqu-core
|
||
-p ruqu-exotic
|
||
-p ruqu-wasm
|
||
- name: ml-research-heavy
|
||
# Heaviest crates split into their own shard so ml-research
|
||
# doesn't exceed the 45-min timeout.
|
||
packages: >-
|
||
-p ruvector-attention
|
||
-p ruvector-mincut
|
||
-p ruvector-fpga-transformer
|
||
-p ruvector-graph-transformer
|
||
- name: ml-research-rest
|
||
packages: >-
|
||
-p ruvector-scipix
|
||
-p ruvector-sparse-inference
|
||
-p ruvector-sparsifier
|
||
-p ruvector-solver
|
||
-p ruvector-domain-expansion
|
||
-p ruvector-robotics
|
||
- name: core-and-rest-heavy
|
||
# Hoist the known-heavy long-tail crates out of core-and-rest
|
||
# so neither shard exceeds the 90-min timeout.
|
||
packages: >-
|
||
-p ruvllm
|
||
-p ruvllm-cli
|
||
-p ruvector-dag
|
||
-p ruvector-nervous-system
|
||
-p ruvector-math
|
||
-p ruvector-consciousness
|
||
-p prime-radiant
|
||
-p mcp-brain
|
||
-p ruvector-decompiler
|
||
- name: core-and-rest-wasm
|
||
# Iter 232 — split out the 29 *-wasm crates from core-and-rest
|
||
# because the catch-all shard had grown to 115 crates and was
|
||
# consistently missing the 180min cap (iter-228 + iter-230 +
|
||
# iter-231 all cancelled at the timeout boundary). The wasm
|
||
# crates are a natural sub-group: thin bindings on top of host
|
||
# crates, easy to compile + test in isolation.
|
||
packages: >-
|
||
-p neural-trader-wasm
|
||
-p ruvector-acorn-wasm
|
||
-p ruvector-attention-unified-wasm
|
||
-p ruvector-attention-wasm
|
||
-p ruvector-cnn-wasm
|
||
-p ruvector-consciousness-wasm
|
||
-p ruvector-dag-wasm
|
||
-p ruvector-decompiler-wasm
|
||
-p ruvector-delta-wasm
|
||
-p ruvector-domain-expansion-wasm
|
||
-p ruvector-economy-wasm
|
||
-p ruvector-exotic-wasm
|
||
-p ruvector-fpga-transformer-wasm
|
||
-p ruvector-gnn-wasm
|
||
-p ruvector-graph-transformer-wasm
|
||
-p ruvector-graph-wasm
|
||
-p ruvector-learning-wasm
|
||
-p ruvector-math-wasm
|
||
-p ruvector-mincut-gated-transformer-wasm
|
||
-p ruvector-mincut-wasm
|
||
-p ruvector-nervous-system-wasm
|
||
-p ruvector-rabitq-wasm
|
||
-p ruvector-router-wasm
|
||
-p ruvector-solver-wasm
|
||
-p ruvector-sparsifier-wasm
|
||
-p ruvector-tiny-dancer-wasm
|
||
-p ruvector-verified-wasm
|
||
-p ruvector-wasm
|
||
# Iter 233 — `ruvllm-wasm` excluded from native nextest:
|
||
# 11 of its 195 tests (sona_instant + workers::feature_detect)
|
||
# fail or SIGABRT on native because they're wasm-target
|
||
# specific (need wasm-bindgen-test). Surfaced by iter-232's
|
||
# split; previously masked by the iter-228..231 timeout
|
||
# cancellations of the megaShard. Tracking as workspace
|
||
# follow-up — fix is to gate the affected modules behind
|
||
# `#[cfg(target_arch = "wasm32")]` or migrate to
|
||
# wasm-bindgen-test runners.
|
||
- name: core-and-rest
|
||
# Everything else: core, delta, server/cluster, etc.
|
||
# Uses --workspace + --exclude to subtract the groups above so we
|
||
# don't have to enumerate ~100 crates by hand.
|
||
packages: >-
|
||
--workspace
|
||
--exclude ruvector-postgres
|
||
--exclude ruvector-decompiler
|
||
--exclude ruvllm
|
||
--exclude ruvllm-cli
|
||
--exclude ruvector-dag
|
||
--exclude ruvector-nervous-system
|
||
--exclude ruvector-math
|
||
--exclude ruvector-consciousness
|
||
--exclude prime-radiant
|
||
--exclude mcp-brain
|
||
--exclude ruvector-rabitq
|
||
--exclude ruvector-rulake
|
||
--exclude ruvector-diskann
|
||
--exclude ruvector-graph
|
||
--exclude ruvector-gnn
|
||
--exclude ruvector-cnn
|
||
--exclude rvagent-a2a
|
||
--exclude rvagent-acp
|
||
--exclude rvagent-backends
|
||
--exclude rvagent-cli
|
||
--exclude rvagent-core
|
||
--exclude rvagent-mcp
|
||
--exclude rvagent-middleware
|
||
--exclude rvagent-subagents
|
||
--exclude rvagent-tools
|
||
--exclude rvagent-wasm
|
||
--exclude ruvix-aarch64
|
||
--exclude ruvix-bench
|
||
--exclude ruvix-boot
|
||
--exclude ruvix-cap
|
||
--exclude ruvix-demo
|
||
--exclude ruvix-drivers
|
||
--exclude ruvix-hal
|
||
--exclude ruvix-integration
|
||
--exclude ruvix-nucleus
|
||
--exclude ruvix-proof
|
||
--exclude ruvix-queue
|
||
--exclude ruvix-region
|
||
--exclude ruvix-sched
|
||
--exclude ruvix-shell
|
||
--exclude ruvix-types
|
||
--exclude ruvix-vecgraph
|
||
--exclude ruqu
|
||
--exclude ruqu-algorithms
|
||
--exclude ruqu-core
|
||
--exclude ruqu-exotic
|
||
--exclude ruqu-wasm
|
||
--exclude ruvector-attention
|
||
--exclude ruvector-mincut
|
||
--exclude ruvector-scipix
|
||
--exclude ruvector-fpga-transformer
|
||
--exclude ruvector-sparse-inference
|
||
--exclude ruvector-sparsifier
|
||
--exclude ruvector-solver
|
||
--exclude ruvector-graph-transformer
|
||
--exclude ruvector-domain-expansion
|
||
--exclude ruvector-robotics
|
||
--exclude hailort-sys
|
||
--exclude ruvector-hailo
|
||
--exclude ruvector-mmwave
|
||
--exclude ruvector-hailo-cluster
|
||
--exclude neural-trader-wasm
|
||
--exclude ruvector-acorn-wasm
|
||
--exclude ruvector-attention-unified-wasm
|
||
--exclude ruvector-attention-wasm
|
||
--exclude ruvector-cnn-wasm
|
||
--exclude ruvector-consciousness-wasm
|
||
--exclude ruvector-dag-wasm
|
||
--exclude ruvector-decompiler-wasm
|
||
--exclude ruvector-delta-wasm
|
||
--exclude ruvector-domain-expansion-wasm
|
||
--exclude ruvector-economy-wasm
|
||
--exclude ruvector-exotic-wasm
|
||
--exclude ruvector-fpga-transformer-wasm
|
||
--exclude ruvector-gnn-wasm
|
||
--exclude ruvector-graph-transformer-wasm
|
||
--exclude ruvector-graph-wasm
|
||
--exclude ruvector-learning-wasm
|
||
--exclude ruvector-math-wasm
|
||
--exclude ruvector-mincut-gated-transformer-wasm
|
||
--exclude ruvector-mincut-wasm
|
||
--exclude ruvector-nervous-system-wasm
|
||
--exclude ruvector-rabitq-wasm
|
||
--exclude ruvector-router-wasm
|
||
--exclude ruvector-solver-wasm
|
||
--exclude ruvector-sparsifier-wasm
|
||
--exclude ruvector-tiny-dancer-wasm
|
||
--exclude ruvector-verified-wasm
|
||
--exclude ruvector-wasm
|
||
--exclude ruvllm-wasm
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Install system dependencies
|
||
run: sudo apt-get update && sudo apt-get install -y libfontconfig1-dev
|
||
|
||
- name: Install Rust stable
|
||
uses: dtolnay/rust-toolchain@stable
|
||
|
||
- name: Cache Rust
|
||
uses: Swatinem/rust-cache@v2
|
||
with:
|
||
key: test-${{ matrix.name }}
|
||
|
||
- name: Install cargo-nextest
|
||
uses: taiki-e/install-action@v2
|
||
with:
|
||
tool: cargo-nextest
|
||
|
||
- name: Run tests (${{ matrix.name }})
|
||
run: cargo nextest run --no-fail-fast ${{ matrix.packages }}
|
||
|
||
- name: Run doctests (${{ matrix.name }})
|
||
# nextest does not run doctests; do them in a separate step. Cheap
|
||
# because compilation is already cached from the nextest run.
|
||
run: cargo test --doc ${{ matrix.packages }}
|
||
|
||
audit:
|
||
name: Security audit
|
||
runs-on: ubuntu-22.04
|
||
timeout-minutes: 30
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Install cargo-audit
|
||
uses: taiki-e/install-action@v2
|
||
with:
|
||
tool: cargo-audit
|
||
|
||
- name: Run cargo audit
|
||
# Configuration (including the justified ignore list) lives in
|
||
# .cargo/audit.toml at the workspace root.
|
||
run: cargo audit
|