tanmay-alpha/automated-code-review-tool
GitHub: tanmay-alpha/automated-code-review-tool
基于 CodeBERT 的多终端自动化代码审查平台,通过 VS Code 扩展、GitHub Action 和 Web 仪表板检测传统 linter 遗漏的反模式。
Stars: 1 | Forks: 0
automated-code-review-tool 🔍
Multi-Surface Automated Code Review Platform
## 功能简介
automated-code-review-tool 是一个多终端自动化代码审查平台。它通过 VS Code 扩展、GitHub webhooks 和 GitHub Action 获取源文件和 PR diffs,通过 FastAPI ML worker 运行反模式检测,并通过 Next.js 仪表板展示内联波浪线提示、PR 评论和质量评分。
三个用户终端分别为:
- **VS Code 扩展** — 保存时提供内联诊断
- **GitHub Action** — 在 pull_request 事件中进行 PR 审查注释
- **Next.js Web 仪表板** — 仓库级别的质量趋势和发现记录
生产环境检测器:确定性后备扫描器
Fine-tuned checkpoint:不可用
模型训练 pipeline:验证中
真实冻结数据集:不可用
已验证的评估工件:不可用
Redis 限流:已实现
Hunk 级别本地化:已实现
该平台搭载了一个确定性后备扫描器作为其主要的生产环境检测器。Fine-tuned 的 CodeBERT 模型 pipeline 目前正在验证中。
## 架构
```
┌──────────────────────────┐
│ User Surfaces │
├──────────────────────────┤
│ Next.js Dashboard │
│ VS Code Extension │
│ GitHub Action │
└────────────┬─────────────┘
│ HTTPS
▼
┌──────────────────────────┐
│ Spring Boot API │
│ Java 21 · JWT · JPA │
│ GitHub OAuth · Webhooks │
└────┬───────────────┬─────┘
│ │
JPA │ │ HTTP (internal)
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ PostgreSQL 16 │ │ FastAPI ML │
│ Redis 7 cache │ │ Worker │
└──────────────────┘ └────────┬─────────┘
│
▼
┌──────────────────┐
│ HF Hub / Rules │
│ (model storage) │
└──────────────────┘
```
### 系统拓扑
```
graph TD
UserSurface["User Surfaces (Dashboard / VS Code / GitHub Action)"]
Gateway["Spring Boot Gateway (Java 21)"]
DB[(PostgreSQL 16)]
Cache[(Redis 7)]
MLWorker["FastAPI ML Worker (Python 3.11)"]
HFRepo[("HuggingFace Hub or Rule-based Scanner")]
UserSurface -->|HTTPS API Requests / cookies / API Keys| Gateway
Gateway -->|JPA Persistence| DB
Gateway -->|Rate Limits & Sessions| Cache
Gateway -->|HTTP REST Client| MLWorker
MLWorker -->|Loads fine-tuned model OR rule-based scan| HFRepo
```
## Webhook 审查与检测 Pipeline
当开发者在已连接的仓库中发起 PR 时,系统会运行以下端到端流程:
```
sequenceDiagram
autonumber
actor Developer
participant GitHub as GitHub Webhook
participant Gateway as Spring Boot API
participant DB as Postgres & Redis
participant MLWorker as FastAPI ML Worker
participant Model as CodeBERT / Rule Scanner
Developer->>GitHub: Pushes code / Opens PR
GitHub->>Gateway: POST /api/webhook/github (HMAC Signature + Delivery ID)
rect rgb(240, 248, 255)
Note over Gateway,DB: Check Signature & Idempotency
Gateway->>Gateway: Verify SHA-256 HMAC Signature
Gateway->>DB: Query processed_webhooks (exists check)
DB-->>Gateway: Exists (Skip) or Not Exists (Save & Proceed)
end
Gateway-->>GitHub: HTTP 200 OK (Immediate response)
rect rgb(255, 240, 245)
Note over Gateway,MLWorker: Asynchronous PR Scanning (ThreadPoolTaskExecutor)
Gateway->>GitHub: GET PR Diff file (using decrypted OAuth Token)
GitHub-->>Gateway: Code Diff Payload
Gateway->>MLWorker: POST /ml/review (Raw Diff Content)
MLWorker->>Model: Sliding-window inference OR regex scan
Model-->>MLWorker: Findings + quality score
MLWorker-->>Gateway: Findings + quality score
end
Gateway->>DB: Save Scan PullRequestEntity & MlFindings
Gateway->>GitHub: POST /repos/{repo}/issues/{number}/comments (Quality Report)
```
### Pipeline 阶段说明
1. **身份验证与 HMAC 签名验证。** 每个 GitHub webhook 都会使用恒定时间的 SHA-256 HMAC 与仓库注册的密钥进行比对验证。
2. **有状态幂等性。** Webhook 投递会在 Redis 和 PostgreSQL (`processed_webhooks`) 中进行跟踪,以唯一的 `X-GitHub-Delivery` 标头作为键,从而杜绝重放攻击和冗余的模型运行。
3. **异步派发。** API 会立即向 GitHub 返回 `200 OK`。PR diff 获取和 ML worker 编排将在配置好的 Spring `ThreadPoolTaskExecutor` 上运行。
4. **Diff 分割与滑动窗口。** 大型 PR diff 会被分割成 512-token 的窗口,并带有 50-token 的重叠步长,以便适应 CodeBERT 的序列限制。每个窗口的 logits 会通过 max-pool 进行聚合。
5. **模型推理。** FastAPI worker 托管了一个基于 CodeBERT 的多标签分类器,包含六个二元头:`SECURITY`、`PERFORMANCE`、`ARCHITECTURE`、`RELIABILITY`、`READABILITY` 和 `MAINTAINABILITY`。当模型不可用时,基于规则的后备扫描器将返回关于硬编码凭据、SQL 注入、异步路径中的同步 I/O、裸 except 和二次循环的检测结果。
6. **报告。** 检测结果将被持久化,PR 会随之更新,同时一份 Markdown 格式的质量报告将作为评论发布到 PR 上。
## 技术栈
| 组件 | 语言 / 技术 | 路径 |
| ---------------- | ------------------------------- | ---------------------- |
| **API** | Java 21 · Spring Boot 3.3 | `apps/api/` |
| **安全** | JWT, OAuth 2.0, HMAC-SHA256 | `apps/api/src/main/java/com/automatedcodereviewtool/security/` |
| **ML Worker** | Python 3.11 · FastAPI · CodeBERT | `apps/ml-worker/` |
| **Web 仪表板**| TypeScript · Next.js 15 | `apps/web/` |
| **VS Code 扩展** | TypeScript · VS Code API | `apps/vscode-ext/` |
| **GitHub Action**| TypeScript · @actions/core | `github-action/` |
| **数据库** | PostgreSQL 16 · Flyway | `apps/api/src/main/resources/db/migration/` |
| **缓存 / 队列**| Redis 7 | `apps/api/src/main/resources/` |
| **ML 模型托管**| HuggingFace Hub (或基于规则) | 可通过 `MODEL_NAME` 环境变量配置 |
| **CI/CD** | GitHub Actions | `.github/workflows/` |
| **容器化**| Docker · Render blueprints | `Dockerfile`, `render.yaml` |
## 反模式类别
| 类别 | 描述 | 示例 |
| ---------------- | -------------------------------------------------- | ----------------------------------------- |
| SECURITY | 漏洞和凭据泄露 | 硬编码 API 密钥、SQL 注入、弱加密 |
| PERFORMANCE | 低效的数据访问或计算 | N+1 查询、二次循环 |
| ARCHITECTURE | 结构 / 模块级别的坏味道 | 上帝类、循环导入 |
| RELIABILITY | 故障模式和缺失的安全防护 | 裸 except、缺失重试、缺失超时 |
| READABILITY | 命名和结构清晰度 | 魔法数字、晦涩的命名、过长的方法 |
| MAINTAINABILITY | 代码腐化和重复 | 被注释掉的代码、重复的逻辑 |
## 快速开始
### 使用 Docker Compose 自托管
```
git clone https://github.com/tanmay-alpha/automated-code-review-tool.git
cd automated-code-review-tool
cp .env.example .env # fill in GITHUB_CLIENT_ID, JWT_SECRET, etc.
docker compose up --build # postgres, redis, ml-worker, api, web
```
一旦 web 容器健康运行,即可打开 `http://localhost:3000`。
### 部署到 Render
该仓库提供了一个 `render.yaml` 蓝图,定义了四个服务:
- `automated-code-review-tool-db` — PostgreSQL 16,Standard 计划
- `automated-code-review-tool-redis` — Redis 7,Starter 计划
- `automated-code-review-tool-api` — Spring Boot web 服务,Standard 计划
- `automated-code-review-tool-ml-worker` — FastAPI web 服务,Standard 计划
将仓库作为“基础设施即代码”项目连接到 Render,这四个服务将自动启动。在首次部署之前,请设置 `sync: false` 环境变量(`JWT_SECRET`、`ENCRYPTION_KEY`、`GITHUB_CLIENT_ID/SECRET`、`HF_TOKEN`、`ML_WORKER_SECRET`)。
### 连接到 Supabase (生产云数据库)
要在 Render 上部署或在本地运行时将应用程序连接到 **Supabase** PostgreSQL:
1. 在 [Supabase](https://supabase.com) 创建一个项目。
2. 在 Render 上将 `SPRING_DATASOURCE_URL`、`SPRING_DATASOURCE_USERNAME` 和 `SPRING_DATASOURCE_PASSWORD` 设置为您的 Supabase JDBC 凭据。
3. Spring Boot 的 Flyway 集成会在启动时自动初始化并迁移您的 Supabase 数据库 schema。
有关完整的集成分步指南,请参阅 **[SUPABASE_SETUP.md](SUPABASE_SETUP.md)**。
### 训练 CodeBERT 模型
```
cd apps/ml-worker
pip install -r requirements-train.txt
# 1. 生成训练数据(4k 合成样本)
python training/generate_training_data.py \
--output-dir training/data \
--train-size 4000 --val-size 400 --test-size 400
# 2. 在 GPU 机器或 Colab Pro 上进行 Fine-tune
python training/train.py \
--output-dir ./automated-code-review-tool-model \
--data-dir training/data \
--model-name microsoft/codebert-base \
--epochs 5 --batch-size 16 --lr 2e-5 \
--push-to-hub --hf-repo YOUR_USER/automated-code-review-tool-codebert
# 3. (可选)在留出测试集上进行评估
python training/evaluate.py \
--model-dir ./automated-code-review-tool-model \
--data-dir training/data \
--output evaluation_results.json
```
完整的 pipeline 请参阅 `apps/ml-worker/training/RUN_TRAINING.md`。
## 评估
评估框架已完全实现。可以使用精确率、召回率和 macro-F1 在留出测试集上对训练好的模型进行评估。有关训练 pipeline,请参阅 `apps/ml-worker/training/evaluate.py` 和 `RUN_TRAINING.md`。
| 模型 | Macro-F1 | 精确率 | 召回率 | 推理延迟 (p50) |
| ------------------------------ | -------- | --------- | ------ | ----------------------- |
| CodeBERT fine-tune | _run evaluate.py_ | _run_ | _run_ | _measure_ |
| 基于规则的基线 (regex) | _run evaluate.py_ | _run_ | _run_ | ~5 ms |
## API 参考
### `POST /api/scan/file` — 文件级扫描 (VS Code 扩展,内部)
```
curl -X POST http://localhost:8080/api/scan/file \
-H "Authorization: Bearer $AUTOMATED_CODE_REVIEW_TOOL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "for u in users:\n posts = Post.where(user=u)",
"language": "python",
"filePath": "app/services/posts.py"
}'
# → { "findings": [...], "qualityScore": 62.5 }
```
### `POST /api/auth/api-key/regenerate` — 签发新的 VS Code 密钥
```
curl -X POST http://localhost:8080/api/auth/api-key/regenerate \
-H "Cookie: automated_code_review_tool_session=$JWT" \
# → { "apiKey": "cl_live_..." }
```
## 安全实现
- **JWT token 黑名单** — 基于 JTI 的 token 失效机制实现安全登出
- **OAuth 2.0 集成** — 具备完善错误处理的 GitHub OAuth
- **API 密钥管理** — 支持轮换且具有限流功能的 API 密钥
- **HMAC-SHA256 webhook 验证** — 恒定时间签名比对
- **敏感数据脱敏** — 自动过滤日志中的凭据信息
- **加密存储** — 使用 AES-GCM 加密 GitHub OAuth token 和 webhook 密钥
- **容器加固** — 非 root 用户、只读文件系统、健康检查
- **输入验证** — 结合 bean validation 和大小限制的多层验证
## 简历要点
## 许可证
[MIT](LICENSE) — © 2026 Tanmay Mangal.
标签:AV绕过, CodeBERT, FastAPI, GitHub Actions, SOC Prime, 代码审查, 域名枚举, 开发工具, 自动笔记, 请求拦截, 错误基检测, 静态代码分析