mirror of
https://github.com/jeffusion/gitea-ai-assistant.git
synced 2026-03-27 10:05:50 +00:00
ad8aaa06150d1b22060d46a2c7dac677deff2264
AI Code Review for Gitea
基于Bun和TypeScript的Gitea代码审查助手,自动为Pull Request和单个提交提供AI驱动的代码审查。
功能特点
- ✅ 自动对Gitea Pull Request进行代码审查
- ✅ 自动对成功状态的单个提交进行代码审查
- ✅ 使用OpenAI API进行代码分析
- ✅ 提供总体代码审查评论
- ✅ 支持代码行级别评论
- ✅ 安全的Webhook验证
技术栈
- Bun
- TypeScript
- Hono (轻量级Web框架)
- OpenAI API
- Gitea API
安装
-
克隆仓库
git clone <repository-url> cd ai-review -
安装依赖
bun install -
配置环境变量
复制.env.example文件为.env并填写必要配置:
cp .env.example .env编辑.env文件,填写Gitea和OpenAI相关配置。
配置项
GITEA_API_URL: Gitea API URL (例如:http://your-gitea-instance.com/api/v1)GITEA_ACCESS_TOKEN: Gitea 访问令牌OPENAI_BASE_URL: OpenAI 请求地址OPENAI_API_KEY: OpenAI API密钥OPENAI_MODEL:OpenAI 使用模型CUSTOM_SUMMARY_PROMPT: 自定义总结审查提示 (可选)CUSTOM_LINE_COMMENT_PROMPT: 自定义行评论提示 (可选)PORT: 应用监听端口 (默认: 3000)WEBHOOK_SECRET: Webhook秘钥,用于验证请求来源
使用方法
-
启动服务
bun run dev # 开发模式 # 或 bun run start # 生产模式 -
在Gitea仓库中配置Webhook
在Gitea仓库设置中添加两个Webhook:
Pull Request审查webhook:
- URL:
http://your-server:3000/webhook/gitea/pull_request - 内容类型:
application/json - 秘钥: 设置为与
WEBHOOK_SECRET环境变量相同的值 - 触发事件: 选择"Pull Request"
提交状态审查webhook:
- URL:
http://your-server:3000/webhook/gitea/status - 内容类型:
application/json - 秘钥: 设置为与
WEBHOOK_SECRET环境变量相同的值 - 触发事件: 选择"Status"
注意: 老端点
/webhook/gitea仍然支持Pull Request审查,但仅作向后兼容使用。 - URL:
Webhook签名验证
为确保请求安全,系统使用Gitea的Webhook签名验证机制:
- 设置环境变量
WEBHOOK_SECRET为一个安全的随机字符串 - 在Gitea的Webhook配置中,使用相同的字符串作为"秘钥"
- 每次请求时,系统会验证请求头中的
X-Gitea-Signature - 如果签名验证失败,请求会被拒绝处理
验证方法使用SHA-256哈希算法,在处理高负载的情况下这能防止恶意请求并保证请求来源的真实性。
功能说明
PR代码审查
当PR被创建或更新时,系统会自动进行代码审查,提供总体评价和行级评论。
单个提交审查
当提交状态变为"success"(如CI通过)时,系统会:
- 对该提交进行代码审查
- 提供总体评价作为提交评论
- 尝试找到关联的PR,添加行级评论
这对于增量工作尤其有用,可以只对最新的变更进行审查,避免重复评审已审查过的代码。
开发
bun run dev: 开发模式运行bun run build: 构建项目bun run start: 生产模式运行bun run lint: 运行代码风格检查
许可证
MIT
自定义AI审查提示
默认情况下,AI代码审查工具配置为只对明显的bug和严重问题进行评论。你可以通过环境变量自定义AI使用的提示:
自定义总结提示
设置CUSTOM_SUMMARY_PROMPT环境变量来自定义代码审查总结。你可以在提示中使用以下变量,它们会在运行时被自动替换:
${context.diffContent}- 代码差异内容${JSON.stringify(fileInfo, null, 2)}- 变更文件的完整信息
自定义行评论提示
设置CUSTOM_LINE_COMMENT_PROMPT环境变量来自定义行级评论生成。你可以在提示中使用以下变量:
${file.path}- 当前文件路径${fileContent}- 文件的完整内容${file.changes.map(c =>${c.lineNumber}: ${c.content} (${c.type === 'add' ? '新增' : '上下文'})).join('\n')}- 变更行的上下文
请确保你的自定义提示返回正确的格式,特别是对于行评论,必须返回有效的JSON数组。
Description
Gitea功能增强助手,基于Bun和TypeScript开发,提供AI驱动的代码审查等增强功能。本工具通过Webhook与Gitea集成,自动对Pull Request和提交进行代码审查,并提供智能化的代码质量分析。
⚠️ ARCHIVED: Original GitHub repository no longer exists. Preserved as backup on 2026-03-27T15:06:50.991Z
Languages
TypeScript
96.3%
CSS
1.7%
Shell
1.4%
JavaScript
0.4%
Dockerfile
0.2%