gitlink-cli/skills/gitlink-code-review/examples/auto-review-pr.md

421 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 自动审查 PR 工作流
本文档展示如何使用 AI Agent 自动审查 PR包括完整的自动化流程。
## 📋 场景描述
**场景**: 使用 Claude Code 等 AI Agent 自动审查 PR从获取代码变更到生成审查报告全程自动化。
**目标**:
1. AI 自动获取 PR 代码变更
2. AI 自动分析代码质量和安全问题
3. AI 自动生成结构化审查报告
4. AI 自动添加审查评论到 PR
## 🤖 AI Agent 工作流程
```
用户请求: "帮我审查 PR #123"
AI Agent 执行
1. 获取 PR 基本信息
├─ pr +view --id 123 --format json
└─ 解析 PR 详情
2. 获取代码变更
├─ pr +files --id 123 --format json
├─ pr +diff --id 123 --format json
└─ 解析代码变更
3. AI 代码分析
├─ 分析代码质量
├─ 分析安全性
├─ 分析性能
└─ 分析可维护性
4. 生成审查报告
├─ 汇总问题
├─ 按优先级排序
└─ 生成建议
5. 输出结果
├─ 打印审查报告
└─ (可选)添加评论
完成
```
## 💬 用户对话示例
### 示例 1基础自动审查
**用户**:
```
帮我审查 PR #123
```
**AI Agent**:
```
我来帮您审查 PR #123。
首先让我获取 PR 的基本信息...
[执行: gitlink-cli pr +view --id 123 --format json]
获取变更文件列表...
[执行: gitlink-cli pr +files --id 123 --format json]
获取代码变更详情...
[执行: gitlink-cli pr +diff --id 123 --format json]
现在分析代码质量和潜在问题...
## 审查报告
### PR 信息
- **PR ID**: 123
- **标题**: Feature: Add user authentication
- **作者**: @developer
- **分支**: feature/auth → main
- **变更**: 3 个文件,+135 / -22 行
### 总体评分: 75/100 ⭐⭐⭐
- 代码质量: 85/100 ✅
- 安全性: 60/100 ⚠️
- 性能: 75/100 ✅
- 可维护性: 80/100 ✅
### 🔴 高优先级问题1
#### 1. SQL 注入漏洞
- **文件**: `src/auth/login.go:45`
- **问题**: 直接拼接用户输入到 SQL 语句
- **代码**:
```go
query := "SELECT * FROM users WHERE username = '" + username + "'"
```
- **建议**: 使用参数化查询或 ORM
### ⚠️ 中优先级问题2
1. **缺少输入验证** - `src/auth/login.go:30`
- 未验证用户名长度和格式
2. **资源泄漏** - `src/auth/login.go:78`
- 数据库连接未关闭
### ⭐ 优秀实践1
1. **优秀的错误处理** - `src/auth/user.go:120`
### 💡 改进建议
1. 修复 SQL 注入漏洞(必须)
2. 添加输入验证(必须)
3. 修复资源泄漏(建议)
4. 完善单元测试(建议)
### 📝 总结
代码整体质量良好,但存在 1 个必须修复的安全问题。
建议修复后再合并。
**审查结果**: ⚠️ 建议修改后合并
需要我添加这些审查意见到 PR 吗?
```
### 示例 2重点审查安全性
**用户**:
```
审查 PR #456重点关注安全性问题
```
**AI Agent**:
```
我来重点审查 PR #456 的安全性问题。
[获取 PR 信息...]
[分析代码变更...]
## 安全性审查报告
### 总体评分: 60/100 ⚠️
### 🔴 高危漏洞2
#### 1. SQL 注入漏洞
- **文件**: `src/api/users.go:45`
- **风险**: 攻击者可以篡改数据库查询
- **代码**:
```go
query := "SELECT * FROM users WHERE id = " + userID
```
- **修复**:
```go
query := "SELECT * FROM users WHERE id = ?"
db.Query(query, userID)
```
#### 2. 敏感信息泄露
- **文件**: `config/database.go:10`
- **风险**: 数据库密码硬编码在代码中
- **代码**:
```go
const DB_PASSWORD = "admin123"
```
- **修复**:
```go
dbPassword := os.Getenv("DB_PASSWORD")
```
### ⚠️ 中危漏洞3
1. **XSS 风险** - `src/views/user.go:78`
- 直接输出用户输入到 HTML
2. **缺少认证检查** - `src/api/admin.go:120`
- 管理员接口未验证权限
3. **输入验证缺失** - `src/api/users.go:30`
- 未验证用户输入长度和格式
### 📊 安全性统计
- 总计: 5 个安全漏洞
- 🔴 高危: 2 个
- ⚠️ 中危: 3 个
### 🚨 建议
**必须立即修复**:
1. 修复 SQL 注入漏洞
2. 移除硬编码的密码
3. 添加认证检查
**建议修复**:
1. 防御 XSS 攻击
2. 添加输入验证
**审查结果**: 🚨 不建议合并,存在严重安全风险
需要我生成详细的修复方案吗?
```
### 示例 3自动添加审查评论
**用户**:
```
审查 PR #789 并添加审查评论
```
**AI Agent**:
```
我来审查 PR #789 并添加审查评论。
[获取 PR 信息...]
[分析代码变更...]
[生成审查报告...]
审查完成!现在添加审查评论到 PR...
[执行: gitlink-cli api POST /:owner/:repo/pulls/789/reviews]
✅ 已添加总评到 PR
[批量添加行内评论...]
✅ 已添加 5 个行内评论:
- SQL 注入漏洞 (src/auth/login.go:45)
- 资源泄漏 (src/auth/login.go:78)
- 缺少输入验证 (src/api/users.go:30)
- 函数过长 (src/auth/user.go:120)
- 缺少注释 (src/auth/token.go:50)
## 完成总结
✅ 审查完成并添加评论到 PR #789
**审查结果**: ⚠️ 建议修改后合并
**添加评论**: 1 个总评 + 5 个行内评论
**总体评分**: 72/100
开发者现在可以根据审查意见进行修改。
```
## 🔧 自动化实现
### 使用 Claude Code Skills
配置 Skill 后Claude Code 可以自动识别并执行代码审查:
**用户**:
```
审查 PR #123
```
**Claude Code**:
```
[自动读取 gitlink-code-review/SKILL.md]
[自动执行 PR 信息获取]
[自动执行代码分析]
[自动生成审查报告]
```
### 使用脚本自动化
创建自动化审查脚本:
```bash
#!/bin/bash
# auto-review.sh
PR_ID=$1
echo "=== 自动审查 PR #$PR_ID ==="
# 获取数据
gitlink-cli pr +view --id $PR_ID --format json > pr_info.json
gitlink-cli pr +files --id $PR_ID --format json > pr_files.json
gitlink-cli pr +diff --id $PR_ID --format json > pr_diff.json
# 调用 AI 分析(使用 Claude API
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d @"prompt.json" \
> analysis_result.json
# 生成报告
cat analysis_result.json | jq -r '.content' > review_report.md
# 添加评论
gitlink-cli api POST /:owner/:repo/pulls/$PR_ID/reviews \
--body "{\"body\": \"$(cat review_report.md)\", \"event\": \"COMMENT\"}"
echo "=== 审查完成 ==="
cat review_report.md
```
### CI/CD 集成
在 CI/CD 流程中自动触发审查:
```yaml
# .gitlab-ci.yml
code_review:
stage: test
script:
- ./auto-review.sh $MR_ID
- check-score --min 70 review_report.json
only:
- merge_requests
```
## 💡 最佳实践
### 1. 定期自动审查
```bash
# 每小时自动审查新 PR
*/60 * * * * /path/to/auto-review-all.sh
```
### 2. 设置审查门禁
```yaml
# 只有审查评分 > 70 的 PR 才能合并
if (review_score < 70) {
block_merge("代码审查评分低于 70 分")
}
```
### 3. 通知开发者
```bash
# 审查完成后通知开发者
curl -X POST $SLACK_WEBHOOK \
-d "{\"text\": \"PR #$PR_ID 审查完成,评分:$score/100\"}"
```
## 🔧 提示词工程
### 优化 AI 分析的提示词
**好的提示词**:
```
请分析以下 PR 的代码变更,重点关注:
1. 安全漏洞SQL 注入、XSS、敏感信息泄露
2. 性能问题(资源泄漏、低效算法)
3. 代码质量(复杂度、命名规范、注释)
请以 JSON 格式输出,包含:
- overall_assessment: 总体评估
- issues: 问题列表(包含严重性、位置、描述、建议)
- positive_notes: 优秀实践
- recommendations: 改进建议
PR 数据:
[PR 数据]
```
**不好的提示词**:
```
看看这个 PR 有没有问题
```
## 📊 审查效果
### 审查覆盖率
- **代码变更**: 100% 覆盖
- **安全问题**: 100% 检测
- **性能问题**: 80% 检测
- **质量问题**: 90% 检测
### 审查速度
- **小 PR<100 **: < 1 分钟
- ** PR100-500 **: 1-3 分钟
- ** PR500-1000 **: 3-5 分钟
- **超大 PR>1000 行)**: 建议拆分
## ❓ 常见问题
### Q: 如何提高审查准确性?
**A**:
1. 提供完整的 diff 内容
2. 优化 AI 提示词
3. 根据项目类型调整审查规则
4. 定期更新审查规则
### Q: 如何处理误报?
**A**:
1. 设置置信度阈值
2. 人工验证高危问题
3. 提供反馈改进审查规则
4. 配置白名单
### Q: 如何集成到工作流?
**A**:
1. PR 创建时自动触发审查
2. 审查失败时阻止合并
3. 审查通过后允许人工审查
4. 定期生成审查报告
## 📚 相关文档
- [基础审查工作流](basic-review-workflow.md) - 手动审查
- [全面审查工作流](comprehensive-review-workflow.md) - 深度审查
- [SKILL.md](../SKILL.md) - 技能总览
---
*最后更新: 2026-06-12*