name: github-pr-review description: 使用GitHub API发布PR审查评论,包括内联评论、建议和优先级标签。 triggers:
- /github-pr-review
GitHub PR审查
使用GitHub API发布结构化代码审查反馈,包括对特定行的内联评论。
关键规则:单次API调用
将所有评论打包到一次审查API调用中。不要单独发布评论。
发布审查
使用GitHub CLI(gh)。GITHUB_TOKEN自动可用。
gh api \
-X POST \
repos/{owner}/{repo}/pulls/{pr_number}/reviews \
-F commit_id='{commit_sha}' \
-F event='COMMENT' \
-F body='简要1-3句总结。' \
-F comments[][path]='path/to/file.py' \
-F comments[][line]=42 \
-F comments[][side]='RIGHT' \
-F comments[][body]='🟠 重要:你的评论在这里。' \
-F comments[][path]='another/file.js' \
-F comments[][line]=15 \
-F comments[][side]='RIGHT' \
-F comments[][body]='🟡 建议:另一个评论。'
参数
| 参数 | 描述 |
|---|---|
commit_id |
要评论的提交SHA(使用git rev-parse HEAD) |
event |
COMMENT、APPROVE或REQUEST_CHANGES |
path |
文件中路径,如差异所示 |
line |
新版本中的行号(差异的右侧) |
side |
对于新增/修改行使用RIGHT,对于删除行使用LEFT |
body |
带优先级标签的评论文本 |
多行评论
对于跨多行的评论,添加start_line以指定范围:
-F comments[][path]='path/to/file.py' \
-F comments[][start_line]=10 \
-F comments[][line]=12 \
-F comments[][side]='RIGHT' \
-F comments[][body]='🟡 建议:重构此块:
```suggestion
line_one = "new"
line_two = "code"
line_three = "here"
```'
重要:建议必须具有与范围相同的行数(例如,行10-12 = 3行)。
优先级标签
以优先级标签开始每个评论。最小化琐事 - 将次要样式问题留给linters。
| 标签 | 何时使用 |
|---|---|
| 🔴 关键 | 必须修复:安全漏洞、错误、数据丢失风险 |
| 🟠 重要 | 应该修复:逻辑错误、性能问题、缺少错误处理 |
| 🟡 建议 | 值得考虑:对清晰度或可维护性的显著改进 |
| 🟢 琐事 | 可选:次要样式偏好(慎用) |
示例:
🟠 重要:此函数未处理None,可能导致AttributeError。
```suggestion
if user is None:
raise ValueError("User cannot be None")
## GitHub建议
对于小代码更改,使用建议语法以便一键应用:
~~~
```suggestion
improved_code_here()
建议用于:重命名、拼写错误、小规模重构(1-5行)、类型提示、文档字符串。
避免用于:大规模重构、架构变更、模糊改进。
## 查找行号
```bash
# 从差异头:@@ -old_start,old_count +new_start,new_count @@
# 从new_start开始计数新增/修改行
grep -n "pattern" filename # 查找行号
head -n 42 filename | tail -1 # 验证行内容
```
## 备用方案:curl
如果`gh`不可用:
```bash
curl -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/{owner}/{repo}/pulls/{pr_number}/reviews" \
-d '{
"commit_id": "{commit_sha}",
"event": "COMMENT",
"body": "审查总结。",
"comments": [
{"path": "file.py", "line": 42, "side": "RIGHT", "body": "评论"},
{"path": "file.py", "start_line": 10, "line": 12, "side": "RIGHT", "body": "多行"}
]
}'
```
## 总结
1. 分析代码并识别重要问题(最小化琐事)
2. 发布**一次**审查,包含所有内联评论打包
3. 对每个评论使用优先级标签(🔴🟠🟡🟢)
4. 对具体代码更改使用建议语法
5. 保持审查正文简要(细节在内联评论中)
6. 如果没有问题:发布简短消息