CI: Grant issues read to the reusable workflows - #408
Merged
tykeal merged 1 commit intoSep 1, 2026
Merged
Conversation
python-workflows v0.3.1 reads maintainer-approved CVE bypass issues, so its jobs request issues: read. A called workflow cannot hold a permission the caller has not granted, and neither caller granted it, so both fail at startup before any job is created. Every pull request has been affected since the pin moved to v0.3.1: Python Build/Test reports startup_failure with no jobs and no annotation naming the cause, and the checks simply go missing rather than turning red. build-test-release.yaml carries the same gap, so releases are affected too. Also drops two comments naming the release the pin came from. Both said v0.1.x beside a pin annotated v0.3.1, and neither survived a version bump, so the annotation on the uses: line is the only record worth keeping. Co-authored-by: Claude <noreply@anthropic.com> Signed-off-by: Matthew Watkins <mwatkins@linuxfoundation.org>
ModeSevenIndustrialSolutions
requested review from
a team
and
a balanced review from Copilot
September 1, 2026 13:21
Copilot started reviewing on behalf of
ModeSevenIndustrialSolutions
September 1, 2026 13:22
View session
There was a problem hiding this comment.
🟢 Approval recommended
Pull request overview
Grants reusable Python workflows the permissions required to start successfully.
Changes:
- Adds
issues: readto build/test and release workflows. - Removes outdated pin comments.
File summaries
| File | Description |
|---|---|
.github/workflows/build-test.yaml |
Grants issue-read access to CI. |
.github/workflows/build-test-release.yaml |
Grants issue-read access to releases. |
Review details
- Files reviewed: 2/2 changed files
- Comments generated: 0
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
tykeal
approved these changes
Sep 1, 2026
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.
Every pull request is currently failing to start
Python Build/Testmainis broken, and quietly. Found while rebasing #393.python-workflowsv0.3.1 added a permission request to its jobs:A called workflow cannot hold a permission the caller has not granted. Neither caller in this repository granted
issues: read, so the run fails at startup, before any job exists.python-workflows/build-test.yaml@v0.3.1contents: read,pull-requests: read,issues: readcontents: read,pull-requests: readpython-workflows/build-test-release.yaml@v0.3.1contents: read/write,id-token: write,attestations: write,issues: readcontents: write,id-token: write,attestations: writeWhy nobody noticed
The failure mode is close to invisible:
There is no failing job to click into, no annotation naming the cause, and
startup_failureproduces no check run at all — sobuild-test / Python Tests (3.11–3.14),Python Audit,Python Build,Generate SBOMandGrype Audit SBOMsimply vanish from the checks list rather than turning red. A PR looks green because the checks that would have failed are absent.Confirmed across every branch pushed since the bump landed:
The two successes predate the pin bump, which is why the dependabot PR that introduced it went in clean.
build-test-release.yamlhas the same gap, so releases are affected too — that one has not been exercised yet because it runs on tag.What I ruled out first
Rather than guess from the name, I eliminated the other causes of
startup_failure:The reference resolves and the input is still valid. Diffing the job-level
permissions:blocks between the old and new pins isolated the one change that matters:The change
Two lines, one per caller. Nothing else.
Also drops two comments that read
# Pinned to python-workflows v0.1.0 release commitandv0.1.1while sitting beside a pin annotatedv0.3.1— neither survived a version bump, so the annotation on theuses:line is the only record worth keeping.On verifying this
This PR cannot exercise the fix itself.
build-test.yamlfilters'!.github/**', and this change touches nothing else, soPython Build/Testwill not appear on this PR at all. Its absence here is the path filter, not the bug.I tried to close that gap and could not, so stating it plainly rather than implying otherwise:
Python Build/Testviaworkflow_dispatchon the fork, against this branch and against an unfixed branch as a control. Both accepted (HTTP 204) and both sat queued indefinitely with 0 jobs — the fork has no runners, so the A/B was inconclusive and the runs were left to expire.Definitive confirmation will come from the first PR after this merges that touches a non-
.githubpath — #393 is already rebased onto currentmainand changestests/, so it will showbuild-testjobs or it will not.Note on scope and urgency
Raised straight off
mainrather than folded into the stack, becausemainitself is broken and this unblocks every PR in the repository, not only mine.This is not what blocks #393. The required checks are only
DCOandpre-commit.ci - pr, both of which pass;build-testis not required. #393 is blocked solely on its dismissed approval, which the rebase onto currentmainaddresses separately.