- name
- who-blocks-this-pr
- description
- Analyze a PR to determine which files still need approval and from whom, based on CODEOWNERS and website/config/custom.js. Use when the user asks "who needs to approve", "why is the PR blocked", "who blocks this PR", or similar.
# PR Approvals
Quickly determine which reviewers are still needed for a PR and which files they own.
## Step 1: Get the blocking info from GitHub
Run these in parallel:
- `gh pr view <number> --json mergeStateStatus,mergeable,reviewDecision` to check if it's actually blocked
- `gh api repos/<owner>/<repo>/pulls/<number> --jq '.requested_reviewers[].login'` to get **who GitHub is still waiting on**
- `gh pr view <number> --json reviews --jq '.reviews[] | select(.state == "APPROVED") | .author.login'` to see who already approved
- `gh pr view <number> --json files --jq '.files[].path'` to get changed files
If the PR is not blocked, just report that and stop.
## Step 2: Map requested reviewers to files
**IMPORTANT: Distinguish between blocking and non-blocking reviewers.**
- **CODEOWNERS** (repo root) creates **required/blocking** reviews. GitHub's branch protection enforces these. Last matching pattern wins.
- **website/config/custom.js** `githubRepoDRIByPath` and `githubRepoMaintainersByPath` auto-request reviewers but do **NOT** block merges. These are courtesy requests.
For each still-requested reviewer, check whether they are required by a CODEOWNERS pattern that matches a changed file. If they only appear in custom.js, they are requested but not blocking.
## Step 3: Report concisely
Output two sections:
**Blocking (CODEOWNERS-required):**
- Who is still needed, and which files/patterns require their approval
**Requested but not blocking (custom.js DRI):**
- Who was auto-requested, and for which files -- note these don't block the merge
Also note who has already approved and what they covered.
Do NOT give a full breakdown of every file's ownership. Only show what's relevant to the still-requested reviewers.
在 GitHub 查看