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
|
a0b15fb2d9
|
feat: 打通 推送→审查→晋级→关闭 Issue 的完整闭环
直接推送也能晋级
往受保护分支直接推代码(没有 PR)时,审查通过后自动开一个
<分支> → <管理分支> 的 PR 并合并它,而不是放弃自动合并。
已存在同类 open PR 时复用它,不重复创建。
晋级 PR 不再被重复审查
自动创建的 PR 带 PROMOTION_MARKER,其 pull_request 事件直接跳过。
同一批提交在 push 时已经审过,重复审会在合并完成后凭空造出 Issue
(此前确实产生了这样一个幽灵 Issue)。
合并即关闭该仓库全部审查 Issue
两条触发路径:
- 服务自己完成合并后立即关闭
- 人在 Gitea 手动合并时,pull_request closed + merged=true 事件触发关闭
手动合并是「代码已落地」最可靠的信号,不再依赖 push 侧的 merge 提交探测。
晋级使用 merge 而非 squash
squash 会把晋级提交重写成全新提交,两个长期分支每晋级一次就多分叉
一点,最终必然冲突(已在 offerpai_h5 上复现 add/add 冲突)。
merge 保留共同祖先,下次晋级只携带新提交。
合并可等待性
Gitea 异步计算 mergeable,原先只轮询 5 秒就放弃。改为指数退避约 30 秒,
并区分「尚未算出」(继续等)与「确实冲突」(放弃)。失败时往 PR 留评论
说明原因,不再只写服务日志。
验证(真实 webhook):
推送 test → 审查通过 → 自动开 PR #9 (test→prd) → merge 合并
→ pull_request merged 事件 → 关闭 0 个待处理 Issue
prd 顶端前进为合并提交,test/prd 保持一致,无幽灵 Issue 产生
|
2026-09-20 16:23:45 +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 |
|