ci: re-run the PR-title lint on every push - #129
Merged
Merged
Conversation
A check-run belongs to the head sha it ran against and is never carried forward, while required status checks are evaluated per sha. With `synchronize` missing from this workflow's trigger list, every push therefore leaves the new head with no `lint` check-run at all -- which GitHub reads as perpetually pending. That is harmless while `lint` is advisory, which it still is today: `build` is the only required check on `main`. It becomes a permanent merge block the moment `lint` joins the docs.owncloud.com-status-checks ruleset in owncloud/admin, so this is the prerequisite for that follow-up rather than a fix for a live outage. Three PRs here have already been in the pending-forever state without paying for it: * #116 -- lint ran when Dependabot opened it, Dependabot then rebased to 78e0a21, and the head that merged carried no lint. Re-running the workflow would not have recovered that PR: a re-run replays the original event and reports back to the original sha. Only an event against the new head does. * #110 -- force-pushed to a0bcc07; no lint run on that sha. * #63 -- pushed 5bfb225 on 2026-09-14; no lint run on that sha. The comment claiming `synchronize` was redundant reasoned only about the title, which a push indeed cannot change. That holds while the check is advisory; it does not once the check is required, because the re-run exists to re-post the check-run on the new sha, not to re-judge the title. Two neighbouring comments are corrected in the same breath, since both would have misled the next person deciding whether a trigger is droppable: * `reopened` was justified as stopping the check from going "absent" on reopen. It does not go absent -- reopening does not move the head sha, so the existing check-run still applies. What actually makes `reopened` load-bearing is that a push while the PR is CLOSED emits no pull_request event at all, leaving it the only event that reports against the head the PR comes back with. It is therefore not redundant with `synchronize`. * the concurrency block was credited with preventing a stale red check. Cancellation is asynchronous, so the superseded run still lands, as `cancelled`; what keeps the current verdict authoritative is GitHub resolving duplicate check-run names to the newest. Head 3a91054 carries exactly that cancelled/success pair today. This also aligns the repo with the rest of the org -- activity, client, richdocuments, testing and wopi all trigger on `synchronize`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com>
|
|
LukasHirt
approved these changes
Sep 16, 2026
Verification probe for the change in this PR, not content. A `lint` check-run must now appear on this new head sha; before the change, a push produced none (see #116, #110, #63 in the PR description). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com>
Contributor
|
Originally approved before the second commit but seems it worked now - keeping the original approval. |
Contributor
Author
Verification:
|
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
lint(workflow Lint PR title) has run on every PR in this repo since #97, but thetrigger list is
[opened, edited, reopened]—synchronizewas deliberately omitted, on thegrounds that a push cannot change the title.
That reasoning holds only while the check is advisory.
owncloud/adminmanages this repo'sdocs.owncloud.com-status-checksruleset, and required status checks are evaluated per headsha: a check-run belongs to the commit it ran against and is never carried forward. Without
synchronize, every push leaves the new head with nolintcheck-run — which GitHub readsas perpetually pending, blocking the merge until someone edits the title.
Three PRs here have already been in exactly that state, harmlessly only because the context is
not required yet:
4c48f460when Dependabot opened it; Dependabot then rebased to78e0a21ba0bcc0735bfb225eon 2026-09-14#116 is the one that matters: Dependabot never edits its own title, so had
lintbeen requiredthat PR could not have been merged at all — only closed and reopened.
Evidence, for anyone re-checking:
What
One trigger added, plus the two comments that documented the old reasoning brought up to date:
types: [opened, edited, reopened]→[opened, edited, reopened, synchronize]types:now explains that the re-run exists to re-post the check-run on thenew sha, not to re-judge the title
concurrencycomment now says the group is per pull request (github.refisrefs/pull/<n>/mergefor apull_requestevent), so an edit racing a push collapses to thenewer run rather than leaving a stale red check
No change to
permissions, to the pinned action(
amannn/action-semantic-pull-request@48f2562/ v6.1.1) or to the job itself.This also aligns the repo with the rest of the org —
activity,client,richdocuments,testingandwopiall trigger onsynchronize, andrichdocumentsis the worked example oflintbeing required and the gate working.Verification
The change is self-testing: this PR gets a second, empty commit pushed to it, and a
lintcheck-run must then appear on the new head sha. That result is posted as a comment below
before the PR is proposed for merge.
Follow-up
Requiring the context is a separate PR against
owncloud/admin, which must merge afterthis one.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com