feat(release): affected-set — build only what changed since the last release - #241
Closed
elronbandel wants to merge 1 commit into
Closed
feat(release): affected-set — build only what changed since the last release#241elronbandel wants to merge 1 commit into
elronbandel wants to merge 1 commit into
Conversation
…release On a manual dispatch, enumerate diffs HEAD against the previous vX.Y.Z tag and keeps only the combos + per-task images whose benchmark or agent source changed. A change under containers/core, gateways, or the root bake is a shared/base change, so the full fleet rebuilds (the cascade = bulk on base update). rebuild_bases / --only / tag-release / no-prior-tag all build the full fleet. Leaves stay full: they're ~38s cache hits, and an empty leaf matrix would skip the merge job the combos depend on. Plain git-diff is the standard affected-set (Nx/Turborepo's 'affected') — no content-hash tags, no per-job skip, no script. Signed-off-by: Elron Bandel <elron.bandel@ibm.com>
Contributor
Author
|
Closing — not a net-positive change.
Parking that architectural decision instead. |
elronbandel
added a commit
that referenced
this pull request
Aug 9, 2026
…stead of rebuilding (#292) (#293) Add delivery rules 11-15: an image's build inputs are its context + in-repo base inputs + resolved external-base digests (11); every published image records a build-input hash in its config (12); a released image with unchanged inputs is retagged from the prior release's digest, never rebuilt (13); an absent/unreadable/mismatched hash counts as changed (14); carrying forward exempts nothing from release gates (15). Principle 9 gains the matching carve-out: a release tag MAY point at a digest produced by an earlier release when build inputs are unchanged. This refines, not repeals, 'different tag, different bits' — carrying the byte-identical digest forward is stricter immutability than a non-reproducible rebuild (v0.1.0 shipped ~6,400 silently stale combos, found only by hand: #233). Keying on a content hash with fail-dirty answers the silent-staleness objection that closed #241; #168 lists this change-detection matrix as its blessed follow-up. Folding external-base digests into the inputs makes an upstream base bump a changed input, so CVE refreshes rebuild naturally (#247 interlock via rule 15). Rules-only PR per contributing/RULES.md rule 2; implementation follows in small PRs (hash primitive + static test, label stamping, freshness status, selective retag). Resolves #292 Signed-off-by: Elron Bandel <elron.bandel@ibm.com>
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.
What
On a manual dispatch,
enumeratenow diffsHEADagainst the previousvX.Y.Ztag and builds only the combos + per-task images whose benchmark or agent
source changed. Everything unchanged keeps its current published image.
Why
Every dispatch rebuilt the full ~12.8k-combo fleet even when a single benchmark
changed. This is the standard affected set (Nx/Turborepo's
affected), done witha plain
git diff— no content-hash tags, no per-job skip, no helper script.Cascade + escape hatches
containers/core,containers/gateways, or the root bake is ashared/base change → the full fleet rebuilds (the cascade = "bulk on base update").
rebuild_bases,--only, a tag release (vX.Y.Zpush), or no prior tag allbuild the full fleet, unchanged from today.
Scope
Combos + per-task only — the bulk and the ~60-min per-task layer. Leaves stay full:
they're ~38 s cache hits, and an empty leaf matrix would skip the
mergejob thecombos depend on.
Verification
gsm8k+claude-codechange keepsgsm8k/*and*/claude-codecombos (dropsaime/codex) and onlygsm8kper-task; a
containers/core/*change skips the filter (full build).actionlint+yamllintgreen.Supersedes #239 (the content-hash-tag approach) — git-diff is the standard and far simpler.