test(e2e): hermetic end-to-end coverage of a real git merge - #546
Open
behinddwalls wants to merge 1 commit into
Open
test(e2e): hermetic end-to-end coverage of a real git merge#546behinddwalls wants to merge 1 commit into
behinddwalls wants to merge 1 commit into
Conversation
This was referenced Aug 7, 2026
behinddwalls
marked this pull request as ready for review
August 7, 2026 18:24
behinddwalls
force-pushed
the
sq/git-e2e
branch
from
August 7, 2026 18:36
10c9c39 to
506a24b
Compare
behinddwalls
force-pushed
the
sq/git-e2e
branch
from
August 7, 2026 21:21
506a24b to
43bab9c
Compare
behinddwalls
force-pushed
the
sq/git-e2e
branch
2 times, most recently
from
August 7, 2026 22:57
b974645 to
84f28e9
Compare
behinddwalls
force-pushed
the
sq/git-e2e
branch
from
August 7, 2026 23:24
84f28e9 to
e953b01
Compare
## Summary ### Why? The existing E2E suite runs Runway on the noop merger, so a request reaching `landed` proves the pipeline's choreography and nothing at all about git. Every risky part of merging for real — the `git` binary in the image, checkout provisioning, the apply and push, head-branch updates — had no automated coverage through the stack. None of that needs a provider. The merger speaks `git://` against any remote, so pointing it at a bare repository on a shared volume exercises the whole merge path with no credential, no network, and no account anywhere — which is what lets these assertions gate a pull request. ### What? A second suite lands `git://` changes and asserts against the repository itself rather than against request status: which commits reached the target, in what order, and in how many ref updates. A three-change stack must arrive in exactly **one** ref update, counted from the target's reflog — the property that distinguishes a submit queue from merging changes one at a time, and one that is hard to check against a live provider. It also pins two behaviors worth not regressing: a conflicting change leaves the target untouched, and re-submitting a change after it has landed is rejected as stale (landing moved its head branch, so the URI no longer describes where that branch points). `testutil.NewComposeStack` gained `WithOverlay`, so the suite states only what differs from the base stack — Runway's merge target — instead of copying the whole service definition. A copy is the thing that rots: services added to the base file never reach the duplicate, and nothing fails until the variant runs. The suite drives the bare repository with the same pinned git the merger uses, rather than the host's, since these assertions depend on repository mechanics and an ambient git brings ambient configuration with it. ## Test Plan ✅ `make e2e-git-test` — the new suite. ✅ `make e2e-test` — both suites; the existing one is unchanged and still passes. Also fixes `make help`, whose target regex excluded digits, so neither `e2e-test` nor `e2e-git-test` was ever listed.
behinddwalls
force-pushed
the
sq/git-e2e
branch
from
August 7, 2026 23:42
e953b01 to
ed4e494
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.
Summary
Why?
The existing E2E suite runs Runway on the noop merger, so a request reaching
landedproves the pipeline's choreography and nothing at all about git. Every risky part of merging for real — thegitbinary in the image, checkout provisioning, the apply and push, head-branch updates — had no automated coverage through the stack.None of that needs a provider. The merger speaks
git://against any remote, so pointing it at a bare repository on a shared volume exercises the whole merge path with no credential, no network, and no account anywhere — which is what lets these assertions gate a pull request.What?
A second suite lands
git://changes and asserts against the repository itself rather than against request status: which commits reached the target, in what order, and in how many ref updates. A three-change stack must arrive in exactly one ref update, counted from the target's reflog — the property that distinguishes a submit queue from merging changes one at a time, and one that is hard to check against a live provider.It also pins two behaviors worth not regressing: a conflicting change leaves the target untouched, and re-submitting a change after it has landed is rejected as stale (landing moved its head branch, so the URI no longer describes where that branch points).
testutil.NewComposeStackgainedWithOverlay, so the suite states only what differs from the base stack — Runway's merge target — instead of copying the whole service definition. A copy is the thing that rots: services added to the base file never reach the duplicate, and nothing fails until the variant runs.The suite drives the bare repository with the same pinned git the merger uses, rather than the host's, since these assertions depend on repository mechanics and an ambient git brings ambient configuration with it.
Test Plan
✅
make e2e-git-test— the new suite.✅
make e2e-test— both suites; the existing one is unchanged and still passes.Also fixes
make help, whose target regex excluded digits, so neithere2e-testnore2e-git-testwas ever listed.Stack