Skip to content

Merge pull request #7 from cdeust/feat/mcp-registry-submission #31

Merge pull request #7 from cdeust/feat/mcp-registry-submission

Merge pull request #7 from cdeust/feat/mcp-registry-submission #31

Workflow file for this run

name: CI
# Runs on every push to main and every pull request. The Spike B' graph
# accuracy gate lives in tests/graph_accuracy.rs and is part of the standard
# `cargo test` invocation — if any structural EdgeKind F1 regresses below
# the locked floor (nodes ≥ 0.96, Defines ≥ 0.96 as of iteration 5), this
# job fails. As Bugs #11 and #13 land the floor tightens automatically.
on:
push:
branches: [main]
pull_request:
branches: [main]
# Cancel in-flight runs when a new commit lands on the same ref.
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
test:
name: cargo test (graph accuracy gate)
runs-on: ubuntu-latest
# A cold build (no cargo cache) compiles tree-sitter + tantivy + lbug
# from scratch — measured ~19 min just to reach the graph-accuracy gate
# on run 26515840381, leaving too little of a 25 min budget to also
# compile + run the full suite. Worse, a timeout is a *cancellation*,
# and actions/cache skips its save step when cancelled — so every
# timed-out run failed to warm the cache, guaranteeing the next run was
# cold too (a self-perpetuating deadlock). 60 min lets one cold build
# finish and populate the cache; warm-cache runs complete in ~6 min.
timeout-minutes: 60
# zstd-sys (pulled transitively via tantivy → tantivy-columnar →
# tantivy-sstable → zstd → zstd-safe → zstd-sys) and lbug both
# statically link libzstd, producing duplicate symbols on Linux
# (rust-lld is strict about this; macOS ld64 silently dedupes,
# which is why release.yml only needed this on its ubuntu matrix
# legs). ZSTD_SYS_USE_PKG_CONFIG=1 makes zstd-sys link the system
# libzstd dynamically instead of compiling its own static copy,
# eliminating the conflict. See the duplicate-symbol failure on
# run 26411205432 for the unfixed signature.
env:
ZSTD_SYS_USE_PKG_CONFIG: "1"
steps:
- uses: actions/checkout@v4
- name: Install Linux build deps
run: |
sudo apt-get update -qq
sudo apt-get install -y --no-install-recommends \
libzstd-dev pkg-config cmake
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
# Cache the cargo target dir keyed on Cargo.lock. Saves ~minutes per
# run because tree-sitter + tantivy + lbug are heavy to recompile.
#
# The "zstd-pkgconfig-v1" segment is part of the key on purpose:
# the previous build environment baked a static libzstd.a into
# target/ that collides with lbug's vendored zstd at link time
# (see job-level env comment). When that env changes, the cache
# must NOT be restored — otherwise the conflicting artifact comes
# back and the link error reappears. Bump this segment whenever
# the build env changes in a way that touches target/.
- name: Cache cargo build
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-zstd-pkgconfig-v1-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-zstd-pkgconfig-v1-
# The graph_accuracy test is the Spike B' gate. Its asserts ratchet
# forward as fixes land — current floor is nodes/Defines ≥ 0.96 on
# tests/fixtures/graph_accuracy/pure-shared/text.py.
- name: Run graph accuracy gate
run: cargo test --test graph_accuracy -- --nocapture
# Full suite (stage3a-d integrations, etc.). Kept separate so a
# graph-accuracy regression fails the build with a clear signal even
# if other tests are broken for unrelated reasons.
- name: Run full test suite
run: cargo test