pr-reviewer

自动化分析 GitHub Pull Request 的代码变更,检测安全、错误处理与风格问题。

已扫描
适合谁
软件开发工程师、技术负责人与团队主管
不适合谁
无 GitHub 权限的普通用户、未配置 `gh` CLI 的开发者
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @briancolinger/pr-reviewer

Skill 说明

命令、参数、文件名以原文为准

PR Reviewer

GitHub 拉取请求的自动化代码审查工具。分析代码差异,检测安全问题、错误处理缺失、风格问题以及测试覆盖率。

前置条件

  • 已安装并认证 gh CLI(运行 gh auth status 验证)
  • 对仓库有访问权限(至少读取权限,写入权限用于发布评论)
  • 可选:安装 golangci-lint 用于 Go 语言检查,ruff 用于 Python 语言检查

快速开始

# 审查当前仓库中所有开放的拉取请求
scripts/github/pr-reviewer.sh check

# 审查指定的拉取请求
scripts/github/pr-reviewer.sh review 42

# 将审查结果作为 GitHub 评论发布
scripts/github/pr-reviewer.sh post 42

# 检查所有开放拉取请求的状态
scripts/github/pr-reviewer.sh status

# 列出未审查的拉取请求(适用于心跳或定时任务集成)
scripts/github/pr-reviewer.sh list-unreviewed

配置

可通过设置以下环境变量,或由脚本自动从当前 Git 仓库推断:

  • PR_REVIEW_REPO — GitHub 仓库格式为 owner/repo(默认:通过 gh repo view 自动检测)
  • PR_REVIEW_DIR — 本地检出路径,用于代码检查(默认:当前工作目录的 Git 根目录)
  • PR_REVIEW_STATE — 状态文件路径(默认:./data/pr-reviews.json
  • PR_REVIEW_OUTDIR — 报告输出目录(默认:./data/pr-reviews/

写入的目录

  • **PR_REVIEW_STATE**(默认:./data/pr-reviews.json)—— 记录已审查的拉取请求及其 HEAD 提交哈希
  • **PR_REVIEW_OUTDIR**(默认:./data/pr-reviews/)—— 存放 Markdown 格式的审查报告

检查内容

类别图标示例
安全性🔴代码中硬编码的凭据、AWS 密钥、敏感信息
错误处理🟡被丢弃的错误(Go 中使用 _ :=)、裸 except:(Python)、未检查的 Close() 调用
风险🟠直接调用 panic()process.exit()
代码风格🔵生产环境中使用 fmt.Print/print()/console.log、过长的代码行
TODO 标记📝代码中的 TODOFIXMEHACKXXX 注释
测试覆盖率📊修改了源码文件但未同步更新对应的测试文件

智能重审机制

记录每个拉取请求的 HEAD 提交哈希。仅在新提交推送后重新审查。可使用 review <PR#> 强制触发重审。

报告格式

报告以 Markdown 文件形式保存在输出目录中。每份报告包含:

  • 拉取请求元数据(作者、分支、变更内容)
  • 提交列表
  • 按语言/类型分类的修改文件
  • 自动化差异分析结果,包括文件、行号、类别和上下文
  • 测试覆盖率分析
  • 本地代码检查结果(当仓库已本地检出时)
  • 总结结论:🔴 安全问题 / 🟡 需关注 / 🔵 小建议 / ✅ 无问题

心跳/定时任务集成

可添加到周期性检查任务(如心跳检测、cron 任务或 CI 流水线)中:

UNREVIEWED=$(scripts/github/pr-reviewer.sh list-unreviewed)
if [ -n "$UNREVIEWED" ]; then
  scripts/github/pr-reviewer.sh check
fi

扩展自定义

脚本中的分析规则按语言组织。可通过在 analyze_diff() 函数中追加模式来新增检查规则:

# 添加新的 Go 语言检查模式
go_patterns.append((r'^\+.*os\.Exit\(', 'RISK', '直接调用 os.Exit() — 建议返回错误'))
B
@briancolinger

已收录 1 个 Skill

相关推荐