Handling Review Comments
Process for addressing GitHub PR review comments efficiently using GitHub CLI.
Prerequisites
- GitHub CLI installed and authenticated:
gh auth status - Repository cloned locally with push access
Workflow
- Fetch comments - Get all review comments from the PR
- Fix issues - Implement fixes for each comment
- Run checks - Verify fixes pass tests and linting
- Commit and push - Group related fixes logically
- Reply to comments - Confirm fixes with commit references
- Resolve threads - Mark resolved via GraphQL API
Fetching Comments
Get All PR Comments
gh api repos/{owner}/{repo}/pulls/{pr_number}/comments
# Example
gh api repos/sergiodk5/anime-list/pulls/9/comments
Get Review Threads (with resolution status)
gh api graphql -f query='{
repository(owner: "{owner}", name: "{repo}") {
pullRequest(number: {pr_number}) {
reviewThreads(first: 20) {
nodes {
id
isResolved
comments(first: 1) {
nodes {
body
databaseId
}
}
}
}
}
}
}'
Replying to Comments
gh api repos/{owner}/{repo}/pulls/{pr_number}/comments/{comment_id}/replies \
-X POST \
-f body="Fixed in commit {hash}. {description of fix}"
# Example
gh api repos/sergiodk5/anime-list/pulls/9/comments/123456/replies \
-X POST \
-f body="Fixed in commit abc123. Added validation as suggested."
Resolving Threads
Single Thread
gh api graphql -f query='
mutation {
resolveReviewThread(input: {threadId: "THREAD_ID_HERE"}) {
thread { isResolved }
}
}'
Multiple Threads
for thread_id in PRRT_abc123 PRRT_def456 PRRT_ghi789; do
gh api graphql -f query="mutation { resolveReviewThread(input: {threadId: \"$thread_id\"}) { thread { isResolved } } }"
done
Comment Categories
| Type | Action | |------|--------| | Bug/Security | Fix immediately, add tests if needed | | Nitpick | Fix if reasonable, explain if not | | Enhancement | Acknowledge, create follow-up issue if needed | | Question | Answer clearly, add code comments if helpful |
Before Pushing
npm run format && npm run lint && npm run test:unit
Commit Message Format
Group related fixes in logical commits:
git commit -m "fix: address security review feedback
- Add input validation for user-provided colors
- Escape HTML in dynamic attributes
- Use separate timeout variables to prevent race conditions"
Response Patterns
For fixes:
Fixed in commit abc123. Added validation as suggested.
For acknowledged issues:
Acknowledged. This will be addressed in a follow-up PR.
For clarifications:
This is intentional because [reason]. Happy to discuss further.
For questions:
Good question! This works by [explanation]. Added a code comment for clarity.
Verify Resolution
gh api graphql -f query='{
repository(owner: "{owner}", name: "{repo}") {
pullRequest(number: {pr_number}) {
reviewThreads(first: 20) {
nodes { isResolved }
}
}
}
}'
Complete Workflow Example
# 1. Fetch comments
gh api repos/sergiodk5/anime-list/pulls/9/comments
# 2. Fix issues in code (manual step)
# 3. Run checks
npm run format && npm run lint && npm run test:unit
# 4. Commit and push
git add . && git commit -m "fix: address review feedback" && git push
# 5. Reply to each comment
gh api repos/sergiodk5/anime-list/pulls/9/comments/{id}/replies \
-X POST \
-f body="Fixed in commit abc123..."
# 6. Resolve threads
gh api graphql -f query='mutation { resolveReviewThread(input: {threadId: "..."}) { thread { isResolved } } }'
Best Practices
- Fix Before Responding - Implement fix before replying to ensure accuracy
- Reference Commits - Include commit hashes so reviewers can verify
- Group Related Fixes - Combine related changes in logical commits
- Run All Checks - Ensure tests/lint pass before pushing
- Be Concise - Keep replies brief but informative
微信扫一扫