Repository navigation
Conversation
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.
Problem
Lint PRtriggers onpull_request_target(opened/edited/synchronize). The release-please release PR (branchrelease-please--branches--main--components--confidence_flutter_sdk, most recently #71) is created and force-pushed by the release-please action using the workflow's defaultGITHUB_TOKEN— and those bot-caused events never triggerpull_request_targetworkflows at all. SoValidate PR titlenever appears on release PRs unless a human happens to touch the PR (e.g. run 41417126839 was summoned only by a human body edit on #71, an hour after the bot's fold-in).Root cause (verified from run history, with a twist)
Every one of the 50 runs ever recorded on the release branch fits one pattern: every Lint PR run is human-actor (4×
vahidlazio2025-09-22, 1×nicklasl2026-11-02); bot pushes never produced a singlepull_request_targetrun. Meanwhile thepull_requestworkflows (Test-Android/CI/Test-iOS) do get runs created on bot events — every release-please PR opening and every fold-in since June 2026.The twist (found by testing): bot-actor
pull_requestruns are createdaction_requiredand only execute after a maintainer approves them. Run history confirms this has always been true: e.g. the Nov 2 fold-in runs (CI 41410137582) were created 08:02:04 as attempt 1action_required, and ran as attempt 2 only after approval at 08:02:15 — the same release-prep approval that made the flutter checks green on #71 before it merged. This approval gesture is already part of the release routine; approving the PR's workflows is the only way the flutter checks ever ran on a release PR.Fix
Switch the trigger from
pull_request_targettopull_request(same event types) and make the two sticky-comment stepscontinue-on-error: true:pull_requestruns are created on botopened+ everysynchronize→Validate PR titleshows up on release PRs, and executes (and validates) with the same workflow approval maintainers already give the flutter checks during release prep. Today it never appears at all.pull_requesttoken is read-only there, so commenting degrades gracefully (continue-on-error) but title validation still runs and the check still reports pass/fail.permissions:block (see comment in the file): the workflow needs nothing beyond the repo-default token, and explicit blocks add no value here.Validate PR titlestays a non-required check on purpose: a required check that can silently not fire would block release PRs forever.Verification
Validate PR titleis green here (you see two of them while this PR is open: the oldpull_request_targetcopy frommainplus the newpull_requestone; post-merge only one remains). Historical human-PR green runs (feat: replace native SDK bridge with Dart #62/fix!: reply exactly once, on the platform thread, from async channel cases #76/feat!: replace Flutter bridge with Dart OpenFeature provider #79 style) are untouched by the change.workflow_dispatch/push-triggered workflow (now removed from this PR) reproduced release-please's exact conditions: created a throwaway branch, opened a PR tomain's content viaGITHUB_TOKEN(botopened), then pushed a commit onto the PR branch viaGITHUB_TOKEN's git data API (botsynchronize, same mechanics release-please uses), with a deliberately invalid title. It asserted the run is created, awaited the maintainer approval (the release-prep gesture), and verified the job — not just the run — failed with the invalid title, plus the sticky failure comment posting. Result — all green:opened→ Lint PR run 41422639137:Validate PR titlejob failure on the invalid title ✅synchronize(fold-in) → Lint PR run 41422744814:Validate PR titlejob failure ✅mainafter this merges —Validate PR titleshould appear on the release PR (created immediately; validating once the usual workflow approval is given), with no human touching the PR.Honest limits
pull_requestruns (including this check on release PRs) are created pending approval and execute only after the release-prep workflow approval maintainers already perform for the flutter checks. Between a fold-in and that approval, the check shows as awaiting approval rather than validated. This is a property of GitHub's approval rules for non-collaborator actors, not of this change — the only trigger that skips it entirely (pull_request_target) never fires on bot events at all.Validate PR titleafter approval — this is about the check finally existing at all.Note on the
android-testcheck on this PR's final commit: it flaked three consecutive times on pure emulator infrastructure (a hungrun android testsstep cancelled at 45+ min, then anadb ... exit code 1, then a flutter-test websocketHttpException: Connection closed before full header was received— run 41423300942, attempts 1–3). The identical tree passedandroid-testgreen on the previous commit of this branch (41422937654) and onmainthis morning (PR #71, after the usual single flake rerun) — this diff touches only.github/workflows/lint-pr.yamland cannot affect the Android build. Treat the redandroid-testas the repo's known emulator roulette; agh run rerun --failedat review time should clear it.