ci: smaller PRs (path-filter heavy jobs), faster builds (delta uv cache), robust local (make ci)#91
Merged
Merged
Conversation
krakennetworks
approved these changes
Jun 23, 2026
make ci full local mirrormake ci)
Member
Author
|
Added a second commit: delta-friendly uv cache. Root cause of the "re-download everything" pain — setup-uv keyed the cache on the exact |
85219f0 to
48907fa
Compare
Smaller, less infra-flaky PR checks without losing coverage. A `changes` job (dorny/paths-filter) detects which subsystem a PR touches; the heavy infra-backed gates — engine-test (Postgres/pgbouncer), knowledge-test, cypher-subset (Neo4j testcontainer), serve-test (all-extras) — now run on a PR only when their domain, or a shared/core path, changed. Every gate still runs on push to main, so main stays fully covered. The required checks (lint, test) are never filtered. `make ci` is the robust counterpart: every gate plus the full suite including the slow, container-backed tests, for validating a large or cross-cutting change locally before pushing. Signed-off-by: Sean Mauk <seanmauk@krakennetworks.com>
…n dep bumps) setup-uv's built-in cache keys on the exact uv.lock hash with no fallback and prunes built wheels, so any dependency change (e.g. adding a dev tool) is a total cache miss: every job re-downloads all ~260 packages — xgboost (126 MB), torch, numpy, pandas, etc. — on every run until the new key warms. Replace the 7 duplicated `setup-uv + uv sync` blocks with one composite action (`.github/actions/uv-setup`) that caches `~/.cache/uv` via `actions/cache` with a `restore-keys` prefix fallback. A lock change now restores the newest prior cache and `uv sync` fetches only the changed packages. No prune, so built wheels stay cached too. The cache key is shared across all jobs/extra-sets (uv is content-addressed), so the first job to run warms it for the rest. `changelog-check` keeps plain setup-uv: it never syncs heavy extras. Signed-off-by: Sean Mauk <seanmauk@krakennetworks.com>
48907fa to
228bdd6
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
CI breaks every few PRs on process/infra drift, not real defects. Two complaints addressed: make local CI robust, make the PR run smaller.
What
Smaller PR runs (path-filtered heavy jobs). A
changesjob (dorny/paths-filter) detects which subsystem a PR touches. The heavy, infra-backed gates run on a PR only when their domain — or a shared/core path — changed:engine-testcheckpoint/,stores/, coreknowledge-teststores/,fathom/, corecypher-subsetstores/, the cypher subset test, coreserve-testserve/,bosun/, nautilus/interrupt/artifacts, openapi, coreNo coverage lost where it matters: every gate still runs on push to
main(github.event_name == 'push'), somainstays fully covered. The only required checks —lintandtest(the latter already runs the bulk via-m "not slow") — are never filtered. Heavy jobs aren't required checks, so skipping them never deadlocks a PR.Robust local mirror (
make ci). Every gate + the full suite including slow/container tests (--runslow, needs Docker). The superset a PR may now skip — run it before pushing a large/cross-cutting change. Documented inCONTRIBUTING.md.Notes
ci.yml(acorepath), so all heavy jobs trigger here — self-validating that the gating didn't break them.🤖 Generated with Claude Code