.github: fix startup_failure in cache-warming / sonar-branch-scan (reusable-workflow perms) - #22714
Merged
taratorio merged 3 commits intoJul 24, 2026
Merged
Conversation
…clare Fixes a startup_failure regression on main. The excessive-permissions cleanup (#22677, #22687) gave the reusable test leaves explicit permissions (actions: write for gh run cancel, pull-requests: read for sonar). GitHub validates a called workflow's declared permissions against the caller's grant at startup and rejects the run if the caller grants less — so callers that only granted contents: read began failing to start: - cache-warming (calls lint/sonar/test-bench/test-all-erigon/... ) — broke at #22677 - sonar-branch-scan (calls sonar) — broke at #22677 - cache-warming-kurtosis-cl-images (calls test-kurtosis-assertoor) — broke at #22687 Each was startup_failure (0 jobs) on every main commit since, silently dropping ~34 checks (Cache Warming's 33 jobs + SonarCloud Branch Scan). Grant each caller the union of its leaves' declared permissions, and add them to the excessive-permissions ignore list alongside ci-gate — like ci-gate, they are orchestrators that must grant the leaf permission cap workflow-wide.
lystopad
requested review from
AskAlexSharov,
mriccobene and
yperbasis
as code owners
July 24, 2026 08:43
lystopad
enabled auto-merge
July 24, 2026 08:46
Contributor
There was a problem hiding this comment.
Pull request overview
Fixes a GitHub Actions regression where caller workflows began failing at startup_failure after reusable “leaf” workflows started declaring stricter permissions:; GitHub requires the caller to grant at least the permissions requested by the called workflow.
Changes:
- Grant
actions: writeand (where needed)pull-requests: readat the workflow level for orchestrator workflows that call reusable test leaves. - Add the affected orchestrators to the zizmor
excessive-permissionsignore list with updated rationale.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| .github/zizmor.yml | Ignores orchestrator workflows for excessive-permissions with updated rationale. |
| .github/workflows/sonar-branch-scan.yml | Expands caller permissions to satisfy sonar.yml reusable workflow requirements. |
| .github/workflows/cache-warming.yml | Expands caller permissions to satisfy all called reusable workflows’ requirements. |
| .github/workflows/cache-warming-kurtosis-cl-images.yml | Adds actions: write so the called kurtosis workflow’s job-level permission grant is satisfiable. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
taratorio
approved these changes
Jul 24, 2026
AskAlexSharov
approved these changes
Jul 24, 2026
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Jul 24, 2026
taratorio
deleted the
feature/lystopad/fix-reusable-workflow-caller-perms
branch
July 24, 2026 11:25
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.
Regression fix —
startup_failureon main since #22677The
excessive-permissionscleanup (#22677, #22687) gave the reusable test leaves explicit permissions (actions: writefor their merge-queuegh run cancel,pull-requests: readfor sonar). GitHub validates a called workflow's declared permissions against the caller's grant at startup and rejects the whole run if the caller grants less. Callers that only grantedcontents: readtherefore began failing to start:cache-warmingstartup_failure, 33 checks droppedsonar-branch-scanstartup_failure, 1 check droppedcache-warming-kurtosis-cl-imagesstartup_failureBoth cache-warming and sonar-branch-scan went
success→startup_failureexactly at commit6f7557ebec(#22677) and have failed on every main commit since — silently dropping ~34 checks per commit (this is the "134 → 99" drop visible in main's commit history).ci-gatewas unaffected because it already grantsactions: write+pull-requests: write;cache-warming-kurtosis-gloas-imagesis unaffected because its leaf (test-kurtosis-gloas) was never modified and still declares onlycontents: read— a clean control confirming the mechanism.Fix
Grant each broken caller the union of its leaves' declared permissions:
cache-warming→contents: read,actions: write,pull-requests: readsonar-branch-scan→contents: read,actions: write,pull-requests: readcache-warming-kurtosis-cl-images→contents: read,actions: writeThese callers are orchestrators that must grant the leaf permission cap workflow-wide (exactly like
ci-gate), so they're added to theexcessive-permissionsignore list with a generalized justification.Verification
zizmor(real.github/zizmor.yml, audit enabled): exit 0, "No findings to report."actionlintclean on the diff (the pre-existingconcurrency.queuenote is unrelated).make lint= 0 issues.Cache WarmingandSonarCloud Branch Scanruns on main should return tosuccess(fromstartup_failure).Note / lesson
Root cause was mine: when adding the leaves'
permissions:in #22677/#22687 I didn't account for GitHub's caller-must-grant rule for reusable workflows, so non-ci-gate callers broke. This restores them without weakening the least-privilege scoping.