Skip to content

wujunchuan/gitlab-merge-request-bot

Repository files navigation

GitLab Merge Request Bot

GitLab Merge Request 工具集,提供 MR 摘要生成、代码审查和周报功能。

🌟 主要功能

📝 MR 摘要生成

  • 自动生成 Merge Request 的变更摘要
  • 支持增量分析,只分析新的 commit
  • 智能识别变更类型和影响范围
  • 🎯 智能分支检测: 无需手动输入 MR URL,自动根据当前分支获取对应的 MR

🔍 AI 代码审查

  • 全面分析: 代码质量、安全性、性能、最佳实践
  • 行级评论: 精确定位问题到具体代码行
  • 分级反馈: Critical/Major/Minor/Suggestion 四个级别
  • 智能建议: 不仅指出问题,还提供解决方案
  • 🎯 智能分支检测: 无需手动输入 MR URL,自动根据当前分支获取对应的 MR

📊 周报统计

  • 统计团队最近的 MR 活动
  • 生成结构化的周报内容

🚀 CLI 使用方法

💡 新特性: mergecode-review 命令现在支持智能分支检测!无需手动输入 MR URL,工具会自动根据当前 Git 分支查找对应的 Merge Request。

安装

# 开发模式安装
pip install -e .

# 或者正式安装
pip install .

环境配置

# GitLab 配置
export GITLAB_TOKEN="your_gitlab_token"
export GITLAB_BASE_URL="https://gitlab.com/api/v4"

# AI 配置 (OpenAI 或兼容 API)
export OPENAI_API_KEY="your_api_key"
export OPENAI_BASE_URL="https://api.openai.com/v1"  # 可选
export OPENAI_MODEL="gpt-4"  # 可选,默认 gpt-3.5-turbo

命令

1. 查看版本 (version)

显示当前版本信息:

gitlab-merge-request-bot version

2. 获取周报 (weekly)

获取最近7天的 MR 摘要:

gitlab-merge-request-bot weekly

3. 生成 MR 摘要 (merge)

为指定的 MR 生成摘要并评论:

# 指定 MR URL
gitlab-merge-request-bot merge <MR_URL>

# 自动获取当前分支对应的 MR(推荐)
gitlab-merge-request-bot merge

# 示例
gitlab-merge-request-bot merge https://gitlab.com/your-project/-/merge_requests/123
gitlab-merge-request-bot merge  # 自动分析当前分支的 MR

4. 🆕 AI 代码审查 (code-review)

对指定的 MR 进行全面的代码审查:

# 指定 MR URL
gitlab-merge-request-bot code-review <MR_URL>

# 自动获取当前分支对应的 MR(推荐)
gitlab-merge-request-bot code-review

# 示例
gitlab-merge-request-bot code-review https://gitlab.com/your-project/-/merge_requests/123
gitlab-merge-request-bot code-review  # 自动审查当前分支的 MR

代码审查功能特性

  • 🔒 安全分析: SQL 注入、XSS、输入验证等安全问题检测
  • 性能检查: 识别性能瓶颈和优化机会
  • 代码质量: 可读性、维护性、复杂度分析
  • 🎨 代码风格: 命名规范、格式化建议
  • 🧪 测试建议: 测试覆盖率和边界条件检查

5. 创建 MR 并分析 (create)

创建新的 MR 并自动生成摘要:

gitlab-merge-request-bot create [target_branch] [assignee]

# 示例
gitlab-merge-request-bot create master john.doe
gitlab-merge-request-bot create develop
gitlab-merge-request-bot create  # 默认目标分支为 master

💡 代码审查示例

审查结果展示

总体评论:

🤖 代码审查报告

📋 总体评估
代码质量良好,主要关注点:安全性和错误处理

💡 总体建议
1. 建议为所有的外部 API 调用添加超时和重试机制
2. 考虑使用参数化查询避免 SQL 注入风险

行级评论:

🚨 **CRITICAL** - 🔒 SECURITY

这里存在 SQL 注入风险。直接拼接用户输入到 SQL 查询中是危险的。

💡 **建议**: 使用参数化查询:
SELECT * FROM users WHERE id = %s

更多详细信息请参考 代码审查使用文档

🛠️ API 开发

项目提供了完整的 Python API,可以集成到其他应用中:

from workflow.summary_merge_request import SummaryMergeRequest
from workflow.code_review import CodeReviewMergeRequest
from gitlab.merge_request import get_merge_request_by_source_branch
from gitlab.util import get_current_git_branch, get_git_remote_project_path
from gitlab.merge_request import get_project_by_path
from pocketflow import AsyncFlow

# MR 摘要(指定 URL)
async def generate_summary(mr_url):
    flow = AsyncFlow(start=SummaryMergeRequest())
    result = await flow.run_async({"url": mr_url})
    return result

# MR 摘要(自动获取当前分支的 MR)
async def generate_summary_auto():
    # 获取当前分支对应的 MR URL
    current_branch = get_current_git_branch()
    project_path = get_git_remote_project_path()
    project_info = get_project_by_path(project_path)
    project_id = str(project_info["id"])
    mr_info = get_merge_request_by_source_branch(project_id, current_branch)
    mr_url = mr_info["web_url"]
    
    flow = AsyncFlow(start=SummaryMergeRequest())
    result = await flow.run_async({"url": mr_url})
    return result

# 代码审查
async def review_code(mr_url):
    flow = AsyncFlow(start=CodeReviewMergeRequest())
    result = await flow.run_async({"url": mr_url})
    return result

📁 项目结构

src/
├── ai/                    # AI 相关模块
│   ├── auth.py           # AI 服务认证
│   ├── get_prompt.py     # Prompt 管理
│   └── prompt/           # Prompt 模板
│       ├── summary_merge_request.md
│       └── code_review.md
├── gitlab/               # GitLab API 集成
│   ├── auth.py          # GitLab 认证
│   ├── comment.py       # 评论和讨论功能
│   ├── merge_request.py # MR 操作
│   ├── diff_parser.py   # Diff 解析器
│   └── util.py          # 工具函数
├── workflow/            # 工作流模块
│   ├── summary_merge_request.py  # MR 摘要工作流
│   └── code_review.py           # 代码审查工作流
├── utils/               # 通用工具
└── cli.py              # 命令行接口

🔧 高级配置

自定义审查规则

可以通过修改 src/ai/prompt/code_review.md 来自定义审查标准:

# 在 prompt 中添加特定的规则
- 检查函数长度不超过 50 行
- 确保所有公共方法都有文档字符串
- 验证错误处理的完整性

配置文件过滤

# 在代码中配置跳过特定文件
skip_files = [
    "package-lock.json",
    "yarn.lock", 
    "*.min.js",
    "vendor/*"
]

🤝 贡献指南

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

🙋‍♂️ 支持

如果遇到问题或有功能建议,请:

  1. 查看 Issues 了解已知问题
  2. 创建新的 Issue 描述问题或建议
  3. 参考 代码审查使用文档 了解详细功能

🔗 相关链接

About

GitLab Merge Request 工具集,提供 MR 摘要生成和周报功能。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages