Skip to content

goehou/Happy-Code-Review

Repository files navigation

Happy Code Review

多平台代码监控 + AI 代码审阅看板。把你的 GitLab / GitHub / Gitee 仓库活动(谁推了什么、代码库里有什么、最近提交 diff)聚合到一个网页, 并能对任意项目或提交一键发起 AI 代码审阅。

Python + Flask + SQLite,单文件 app.py。内网小团队零运维。


功能一览

看板 6 个模块(/)

# 模块 内容
最近推送 Webhook 实时捕获:谁推了 / 推到哪个分支 / 每次 commit 的 message + 文件增删改
代码库 API 轮询同步:项目路径 / 默认分支 / 可见性 / 最后活动 / 平台
贡献者提交 按贡献者筛选,展开其近 30 天提交,可加载更多
代码汇总 后台扫描的代码结构:每个项目文件数 / 语言分布 / 扫描时间
提交扫描 实时拉取的提交 diff:增删行 / 变更文件明细,可点开看完整 diff
语言统计 全平台聚合的语言(后缀)占比条形图

交互特性

  • 平台筛选:导航栏下拉,按 GitLab / GitHub / Gitee 实例过滤所有模块
  • 模块内搜索:每个模块卡片头右侧带搜索框(下拉框 + 搜索框二合一), 输入即过滤当前模块;与平台筛选联动共存
  • 卡片折叠:点卡片头展开/收起
  • Diff 详情弹窗:点提交「详情」看完整逐行 diff(增删行高亮)
  • AI 代码审阅:
    • 每个项目 / 提交旁有「审阅」按钮,一键绑定上下文并打开 AI 对话面板
    • 浮动面板支持多模型切换、多会话历史(本地持久化)、流式输出
    • 项目上下文 = 元信息 + 代码结构 + 文件树 + README + 最近提交
    • 提交上下文 = 元信息 + 完整 message + 完整 diff

多平台支持

一个 providers.json 配置任意多个实例,自动路由:

平台 轮询同步 Webhook 实时 diff 拉取
GitLab ✅(X-Gitlab-Token 校验)
GitHub ✅(HMAC 签名校验)
Gitee ✅(X-Gitee-Token 校验)

快速开始

1. 安装

cd gitlab-monitor
pip install -r requirements.txt

2. 配置 providers

复制示例并填入你的实例:

cp providers.json.example providers.json

providers.json 每个实例一项:

[
  {
    "name": "company-gitlab",          // 实例名(看板显示用)
    "platform": "gitlab",              // gitlab | github | gitee
    "api_base": "https://gitlab.example.com",
    "token": "glpat-xxxxxxxxxxxxxxxx", // 只读 token 即可
    "webhook_secret": "随机串",         // 与平台侧 webhook 配置一致
    "enabled": true
  }
]

向后兼容:没有 providers.json 时,回退读 .env 里的单个 GITLAB_URL / GITLAB_TOKEN / WEBHOOK_SECRET(旧部署不用改)。

3. 配置 AI 审阅(可选)

.env 填 OpenAI 兼容接口:

cp .env.example .env
变量 说明
AI_BASE_URL OpenAI 兼容接口地址
AI_API_KEY API key,不填则 AI 审阅不可用
AI_MODELS 模型列表,逗号分隔,看板下拉可切换

4. 启动

python app.py
# Running on http://0.0.0.0:5000

打开 http://<本机IP>:5000,「代码库」「代码汇总」应已自动同步。 配置 webhook 后,「最近推送」「提交扫描」实时出现。

5. 配置 Webhook(让推送实时到看板)

在各平台对应位置填:

  • URL: http://<monitor内网IP>:5000/webhook
  • Secret / Token: 与 providers.json 里该实例的 webhook_secret 完全一致
  • Trigger: 勾选 Push events
平台 配置位置
GitLab 项目 → Settings → Webhooks(或 Admin → System Hooks 全实例)
GitHub 仓库 → Settings → Webhooks
Gitee 仓库 → 管理 → WebHooks

webhook 是多平台自动路由的:按请求头(X-Gitlab-Event / X-GitHub-Event / X-Gitee-Event)识别来源,用对应 provider 验签 + 解析。


配置项参考

.env

变量 默认 说明
AI_BASE_URL OpenAI 兼容接口地址
AI_API_KEY 不填则 AI 审阅不可用
AI_MODELS 逗号分隔的模型列表
PORT 5000 监听端口
POLL_MINUTES 15 轮询间隔(项目多可调大)
DB_PATH gitlab_monitor.db SQLite 路径
VERIFY_SSL true 自签证书设 false
GITLAB_URL / GITLAB_TOKEN / WEBHOOK_SECRET 无 providers.json 时的回退单实例配置

providers.json

每项字段:name / platform / api_base / token / webhook_secret / enabled


HTTP 接口

方法 路径 用途
GET / 看板
GET /health 健康检查
POST /webhook 接收推送(多平台自动路由)
GET /api/events 推送事件列表
GET /api/contributors 贡献者列表
GET /api/contributors/commits?email=&limit=&offset=&days=30 贡献者提交
GET /api/commits/<sha>/diff 单个提交完整 diff
POST /api/commits/refresh-diffs 手动触发拉取最近 diff
GET /api/ai/models 可用 AI 模型
GET /api/projects/<id>/context 项目 AI 上下文
POST /api/ai/chat AI 对话(SSE 流式)

代码结构

gitlab-monitor/
├── app.py                    # 全部逻辑(路由 + providers + 轮询 + AI)
├── templates/dashboard.html  # 看板(单文件 HTML/CSS/JS)
├── providers.json.example    # 多平台配置示例
├── .env.example              # AI 等配置示例
├── requirements.txt
├── Dockerfile / docker-compose.yml
├── DESIGN.md                 # 链路与设计思路
└── cli_inspect.py            # 命令行排查工具

app.py 分块:

职责
Provider + GitLab/GitHub/GiteeProvider 三平台统一抽象:列表 / 提交 / diff / webhook 验签解析
webhook() 多平台路由 + 验签 + store_push()
poll_loop() / sync_projects() / sync_recent_commits() 定时拉存量
background_file_scanner() / update_code_summary() 后台扫描代码结构
build_project_context() / build_commit_context() 组装 AI 上下文
ai_stream() OpenAI 兼容 SSE 流式
dashboard() + API 路由 看板与前端数据接口

数据模型(SQLite):projects / push_events / commits / code_summary, 跨平台用 {platform}:{instance}:{remote_id} 全局 id 避免冲突。


部署

Docker

docker compose up -d --build
docker compose logs -f

数据落在 ./data/gitlab_monitor.dbproviders.json.env 用 volume 或 bind mount 挂进容器。

systemd

[Unit]
Description=GitLab Monitor
After=network.target

[Service]
WorkingDirectory=/opt/gitlab-monitor
EnvironmentFile=/opt/gitlab-monitor/.env
ExecStart=/opt/gitlab-monitor/venv/bin/gunicorn -b 0.0.0.0:5000 --workers 2 app:app
Restart=always

[Install]
WantedBy=multi-user.target

安全注意

  • providers.json.env 已在 .gitignore,别提交真实 token
  • token 只给只读权限(GitLab read_api、GitHub repo:read 之类),别用 admin token。
  • webhook_secret 必须设,否则任何人都能往 /webhook 灌假推送事件。
  • 看板默认无鉴权;暴露在内网以外时,在反代层加 Basic Auth 或限制 IP。
  • SQLite 文件定期备份。

设计思路

DESIGN.md。核心:

Webhook 抓增量(谁推了 / 推了什么,实时推)+ API 轮询抓存量(代码库有什么,定时拉),两路落同一个 SQLite, 一个看板合并读。多平台通过 provider 抽象统一,AI 审阅在看板上原地接入。


友情链接

About

Self-hosted multi-platform Git activity dashboard (GitLab/GitHub/Gitee) with built-in AI code review. Aggregates pushes, commits, diffs and code stats into one page. Flask + SQLite, single-file.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors