mirror of
https://github.com/Comfy-Org/github-workflows.git
synced 2026-11-05 00:17:37 +00:00
[PR #257] [MERGED] feat(assign-reviewers): add an opt-in author allowlist (BE-11575) #263
Labels
No labels
cursor-review-catalog-drift
groom
groom
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Comfy-Org/github-workflows#263
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/Comfy-Org/github-workflows/pull/257
Author: @mattmillerai
Created: 9/2/2026
Status: ✅ Merged
Merged: 9/2/2026
Merged by: @mattmillerai
Base:
main← Head:matt/be-11575-assign-reviewers-author-allowlist📝 Commits (1)
88a7e3afeat(assign-reviewers): add an opt-in author allowlist (BE-11575)📊 Changes
3 files changed (+49 additions, -6 deletions)
View changed files
📝
.github/workflows/assign-reviewers.yml(+33 -5)📝
README.md(+1 -1)📝
docs/callers/assign-reviewers.md(+15 -0)📄 Description
ELI5
Right now the PR auto-assigner runs for everyone's PRs in a repo that enrolls it. There's no middle setting between "on for the whole repo" and "off". This adds one: a repo can list the specific PR authors it wants routed, and everyone else's PRs are left alone. Nothing changes for any repo until an admin sets the variable.
Motivation
Raised in #proj-cloud: the auto-assigner pulls in people outside the PR's pod (who then aren't actually watching it) and assigns people who are out on leave — which undercuts the one guarantee the Assignee field exists to provide, that exactly one person is accountable for driving a PR to completion. The proposal on the table was to disable the automation org-wide.
The automation was deliberately shipped unrefined so the team could iterate on it, so this is the smaller knob instead: scope it to opt-in authors, and let the people who want their PRs routed keep it. It does not settle the broader question of whether the automation should exist at all — that's still an open team decision, and this just stops the answer from having to be all-or-nothing.
Provenance
check_workflow_pins.py(11 workflows, none defaulted, every ref checkout guarded);check_agents_md.py --root .passed (2 pre-existing warnings, unrelated); YAML parses and the new env key is present. There is no script test suite for this reusable (notest-assign-reviewers.yml, unlikeagents-md-integrityorrefresh-reviewers), so behavior was verified by extracting thegithub-scriptbody and running it under stubbedoctokit/coreacross six cases — see Test plan.@, whereREVIEWER_EXCLUDEmatches exactly. Rationale in "Reviewer context".Reviewer context
assign-reviewers.yml. Merging tripsbump-assign-reviewers-callers.yml's path filter, so the fleet carries it to consumers — all of them on unchanged behavior until they set the variable. NoSkip-caller-bumptrailer, deliberately: this is behavioral.REVIEWER_AUTHOR_ALLOWLISTon any repo (a Settings → Variables change, done per repo after this ships); leave-awareness, which is the second, distinct failure mode raised in the thread and needs a data source this change doesn't have; and pod-aware routing, which is a different mechanism.Summary
vars.REVIEWER_AUTHOR_ALLOWLIST(whitespace-separated logins), wired exactly like the existingREVIEWER_EXCLUDE/REVIEWER_GROWTH_POOL/REVIEWER_LOAD_CAP— callervars→ jobenv:→ parsed in the script.authorLoginis hoisted up to the early-exit block for it; the later duplicate declaration is removed.)REVIEWER_EXCLUDE: logins are matched case-insensitively and a leading@is stripped. The two vars fail in opposite directions. A typo inREVIEWER_EXCLUDEfails open — someone gets assigned who shouldn't, which is visible and self-correcting. A typo here fails closed: nobody matches, routing silently stops repo-wide, and it looks identical to success — green checks, no assignees, no error. Normalizing the two things people actually get wrong (@handle, capitalization) closes the likeliest way to hit that. Nothing else is guessed at —mattstill does not matchmattmillerai.AUTHOR SCOPINGnote), thedocs/callers/assign-reviewers.mdprerequisites table and intro, and the README catalog row. The caller guide also gains a gotcha for the fail-closed behavior, with the log line to look for when confirming it's working.Test plan
The
github-scriptbody was extracted from the workflow and executed under stubbedoctokit/corewith a fixturereviewers.yml. All six pass:Author jacobsegal is not in REVIEWER_AUTHOR_ALLOWLIST — skipping., 0 API calls@MattMillerAIin list vsmattmilleraiauthormattin list vsmattmilleraiauthorpython3 .github/workflow-pins/check_workflow_pins.pypython3 .github/agents-md-integrity/check_agents_md.py --root .REVIEWER_AUTHOR_ALLOWLISTon one repo and confirm the run logsis in REVIEWER_AUTHOR_ALLOWLIST — routingfor a listed author and skips cleanly for an unlisted oneFixes BE-11575
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.