审查自动化
自动化审查重复部分(lint、测试、陈旧 PR)使审查者聚焦需人判断的部分。
为什么
审查有两部分: 机械(风格、类型、测试、覆盖)和判断(逻辑、架构、安全、命名)。机械部分重复、易错、正是工具更强——linter 永不漏风格违规、类型检查器永不漏空解引用、覆盖工具永不误数。自动化机械部分使审查者时间全花判断——需人洞察工具不能做的部分。这使审查更快(15 分钟非一小时)、更有价值(反馈关于设 计非格式)、更一致(工具每次用同标准而人变)。自动化也移社交摩擦——无人喜评论缺分号、评论者被怨。让工具强机械标准使人审查关于协作和改进非 policing。
何时使用
项目开始时设自动化、团队识别重复审查评论时加工具。每季审查自动化加新检查。
如何做
1. CI 自动化机械检查 - linter(ESLint、Biome): 风格、常见 bug、不安全模式 - 格式化器(Prettier): 无格式讨论 - 类型检查器(TypeScript): 无类型错误 - 测试覆盖: 新代码要求覆盖 - 依赖扫描(Dependabot、Snyk): 无已知漏洞 2. 自动化 PR 工作流 - 按改文件自动分配审查者(CODEOWNERS) - 按标题或文件自动标 PR(bug、功能、重构) - 30 天后自动关陈旧 PR(stale bot) - 过所有检查且批准的 PR 自动合并(低风险变更) 3. 自动化审查提醒 - PR 24 小时无审查提醒审查者 - 审查有评论但 48 小时无回应提醒作者 - 周末或非工作时间不提醒 4. 用 AI 审查工具做首过 - GitHub Copilot、CodeRabbit 或类似做初始审查 - AI 抓常见问题(缺测试、不清命名) - 人审查者聚焦 AI 漏的问题 5. 保持人在判断环中 - 自动化处理机械、人处理判断 - 永不自动批准 PR——人须审查逻辑 - 目标是释人于机械非替代
示例
// .github/CODEOWNERS——自动分配审查者
# 全局审查者
* @alice @bob
# 前端变更
src/components/ @carol @dave
src/views/ @carol @dave
# 后端变更
src/api/ @eve @frank
src/services/ @eve @frank
# 数据库迁移——需资深审查
db/migrations/ @alice @bob
# 安全敏感路径
src/auth/ @alice @bob
src/payments/ @alice @bob
// .github/workflows/auto-label.yml——自动标 PR
name: 自动标
on: [pull_request]
jobs:
label:
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v5
with:
configuration-path: .github/labeler.yml
// .github/labeler.yml
"bug":
- any: ['src/**']
body: 'fix|bug|patch'
"feature":
- any: ['src/**']
body: 'feat|add|new'
"refactor":
- any: ['src/**']
body: 'refactor|clean|rename'
// .github/workflows/stale.yml——关陈旧 PR
name: 陈旧
on:
schedule:
- cron: "0 0 * * *" # 每天
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
stale-pr-message: "此 PR 开 30 天无活动。7 天内无新活动将关。"
days-before-pr-stale: 30
days-before-pr-close: 7
// AI 审查: CodeRabbit 或 GitHub Copilot
// 自动审查 PR 留评论如:
// "这函数缺测试。考虑加输入列表为空情况的测试。"
// "变量名 'd' 不清。考虑 'daysUntilExpiry'。"
// 人审查者然后聚焦:
// "这有竞条件——两请求可更新同记录。
// 考虑用乐观锁。"
// (AI 不抓这;需人判断。)常见问题
- ⚠自动化过多使人审查变橡皮图章——CI 过、AI 批准、人点批准、逻辑 bug 发因无人实际读 diff。
- ⚠无人审查自动合并过 CI 的 PR——依赖名有错字的 PR 过所有检查、自动合并、生产坏构建。
- ⚠配 CODEOWNERS 但不保持更新——文件指离团队审查者、PR 分到不活跃账户、审查停。
- ⚠用 AI 审查替代人审查——AI 抓缺测试和命名但漏竞条件、安全漏洞和架构问题、团队依赖它批准。
最佳实践
- ✓自动化机械检查(lint、格式、类型检查、覆盖、依赖扫描)使人审查者聚焦判断(逻辑、架构、安全)——这分工产最好审查。
- ✓永不无人审查自动批准或自动合并——自动化抓机械问题 但逻辑、安全和设计需工具不能提供的人判断。
- ✓团队变时保持 CODEOWNERS 更新——陈旧 CODEOWNERS 文件分 PR 到不活跃审查者、审查静默停。
- ✓用 AI 审查作首过抓常见问题然后人审查判断——AI 抓 30%(缺测试、命名)、人抓 70%(逻辑、架构、安全)、两者都需。