Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 10 additions & 11 deletions .github/workflows/gq-logic-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -175,19 +175,26 @@ jobs:
save-if: ${{ github.ref == 'refs/heads/main' }}
cache-on-failure: true

# Every cargo invocation of this job selects the same three packages,
# so the engine graph resolves one feature set and builds once; a
# narrower selection rebuilds every crate whose features differ (the
# cache rule in docs/dev/ci.md). The seam guard's crate declares no
# workspace crate, so it adds no engine build.
- name: Test unavailable DST runtime refusal
if: needs.classify_changes.outputs.run_gqt == 'true' && matrix.mode == 'ordinary'
# The flagless build shape this test exists for: an env RUSTFLAGS,
# empty included, replaces the workspace `[build] rustflags`.
env:
RUSTFLAGS: ""
run: cargo test -p omnigraph-gqt --locked --timings --lib --test runner_dispatch -- --nocapture
run: cargo test -p omnigraph-gqt -p omnigraph-gqt-core -p omnigraph-bench --locked --timings --test runner_dispatch -- --nocapture

- name: Test ordinary GQT core execution
# The benchmark units include the fixture parity test, which reads a
# corpus case, so it must run when a cases-only diff skips `Test Workspace`.
- name: Test GQT, GQT core and benchmark units
if: needs.classify_changes.outputs.run_gqt == 'true' && matrix.mode == 'ordinary'
env:
RUSTFLAGS: ""
run: cargo test -p omnigraph-gqt-core --locked --timings --lib -- --nocapture
run: cargo test -p omnigraph-gqt -p omnigraph-gqt-core -p omnigraph-bench --locked --timings --lib
Comment thread
ragnorc marked this conversation as resolved.

# A case's `at:` name arms a seam in the seam guard, so a cases-only
# diff can change its verdict while `Test Workspace` is skipped.
Expand All @@ -197,14 +204,6 @@ jobs:
RUSTFLAGS: ""
run: cargo test -p omnigraph-seams --locked --timings --test failpoint_names_guard

# This parity test reads a corpus case, so it must run when a
# cases-only diff skips `Test Workspace`.
- name: Test benchmark fixture parity with the GQT corpus
if: needs.classify_changes.outputs.run_gqt == 'true' && matrix.mode == 'ordinary'
env:
RUSTFLAGS: ""
run: cargo test -p omnigraph-bench --locked --timings --lib branch_merge::tests::generated_dataset_matches_the_legacy_fixture_and_reversible_history -- --exact --nocapture

# The workspace .cargo/config.toml enables the seeded Tokio runtime
# from any directory; these steps run from the repo root.
- name: Run complete GQ logic tests with DST
Expand Down
23 changes: 14 additions & 9 deletions docs/dev/ci.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ all under `GQ Logic Tests`, whose `dst-clippy` job compiles the crate so
case arming a seam turns the guard red where the PR can see it. The fixture
parity test in `crates/omnigraph-bench/src/branch_merge.rs` also reads
`generated_branch_merge_dataset.gqt` from the corpus. `GQT (ordinary)` runs
that exact test on `run_gqt`, including cases-only changes, while
`Test Workspace` covers it on engine input. No crate reads a deployment
it with the other benchmark unit tests on `run_gqt`, including cases-only
changes, while `Test Workspace` covers it on engine input. No crate reads a deployment
file. `scripts/check-change-classes.py` keeps the
literal-spelling half of this true: it replays the classifier over fixture
diffs and fails when a string literal in a Rust or TOML file under `crates/`
Expand Down Expand Up @@ -152,13 +152,18 @@ Current-version live schema and policy deployment remains required by `Test Work

`GQ Logic Tests` (`gq-logic-tests.yml`) owns the complete `.gqt` corpus as a
required context aggregating three qualification jobs. `GQT (ordinary)` checks
unit tests and unavailable-DST refusal under an empty `RUSTFLAGS`, then runs
the seam guard (`crates/omnigraph-seams/tests/failpoint_names_guard.rs`) in
the same flagless shape; the guard is a source walk whose crate declares no
workspace crate (its dev-dependencies are `serde_yaml`, `syn`, `tempfile` and
`toml`), so
it adds no second engine build. The same ordinary job runs the benchmark
fixture parity test against the generated branch-merge corpus case.
unavailable-DST refusal and the unit tests of `omnigraph-gqt`,
`omnigraph-gqt-core` and `omnigraph-bench` under an empty `RUSTFLAGS`, then
runs the seam guard (`crates/omnigraph-seams/tests/failpoint_names_guard.rs`)
in the same flagless shape. Both of its engine invocations select those same
three packages, so they resolve one feature graph and the engine builds once:
each crate alone resolves a different graph (`omnigraph-gqt` enables the
engine's `test-util` and depends on `omnigraph-dst`), and three selections
cost three engine builds, about 20 minutes each warm. The guard is a source
walk whose crate declares no workspace crate (its dev-dependencies are
`serde_yaml`, `syn`, `tempfile` and `toml`), so it adds no second engine
build. The benchmark units include the fixture parity test against the
generated branch-merge corpus case.
The dispatch owner also checks external-store admission and persistence.
Automatic corpus runs supply no `--store`, so schema-less query files are
refused there; schema-and-seed datasets with zero steps are admitted.
Expand Down
Loading