Design 47: say ADR 0395 as accepted — a conflict is asked again at every move, an ended check's builds are not reused, a group's composed check reruns through its members, and the cost bound
This commit is contained in:
@@ -395,14 +395,28 @@ them.
|
||||
|
||||
*ADR 0395, changing ADR 0323 §4.* When the forge's holder hears a repository's trunk move, mesh-delivery asks the
|
||||
check of every active open pull request into that trunk against its new head at once, so a verdict is current by
|
||||
the time anyone looks. A pull request whose head no longer merges cleanly into the new head is not checked: the
|
||||
forge says so without a builder, its statuses fail naming the conflict, and it is told once on the pull request;
|
||||
its author's next push asks its check. A pull request has at most one check at a time: a check against an older trunk commit,
|
||||
waiting or running, is dropped or ended when a newer one is asked for it, as a new head already ends its old head's
|
||||
check (issue 726). The build queue keeps delivery builds first; then checks of pull requests marked ready, then the
|
||||
rest, the most recently pushed first. A pull request with no push and no ready mark for 7 days is left out until a
|
||||
push, a ready mark or a recheck wakes it. A recheck also takes a delivery that is still proposed (issue 888). A move made by a delivery group's own member merging in the group's order asks neither the
|
||||
group's composed check nor its other members again (ADR 0323 §6).
|
||||
the time anyone looks.
|
||||
|
||||
- **A conflict is told, not checked.** A pull request whose head no longer merges cleanly into the new head is not
|
||||
checked: the forge says so without a builder, its statuses fail naming the trunk commit and the files in
|
||||
conflict where the forge gives them, and it is told once on the pull request, not again while the same conflict
|
||||
stands. Every later trunk move and its next push ask the forge again; once it merges cleanly its check is asked.
|
||||
- **One check per pull request.** A check against an older trunk commit, waiting or running, is dropped or ended
|
||||
when a newer one is asked for the same pull request, as a new head already ends its old head's check (issue
|
||||
726). An ended check delivers no verdict, so none of its builds is reused (ADR 0350 §7 keeps only builds a verdict
|
||||
names); its scratch records wait for ADR 0350 §5's seven-day sweep. A try and a delivery's build are never touched.
|
||||
- **The queue's order.** Delivery builds first; then checks of pull requests marked ready; then the rest, the most
|
||||
recently pushed first.
|
||||
- **Inactive pull requests wait.** One with no push and no ready mark for 7 days is left out until a push, a ready
|
||||
mark or a recheck wakes it. A recheck also takes a delivery that is still proposed (issue 888).
|
||||
- **Groups.** For a group's members a move asks only each member's own check; the group's composed check runs again
|
||||
through those rechecks (ADR 0323 §6) and is never asked by the move itself. A move made by a member merging in
|
||||
the group's order asks the other members nothing, since they merge moments later; their verdicts are out of date
|
||||
until then, and one that does not merge is asked again at the next move, its next push or a recheck.
|
||||
|
||||
**Its cost** is at most one check asked per active, cleanly merging pull request per trunk move: about 550 a day at
|
||||
ADR 0323's measured load, fewer once conflicting and inactive ones are left out; ending an older check saves builder
|
||||
time, not checks asked. Issue 944 measures it once built.
|
||||
|
||||
## What every transition does
|
||||
|
||||
|
||||
Reference in New Issue
Block a user