kgod
|
216bb51c92
|
feat: 重构被审查分支的选择逻辑
push 审查
check_branches 现在只表示「要做 push 审查的分支」,不再兼作 PR 目标分支:
- 勾选具体分支:这些分支的 push 会审查,通过后晋级到管理分支
- 新增「任意分支」(*):所有分支的 push 都审查
- 留空:只审 PR,不审 push
PR 审查
始终覆盖「勾选的分支 + 管理分支」作为合并目标。
管理分支是最终目标,不需要出现在检查分支里也能被保护。
管理分支从候选中移除
分支选择器不再列出管理分支——它是终点,不需要再检查自己。
安全边界
「任意分支」只扩大审查范围,不会把任意分支自动合并进管理分支;
晋级仍要求分支被显式勾选(promotesToManaged)。
同时修正一处语义错误
早先 branchMatches 把空列表当成「审所有分支」,导致新建仓库在用户
还没选分支时就审查全部 push。现在空列表明确表示「只审 PR」。
测试:分支匹配矩阵重写,覆盖 push/PR/晋级/保护目标四类判定,共 20 项通过。
|
2026-09-21 17:12:57 +08:00 |
|
kgod
|
34f2897888
|
fix: 自动安装 Webhook、修正 PR 审查范围与分支匹配语义
三个导致「提交了新 PR 但没有任何反应」的独立问题:
1. 从不创建 Webhook
服务只被动接收事件,但配置仓库时不会去 Gitea 里建 Webhook,
结果仓库永远收不到 push / PR 事件,看起来和坏掉一样。
- 保存仓库时自动创建或更新 Webhook(POST /repos 返回值带 webhook 结果)
- 新增 GET/POST /api/repos/:id/webhook 查询与修复
- 仓库列表新增 Webhook 列,未配置可一键「修复 Webhook」
- 新增 CR_WEBHOOK_URL,留空则推导为「Gitea 主机名 + 本服务端口」
2. 审查范围用了错的分支做基准
resolveRange 优先取 managed_branch 而不是 job.base_ref,
于是 PR 被拿去和一个无关分支比较;当两者内容相同就报
「base and head resolve to the same commit」直接跳过。
改为优先用该改动实际要合入的分支(PR 的目标分支),
仅 push 事件回退到 managed_branch。
3. 检查分支的匹配语义反了
原先要求 PR 的 head(功能分支)出现在 check_branches 里,
而用户配置的是「要保护的目标分支」(如 prd/test),
功能分支永远不会被列出,所以 PR 一律被过滤掉。
新增 pullRequestMatches:PR 的 base 命中检查分支即审查,
head 命中仍保留支持。这样「审查所有合入 prd/test 的改动」成立。
验证:PR offerpai/offerpai_h5#2 重跑通过,7 条内联评论、
2 条阻断、commit status failure、Issue #3 创建。
|
2026-09-20 14:44:26 +08:00 |
|
kgod
|
6dc77ce907
|
feat: 仓库导入、分支模型重构与审查历史摘要
仓库接入
- 新增「从 Gitea 导入」:用全局 Token 列出可见仓库,一键建配置
- 新增仓库只填 Git 地址,自动解析 owner/name,支持 https/ssh/scp 写法
- 新增「测试连接」按钮,保存前即可校验地址并拉取分支
分支模型
- 由单一 base_branch + glob 改为「一个管理分支 + 多个检查分支」
- 管理分支是唯一合并目标;检查分支全部纳入监控
- 支持从任意分支克隆创建管理分支
- 审查基准改为管理分支的 merge-base;仅目标为管理分支的 PR 才自动合并
- 旧库自动迁移:base_branch 播种 managed_branch,branch_patterns 展开为检查分支
审查历史
- 新增 review_records 表与「审查历史」页
- 记录触发来源、PR 链接、审查范围、阻断阈值、发布方式、自动合并设置、
排除路径、LLM 模型、token 消耗、耗时、需求背景与全部审查意见
- 详情弹窗一览,支持按仓库过滤
AI 摘要
- 新增独立摘要模块(app/lib/summary.js),与代码审查提示词分离
- 专用提示词输出固定四节、500 字内的中文记录:结论/范围/问题/要点
- 与代码审查共用全局 LLM 设置;摘要失败不影响审查与合并,可单条重跑
修复
- 摘要改用内置 fetch:运行镜像没有 curl,原先 spawn curl 必然 ENOENT
- 去掉 blob:none 部分克隆并把凭据写入 .git/config:
惰性取 blob 不会带上 per-command extraHeader,私有库会报 could not read Username
UI
- 审查背景改为多行文本域(可滚动)
- 分支改为可点选列表,管理分支高亮
- 仓库表格展示管理分支与检查分支
|
2026-09-20 12:38:23 +08:00 |
|
kgod
|
ed172bf369
|
feat: Gitea 自动代码审查服务
基于 OpenCodeReview 的 webhook 服务:监听 Gitea 的 push 与 Pull Request 事件,
调用 OCR 审查 diff,把结果发布回 Gitea,并按阻断阈值决定是否自动合并。
主要能力:
- Push / PR 事件触发,支持分支 glob 过滤与 PR-only / push-only 范围
- PR 内联评论(按 diff 行号定位)、汇总评论、Issue 生命周期、提交状态
- 可配置阻断阈值(严重级别 / 类别 / 任意意见)
- 无阻断问题时自动合并,审查覆盖不完整时拒绝合并
- 内置 Web 后台:仓库配置、任务日志、失败重跑、连通性自检
- SQLite 持久化,worker 重启回收卡死任务,失败自动重试
实现为独立服务而非 Gitea Action:本机 act_runner 指向的实例不可达,
且后台配置与任务历史需要独立进程承载。
|
2026-09-20 12:09:46 +08:00 |
|