|
|
@@ -0,0 +1,40 @@
|
|
|
+# 待办:CI 编译闸门(防红构建进入 cfclub 主线)
|
|
|
+
|
|
|
+> 起草:2026-10-29|选定方案:**B 远端 CI 检查**(互补 A 本地 hook)|编译范围:**仅 iwintrue(远端)与 local(本机)**
|
|
|
+> 来源:T29-B2 合入排查发现 `ee71f7716` 红构建未被拦截即 push 至 `origin/cfclub`
|
|
|
+> 状态:已记入任务池 `OPS-CI-GATE`(pending)|文档随本次提交进入 `origin/cfclub`
|
|
|
+
|
|
|
+## 一、问题背景
|
|
|
+
|
|
|
+- `ee71f7716`(后台 Dashboard 重设计)推送至 `origin/cfclub` 时,`StatsController.java` 含 **4 处 lambda 捕获非 effectively-final 局部变量**的编译错误(`hotArticleList`/`articleDwellList`/`userDwellList`/`productDwellList` 在 `forEach` lambda 内被 `add` 捕获,随后又用 `.subList(0,10)` 重新赋值),任何 JDK 版本均编译失败。
|
|
|
+- 该提交**未经编译即 push**,CI / 流程均未拦截,导致 `origin/cfclub` 在约 4 小时内处于**不可编译**状态,阻断了所有基于主线的构建、部署与后续合入(含 T29-B2)。
|
|
|
+- 根因:缺少"代码进入长期分支前必须通过编译"的强制闸门。
|
|
|
+- 已临时修复:分支 `fix/statscontroller-effectively-final`(提交 `66e9cc2ba`,已并入 `origin/cfclub` @ `60e526602`)。
|
|
|
+
|
|
|
+## 二、选定方案
|
|
|
+
|
|
|
+- **B 远端 CI 检查(主闸门,已选)**:push / PR 触发 `mvn compile` + 单测,红灯禁止合并 / 禁止 fast-forward 到受保护分支。
|
|
|
+- **A 本地 pre-push hook(互补,建议保留)**:`git push` 前自动跑 `mvn -q -DskipTests compile`,红构建根本出不了本机;走 repo 级 `githooks/` + `core.hooksPath githooks`,免每人手动装。
|
|
|
+- **C 分支保护**:`cfclub`(及主要长期分支)设为受保护分支,仅允许经绿灯(A/B)的合并进入;禁止直接 push 红构建。
|
|
|
+
|
|
|
+**编译执行范围(明确约束)**:编译闸门**仅在 `iwintrue`(远端 CI 环境)与 `local`(开发者本机)上执行**,不在其他环境运行。
|
|
|
+
|
|
|
+## 三、验收标准
|
|
|
+
|
|
|
+1. 任一分支在 push / merge 到 `cfclub` 前,`mvn compile`(及前端构建)必须 **0 error**。
|
|
|
+2. 红构建**无法进入** `cfclub`——本地 hook 拦截,或远端 CI 红灯拦截。
|
|
|
+3. 开发者在 `git push` 前能于本机获得明确编译结果,平均自检耗时 < 1 分钟。
|
|
|
+4. 闸门本身不显著拖慢正常 push(建议仅编译、跳过测试;测试交给 CI)。
|
|
|
+
|
|
|
+## 四、落地步骤草案(方案 B 先行,A 互补)
|
|
|
+
|
|
|
+1. **B(远端 CI)**:在 `git.iwintrue.com` 的 CI runner / webhook 上接编译+单测任务,针对 `cfclub` 的 push/PR 触发;红灯禁止合入。
|
|
|
+2. **A(本地 hook)**:编写 `githooks/pre-push`,检测待 push 的 ref 是否涉及 `cfc-backend` 改动,若是则跑 `mvn -q -DskipTests compile`,失败退出 1;仓库根加说明(README / AGENTS.md 一节)启用方式 `git config core.hooksPath githooks`。
|
|
|
+3. **C(分支保护)**:`cfclub` 设为受保护分支。
|
|
|
+4. 验证:人为制造一处编译错误,确认 push 被拒;修复后 push 通过。
|
|
|
+
|
|
|
+## 五、关联记录
|
|
|
+
|
|
|
+- 修复提交:`fix/statscontroller-effectively-final`(`66e9cc2ba`,已并入 `origin/cfclub` @ `60e526602`)
|
|
|
+- 排查日志:`.workbuddy/memory/2026-10-28.md`(18:43 / 22:42 / 00:02 三段)
|
|
|
+- 任务池条目:`OPS-CI-GATE`(pending)
|