Skip to content

CheYulin/CodeReview

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

code-review

GitCode PR 做证据驱动的自动化代码审查。支持两种使用方式:

方式 入口 说明
Claude Code Skill /yuanrong-pr-review <pr-id> 在 Claude Code 中一键审查:自动理解 Issue → 准备 workspace → 生成 review → 发布评论
Gemini CLI 脚本 ./scripts/review-pr.sh <pr-id> 本地用 Gemini CLI(订阅模式)审查,再手动发布

方式一:Claude Code Skill(推荐)

直接在 Claude Code 对话中使用:

/yuanrong-pr-review 1037

Skill 会自动完成四步工作流

第零步:理解背景

  • 从 GitCode API 获取 PR 标题、描述、base 分支(自动适配 master / 0.8.1 / v0.9.x
  • meta.jsonrelated.issues 有关联 Issue,逐个获取并阅读理解,确保 Section A 能对照 Issue 要求
  • related.rfcs 有设计文档链接,读取 RFC 内容理解设计意图

第一步:准备 workspace

  • 自动 bootstrap meta.json(首次)
  • check_pr_refs.py 从 API 获取 base/head SHA,自动检测并修复分支(无需手动指定)
  • 生成两圆点 diff(base_ref..head_ref

第二步:生成审查

读取 diff + 关联 Issue 摘要 + GEM 规则 + evidence rubric,按严格证据标准生成结构化 review.md

第三步:发布评论

  • 逐行评论:解析 Section E findings,映射到正确的文件行号,POST 到 GitCode
  • 整体评论:将完整 review.md POST 为一条 PR 评论
  • 指纹去重,避免重复评论

关联 Issue

/yuanrong-pr-review 1037

如果 review 前 meta.json 没有 issue,可以在对话中告诉我关联哪些 Issue,我会先 fetch 理解,再审查。


方式二:Gemini CLI 脚本

  1. 安装 Gemini CLI,执行 gemini login
  2. 首次跑某个 PR 号时,若不存在 workspace/inputs/pr-<id>/meta.jsonreview-pr.sh 会调用 bootstrap_meta.py 自动生成模板。关联 Issue 可在命令行传入 --issues 234,233,或编辑 meta 中的 related.issues / related.rfcs
  3. 在仓库根目录执行:
# 只指定 PR 号(默认会 bootstrap meta)
./scripts/review-pr.sh 449

# 同时传入关联 Issue 号(逗号分隔,会写入 meta 并注入 Traceability)
./scripts/review-pr.sh 470 --issues 234,233,235

# 可选:RFC 链接用 | 分隔;同时输出 JSON
./scripts/review-pr.sh 449 --issues 234 --rfcs 'https://example.com/rfc.md' --json
  1. 阅读 results/pr-<id>/review.md(及可选的 review.json)。

多分支支持

不需要手动指定 base 分支check_pr_refs.py 从 GitCode API 自动获取 PR 的目标分支:

场景 自动处理
PR 合入 master 确认 base.ref=master,diff origin/master..pr-head
PR 合入 0.8.1 API 返回 base.ref=0.8.1,自动 fetch origin/0.8.1,更新 meta.json,重新 diff
PR 合入其他分支 同上,自动适配

PR 源/目的与 API 校验(推荐):若已导出 GITCODE_TOKEN,生成 diff 前会自动调用 check_pr_refs.py 比对 API SHAs 与本地 refs。未设置 token 时跳过校验。手动跳过:--no-pr-checkCODE_REVIEW_SKIP_PR_CHECK=1

把审查结论发到 GitCode PR 评论

使用 GitCode Open APIPOST /api/v5/repos/:owner/:repo/pulls/:number/comments)。

  1. 在 GitCode 设置 → 访问令牌 创建 token
  2. 导出环境变量:
export GITCODE_TOKEN='你的令牌'
  1. 发布:
# 逐行评论(Section E findings → 代码行)
./scripts/post-review-inline.sh 449
./scripts/post-review-inline.sh 449 --dry-run   # 预览

# 整体评论(完整 review.md)
./scripts/post-review-to-gitcode.sh 449
./scripts/post-review-to-gitcode.sh 449 --dry-run
./scripts/post-review-to-gitcode.sh 449 --no-banner

原理与机制

环节 做法
仓库 pr_diff.pyworkspace/pr-<id>/repo clone 或 仅 fetch 更新已有 clone,按 meta.json 拉取 PR 头分支,再 git diff base..head 写入 diff.patch
多分支 check_pr_refs.py 调用 GitCode API 获取 base.ref,自动 fetch 对应远端分支并更新 base_ref,适配 master / 0.8.1 / v0.9.x 等。
关联 Issue fetch_pr_issues.py 从 API 获取每个 Issue 的标题/正文,注入审查提示词。审查 Section A 须对照 Issue 要求。
提示词 gemini -p 的内容由:业务上下文 + 审查 Gem + 证据型输出细则 + Issue 摘要 拼接。与网页版 Gemini Gems 共用同一套 Gem 文稿。
模型输入 标准输入 = 仅 diff 文件gemini-p 与 stdin 组合),避免超大 argv。
身份 脚本内 unset GEMINI_API_KEY,走 CLI 登录态,而非 API Key。

目录结构

.
├── README.md
├── plans/                    # 给人看的操作说明
├── scripts/
│   ├── review-pr.sh              # 生成 diff → 调用 gemini
│   ├── post-review-to-gitcode.sh # 整体评论 POST 到 GitCode
│   ├── post-review-inline.sh     # 逐行评论 POST 到 GitCode
│   ├── check-pr-refs.sh          # 单独运行 PR ref 校验
│   └── lib/
│       ├── pr_diff.py              # clone/fetch、写 diff.patch
│       ├── bootstrap_meta.py       # 首次生成 meta.json
│       ├── check_pr_refs.py        # API SHA vs 本地 base/head ref(多分支自动适配)
│       ├── fetch_pr_issues.py      # 获取关联 Issue 摘要注入提示词
│       ├── meta_links_prompt.py    # 从 meta 生成 Traceability 段
│       ├── merge_meta_cli.py       # --issues/--rfcs 写入 meta
│       ├── parse_section_e.py      # 解析 review.md Section E findings
│       ├── diff_position.py        # 映射 path:line → 文件行号
│       ├── post_gitcode_inline.py  # 逐行评论 POST(含指纹去重)
│       └── post_gitcode_comment.py # 整体评论 POST
├── docs/meta-json.md         # meta.json 字段说明
├── workspace/
│   ├── inputs/pr-<id>/       # 本地 meta.json
│   └── pr-<id>/              # clone、diff.patch、run.log
├── assets/
│   ├── prompts/              # 业务提示 + 输出细则
│   ├── gems/                 # 与网页 Gems 对齐的 GEM 文稿
│   └── skills/               # Claude Code Skill(/yuanrong-pr-review)
└── results/pr-<id>/          # 审查输出 review.md、指纹等

workspace/(含 workspace/inputs/)已在 .gitignore 中忽略。


Git commit message template

git config commit.template .gitmessage

About

Code Review of OpenYuanRong Datasystem

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors