Skip to content

fix(sync): land a re-pin as the candidate its checks passed on - #185

Merged
teemow merged 2 commits into
giantswarmfrom
fix/sync-through-pr
Oct 7, 2026
Merged

teemow merged 2 commits into
giantswarmfrom
fix/sync-through-pr

Conversation

@teemow

@teemow teemow commented Oct 7, 2026

Copy link
Copy Markdown
Member

Problem

The re-pin of the line landed on the default branch as a force-push of its head (#119), so the required checks never ran on the commit that landed. A re-pin rewrites the line: the old line head is not an ancestor of the re-pinned one, so a pull request cannot land it with any merge method. A rebase merge replays upstream's commits onto the old line and conflicts at the second one.

Change

  • sync-upstream re-pin: pushes the candidate to sync/<date>-<pin>. That push runs pr-workflow (run-tests), helm-e2e and govulncheck on its head. The run then opens a pull request against the line listing the replayed patches and recording the line head it was replayed from. A conflicting replay still yields a hand-over candidate, finished by hand on the same branch.
  • sync-upstream land: refuses a candidate whose run-tests or govulncheck did not pass on its head, or whose recorded line head is no longer the line's. Otherwise it pushes exactly that head to the line (lease on the line head) and closes the pull request. No merge and no devctl pr merge for a re-pin.
  • line input: the same flow for a maintenance line (release-1.3).
  • FORK.md: the branch table, the Re-pin steps, the automation identity and the manual equivalent describe this flow.

The branch protection that refuses a push to the line whose head has not passed the required checks, for every actor, is a separate change to the repository's declared rulesets (part of #163).

Proof

A dry_run dispatch of the workflow from this branch, recorded on #163.

Written by an agent.

A re-pin rewrites the line, so no pull-request merge method can land it, and the
sync force-pushed the line directly: the required checks never ran on the head
that landed. The re-pin now pushes its candidate to sync/<date>-<pin>, whose
push runs the line's suites, and opens a pull request against the line; a
separate land dispatch pushes exactly that head once run-tests and govulncheck
passed on it, onto the line head it was replayed from, and closes the pull
request. A line input runs the same flow for a maintenance line.
@teemow
teemow requested a review from a team as a code owner October 7, 2026 21:12
The pin lookup dropped every tag with a hyphen, so on a line pinned to an
upstream prerelease it found no pin and every run failed. Take the nearest
reachable upstream tag by commit distance instead of the highest by version.
@teemow
teemow merged commit 89c5830 into giantswarm Oct 7, 2026
16 checks passed
@teemow
teemow deleted the fix/sync-through-pr branch October 7, 2026 21:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant