From 58ba6aabb3add2ca8259cb4b30671091d5cd2bb0 Mon Sep 17 00:00:00 2001 From: DJJ Date: Thu, 4 Dec 2025 23:22:16 +0800 Subject: [PATCH 1/3] only pr review --- .github/workflows/commit-review.yml | 169 ---------------------------- .github/workflows/pr-review.yml | 2 +- README.md | 78 +------------ 3 files changed, 7 insertions(+), 242 deletions(-) delete mode 100644 .github/workflows/commit-review.yml diff --git a/.github/workflows/commit-review.yml b/.github/workflows/commit-review.yml deleted file mode 100644 index 7fb9962..0000000 --- a/.github/workflows/commit-review.yml +++ /dev/null @@ -1,169 +0,0 @@ -name: Commit Review - -on: - push: - branches: - - 'v*' - -jobs: - review: - runs-on: ubuntu-latest - permissions: - contents: read - pull-requests: write - id-token: write - steps: - - name: Checkout repository - uses: actions/checkout@v5 - with: - fetch-depth: 2 - - - name: Review Commits with Claude - id: review - uses: anthropics/claude-code-action@v1 - env: - ANTHROPIC_BASE_URL: ${{ secrets.ANTHROPIC_BASE_URL }} - with: - github_token: ${{ secrets.CUSTOM_GITHUB_TOKEN }} - anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} - prompt: | - 你是一个代码审查助手。请对最新的 commit 进行简单审查。 - - ## 审查信息 - - 仓库: ${{ github.repository }} - - 分支: ${{ github.ref_name }} - - Commit SHA: ${{ github.sha }} - - ## 审查步骤 - - 1. 使用 git show 查看 commit 详情和变更 - 2. 检查 commit 信息是否清晰、代码变更是否合理、是否有明显问题 - - ## 输出格式(简体中文) - - ## 📝 Commit 审查 - ${{ github.ref_name }} - - **Commit**: {short_sha} - **信息**: {commit message} - - ### 变更概要 - {变更文件列表} - - ### 审查结果 - ✅/⚠️/❌ {简要评价} - - {如有问题,列出1-3个要点} - - ## 注意事项 - 1. 保持简洁 - 2. 只关注明显问题 - 3. 使用简体中文 - claude_args: | - --allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*)" --json-schema '{"type":"object","properties":{"conclusion":{"type":"string","enum":["PASS","WARN","FAIL"]},"summary":{"type":"string","maxLength":50}},"required":["conclusion","summary"]}' - - - name: Notify Feishu - if: always() - run: | - STATUS="${{ job.status }}" - SHORT_SHA="${{ github.sha }}" - SHORT_SHA="${SHORT_SHA:0:7}" - - # 解析结构化输出 - STRUCTURED_OUTPUT='${{ steps.review.outputs.structured_output }}' - if [ -n "$STRUCTURED_OUTPUT" ] && [ "$STRUCTURED_OUTPUT" != "null" ]; then - CONCLUSION=$(echo "$STRUCTURED_OUTPUT" | jq -r '.conclusion // "UNKNOWN"') - SUMMARY=$(echo "$STRUCTURED_OUTPUT" | jq -r '.summary // "审查完成"') - else - CONCLUSION="UNKNOWN" - SUMMARY="未获取到审查结果" - fi - - # 根据结论设置样式 - case "$CONCLUSION" in - "PASS") - EMOJI="✅" - TEMPLATE="green" - ;; - "FAIL") - EMOJI="❌" - TEMPLATE="red" - ;; - "WARN") - EMOJI="⚠️" - TEMPLATE="orange" - ;; - *) - EMOJI="💬" - TEMPLATE="blue" - ;; - esac - - if [ "$STATUS" != "success" ]; then - EMOJI="⚠️" - TEMPLATE="orange" - SUMMARY="Action 执行异常" - fi - - curl -X POST "https://open.feishu.cn/open-apis/bot/v2/hook/${{ secrets.FEISHU_WEBHOOK_TOKEN }}" \ - -H "Content-Type: application/json" \ - -d '{ - "msg_type": "interactive", - "card": { - "header": { - "title": { - "tag": "plain_text", - "content": "'"${EMOJI} Commit Review - ${CONCLUSION}"'" - }, - "template": "'"${TEMPLATE}"'" - }, - "elements": [ - { - "tag": "div", - "fields": [ - { - "is_short": true, - "text": { - "tag": "lark_md", - "content": "**仓库**\n${{ github.repository }}" - } - }, - { - "is_short": true, - "text": { - "tag": "lark_md", - "content": "**分支**\n${{ github.ref_name }}" - } - } - ] - }, - { - "tag": "div", - "text": { - "tag": "lark_md", - "content": "**Commit**: '"${SHORT_SHA}"'" - } - }, - { - "tag": "div", - "text": { - "tag": "lark_md", - "content": "**审查结果**: '"${SUMMARY}"'" - } - }, - { - "tag": "action", - "actions": [ - { - "tag": "button", - "text": { - "tag": "plain_text", - "content": "查看 Commit" - }, - "type": "primary", - "url": "${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }}" - } - ] - } - ] - } - }' diff --git a/.github/workflows/pr-review.yml b/.github/workflows/pr-review.yml index a648d9e..81cef9d 100644 --- a/.github/workflows/pr-review.yml +++ b/.github/workflows/pr-review.yml @@ -24,7 +24,7 @@ jobs: env: ANTHROPIC_BASE_URL: ${{ secrets.ANTHROPIC_BASE_URL }} with: - github_token: ${{ secrets.CUSTOM_GITHUB_TOKEN }} + github_token: ${{ github.token }} anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} use_sticky_comment: true show_full_output: true diff --git a/README.md b/README.md index a50edf9..6d4d0d5 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,12 @@ # CR-template -基于 Claude AI 的自动化代码审查模板,支持 PR Review 和 Commit Review,并通过飞书 Webhook 发送通知。 +基于 Claude AI 的自动化 PR 代码审查模板,通过飞书 Webhook 发送通知。 ## 功能特性 | 功能 | 说明 | |-----|------| | PR Review | PR 创建/更新时自动审查代码质量和架构设计 | -| Commit Review | v* 分支 push 时自动审查最新 commit | | 飞书通知 | 审查完成后发送卡片消息到飞书群 | | 中文输出 | 所有审查报告和通知使用简体中文 | | Sticky Comment | PR 多次审查会更新同一条评论 | @@ -20,8 +19,7 @@ ``` .github/workflows/ -├── pr-review.yml # PR 审查工作流 -└── commit-review.yml # Commit 审查工作流 +└── pr-review.yml # PR 审查工作流 ``` ### 2. 配置 GitHub Secrets @@ -47,8 +45,6 @@ ## 触发条件 -### PR Review - 当 Pull Request 满足以下条件时触发: | 事件 | 说明 | @@ -60,16 +56,8 @@ > **注意**: 草稿 PR 不会触发审查 -### Commit Review - -当 push 到以下分支时触发: - -- `v*` - 所有以 `v` 开头的分支(如 `v1.0`、`v2.0-beta`) - ## 审查维度 -### PR Review - **代码质量** - 代码风格一致性 - 代码复杂度 @@ -86,16 +74,8 @@ - 模块化程度 - API 设计评估 -### Commit Review - -- Commit 信息是否清晰 -- 代码变更是否合理 -- 是否有明显问题 - ## 审查报告示例 -### PR Review 报告 - ```markdown ## 🔍 PR 代码审查报告 @@ -120,28 +100,10 @@ 本次 PR 实现了用户认证的核心功能,代码结构清晰... ``` -### Commit Review 报告 - -```markdown -## 📝 Commit 审查 - v1.0 - -**Commit**: `abc1234` -**信息**: feat: 添加登录功能 - -### 变更概要 -- src/login.ts (+50) -- tests/login.test.ts (+30) - -### 审查结果 -✅ PASS - 代码变更合理,无明显问题 -``` - ## 飞书通知 审查完成后会发送飞书卡片消息: -### PR Review 通知 - ``` ┌──────────────────────────────────┐ │ ✅ PR Review - APPROVE │ (绿色卡片) @@ -154,43 +116,16 @@ └──────────────────────────────────┘ ``` -### Commit Review 通知 - -``` -┌──────────────────────────────────┐ -│ ✅ Commit Review - PASS │ (绿色卡片) -├──────────────────────────────────┤ -│ 仓库: owner/repo 分支: v1.0 │ -│ Commit: abc1234 │ -│ 审查结果: 代码变更合理,无明显问题 │ -│ [查看 Commit] │ -└──────────────────────────────────┘ -``` - ### 卡片颜色说明 | 审查结论 | 卡片颜色 | |---------|---------| -| APPROVE / PASS | 🟢 绿色 | -| REQUEST_CHANGES / FAIL | 🔴 红色 | -| WARN | 🟠 橙色 | +| APPROVE | 🟢 绿色 | +| REQUEST_CHANGES | 🔴 红色 | | COMMENT / 其他 | 🔵 蓝色 | ## 自定义配置 -### 修改触发分支 - -编辑 `.github/workflows/commit-review.yml`: - -```yaml -on: - push: - branches: - - 'v*' # 所有 v 开头的分支 - - 'release/*' # 添加 release 分支 - - 'main' # 添加 main 分支 -``` - ### 修改审查 Prompt 编辑 workflow 文件中的 `prompt` 字段: @@ -219,8 +154,7 @@ claude_args: | . ├── .github/ │ └── workflows/ -│ ├── pr-review.yml # PR 审查工作流 -│ └── commit-review.yml # Commit 审查工作流 +│ └── pr-review.yml # PR 审查工作流 └── README.md ``` @@ -228,7 +162,7 @@ claude_args: | - 使用 [claude-code-action](https://github.com/anthropics/claude-code-action) v1 - 通过 `--json-schema` 获取结构化输出用于飞书通知 -- PR Review 使用 `use_sticky_comment` 合并多次评论 +- 使用 `use_sticky_comment` 合并多次评论 ## License From 6929b1ebe954cfa59ea0ec5c869713bcadaf38af Mon Sep 17 00:00:00 2001 From: DJJ Date: Thu, 4 Dec 2025 23:26:04 +0800 Subject: [PATCH 2/3] add custom_github_token --- .github/workflows/pr-review.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-review.yml b/.github/workflows/pr-review.yml index 81cef9d..a648d9e 100644 --- a/.github/workflows/pr-review.yml +++ b/.github/workflows/pr-review.yml @@ -24,7 +24,7 @@ jobs: env: ANTHROPIC_BASE_URL: ${{ secrets.ANTHROPIC_BASE_URL }} with: - github_token: ${{ github.token }} + github_token: ${{ secrets.CUSTOM_GITHUB_TOKEN }} anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} use_sticky_comment: true show_full_output: true From 4129f8fbdfca14e8229e200c6745a338da2cbbb3 Mon Sep 17 00:00:00 2001 From: DJJ Date: Thu, 4 Dec 2025 23:32:18 +0800 Subject: [PATCH 3/3] add more tools --- .github/workflows/pr-review.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-review.yml b/.github/workflows/pr-review.yml index a648d9e..2537d8c 100644 --- a/.github/workflows/pr-review.yml +++ b/.github/workflows/pr-review.yml @@ -76,7 +76,7 @@ jobs: ALWAYS Answer in 简体中文. claude_args: | - --allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*)" --json-schema '{"type":"object","properties":{"conclusion":{"type":"string","enum":["APPROVE","REQUEST_CHANGES","COMMENT"]},"summary":{"type":"string","maxLength":50},"critical_count":{"type":"integer"},"important_count":{"type":"integer"},"suggestion_count":{"type":"integer"}},"required":["conclusion","summary","critical_count","important_count","suggestion_count"]}' + --allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Read,Glob,Grep,Task" --json-schema '{"type":"object","properties":{"conclusion":{"type":"string","enum":["APPROVE","REQUEST_CHANGES","COMMENT"]},"summary":{"type":"string","maxLength":50},"critical_count":{"type":"integer"},"important_count":{"type":"integer"},"suggestion_count":{"type":"integer"}},"required":["conclusion","summary","critical_count","important_count","suggestion_count"]}' - name: Notify Feishu if: always() run: |