ci: 简化PR门禁,加速合并(减法重构) #745

Merged
xiaoxia merged 1 commits from fix/ci-simplify-merge-speed into develop 2026-07-22 22:22:04 +08:00
Owner

背景

越修越复杂,CI一层叠一层,开发被CI卡着。这次做减法,而不是继续打补丁。

改动(3个文件,净删52行)

1. auto-merge从7个门禁减到4个

  • 去掉:PR Build API / PR Build Worker / PR Build Web
  • 保留:Code Quality / Type Check / Migration / Frontend Lint
  • 效果:合并从12分钟+ → 3分钟
  • 构建验证移到develop分支push后做,不卡PR

2. PR构建简化(docker_build_only.sh)

  • 去掉 --load 导出镜像(本来就没用,只是验证构建)
  • 去掉本地缓存(12个runner不共享,反而添乱+增加复杂度)
  • 只用ACR远程缓存
  • 效果:构建更快,脚本更简单(100行→43行)

3. 修复Frontend Unit Tests环境bug

  • vitest从宿主机执行 → Docker Node容器中执行
  • 与step_frontend_install.sh的Docker Volume缓存对齐
  • 修复一直16秒挂的问题

4. Gitea分支保护同步更新

  • required_status_checks从7个→4个
  • 与auto-merge门禁保持一致

原则

  • 做减法,不做加法
  • PR阶段只卡真正能抓低级错误的快门禁
  • 慢的东西往后放,不阻塞开发
## 背景 越修越复杂,CI一层叠一层,开发被CI卡着。这次做减法,而不是继续打补丁。 ## 改动(3个文件,净删52行) ### 1. auto-merge从7个门禁减到4个 - 去掉:PR Build API / PR Build Worker / PR Build Web - 保留:Code Quality / Type Check / Migration / Frontend Lint - 效果:合并从12分钟+ → 3分钟 - 构建验证移到develop分支push后做,不卡PR ### 2. PR构建简化(docker_build_only.sh) - 去掉 `--load` 导出镜像(本来就没用,只是验证构建) - 去掉本地缓存(12个runner不共享,反而添乱+增加复杂度) - 只用ACR远程缓存 - 效果:构建更快,脚本更简单(100行→43行) ### 3. 修复Frontend Unit Tests环境bug - vitest从宿主机执行 → Docker Node容器中执行 - 与step_frontend_install.sh的Docker Volume缓存对齐 - 修复一直16秒挂的问题 ### 4. Gitea分支保护同步更新 - required_status_checks从7个→4个 - 与auto-merge门禁保持一致 ## 原则 - 做减法,不做加法 - PR阶段只卡真正能抓低级错误的快门禁 - 慢的东西往后放,不阻塞开发
xiaoxia added 1 commit 2026-07-22 22:15:24 +08:00
ci: 简化PR门禁,加速合并
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 48s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 49s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 54s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 56s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m10s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m15s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m5s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m28s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 2m45s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m49s
AI Code Review / AI Code Review (pull_request) Successful in 3m49s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m40s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m6s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 16s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 15m5s
ee763016d6
- auto-merge从7个门禁减到4个(去掉3个PR构建,不卡合并)
- PR构建去掉--load和本地缓存,纯构建验证(更快更简单)
- 修复Frontend Unit Tests环境:vitest改在Docker容器中运行
- Gitea分支保护同步更新为4个required门禁

🚀 预览环境已部署

项目 详情
PR号 #745
预览链接 https://pr-745.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #745 | | 预览链接 | [https://pr-745.preview.xiaoxiajianji.com](https://pr-745.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Collaborator

代码审查结果 - PR #745

⚠️ 问题(3个需要修改)

  1. .gitea/workflows/pr-automation.yml 第243-245行:移除了Docker镜像构建作业的门禁检查。

    • 说明:从required_checks列表中删除了 PR Build API/Worker/Web Image。如果这些CI作业仍然在流水线中运行(只是不再强制检查),那么构建失败将不会阻止PR合并。这会导致包含损坏Dockerfile的代码合并到主分支,破坏发布流程。
    • 后果:CI门禁失效,可能合并无法构建镜像的代码。
  2. scripts/ci/docker_build_only.sh 第26-34行:移除了 --load 参数,导致构建结果未加载到本地Docker环境。

    • 说明:原脚本使用 --load 将构建好的镜像加载到Runner的Docker Daemon中,供后续步骤(如集成测试)使用。新脚本仅构建而不加载(no output)。如果该流水线中存在依赖该镜像的后续步骤,或者该脚本被其他需要镜像的流水线复用,会导致“image not found”错误。
    • 后果:破坏了脚本的副作用,可能导致依赖该镜像的下游任务失败。
  3. scripts/ci/vitest_incremental.sh 第17, 26, 39行:移除了 cd apps/web 但依赖外部脚本处理工作目录,存在路径上下文不匹配风险。

    • 说明:脚本逻辑中Python部分生成的文件路径是相对于 apps/web 的(如 src/xxx.ts),因为执行了 replace('apps/web/', '')。现在脚本通过 step_frontend_run.sh 执行命令,如果 step_frontend_run.sh 没有显式切换到 apps/web 目录(例如它在仓库根目录执行),那么 npx vitest 将在根目录查找 src/xxx.ts 从而失败。
    • 后果:在特定环境下可能导致测试因文件路径找不到而失败。

💡 建议(1个可选)

  1. scripts/ci/docker_build_only.sh 第26-34行:移除了原有的重试机制,建议确认ACR(远程缓存)的稳定性。
    • 说明:原代码包含针对缓存损坏的重试逻辑,新代码完全依赖远程缓存。如果网络抖动或远程缓存不可用,构建将直接失败。考虑到CI环境的复杂性,建议保留简单的重试机制或确保远程缓存极其稳定。

格式检查通过 | 逻辑审查需修改 | ⚠️ 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 22:19:15 | 模型:

## 代码审查结果 - PR #745 ### ⚠️ 问题(3个需要修改) 1. **.gitea/workflows/pr-automation.yml 第243-245行**:移除了Docker镜像构建作业的门禁检查。 - **说明**:从`required_checks`列表中删除了 `PR Build API/Worker/Web Image`。如果这些CI作业仍然在流水线中运行(只是不再强制检查),那么构建失败将不会阻止PR合并。这会导致包含损坏Dockerfile的代码合并到主分支,破坏发布流程。 - **后果**:CI门禁失效,可能合并无法构建镜像的代码。 2. **scripts/ci/docker_build_only.sh 第26-34行**:移除了 `--load` 参数,导致构建结果未加载到本地Docker环境。 - **说明**:原脚本使用 `--load` 将构建好的镜像加载到Runner的Docker Daemon中,供后续步骤(如集成测试)使用。新脚本仅构建而不加载(`no output`)。如果该流水线中存在依赖该镜像的后续步骤,或者该脚本被其他需要镜像的流水线复用,会导致“image not found”错误。 - **后果**:破坏了脚本的副作用,可能导致依赖该镜像的下游任务失败。 3. **scripts/ci/vitest_incremental.sh 第17, 26, 39行**:移除了 `cd apps/web` 但依赖外部脚本处理工作目录,存在路径上下文不匹配风险。 - **说明**:脚本逻辑中Python部分生成的文件路径是相对于 `apps/web` 的(如 `src/xxx.ts`),因为执行了 `replace('apps/web/', '')`。现在脚本通过 `step_frontend_run.sh` 执行命令,如果 `step_frontend_run.sh` 没有显式切换到 `apps/web` 目录(例如它在仓库根目录执行),那么 `npx vitest` 将在根目录查找 `src/xxx.ts` 从而失败。 - **后果**:在特定环境下可能导致测试因文件路径找不到而失败。 ### 💡 建议(1个可选) 1. **scripts/ci/docker_build_only.sh 第26-34行**:移除了原有的重试机制,建议确认ACR(远程缓存)的稳定性。 - **说明**:原代码包含针对缓存损坏的重试逻辑,新代码完全依赖远程缓存。如果网络抖动或远程缓存不可用,构建将直接失败。考虑到CI环境的复杂性,建议保留简单的重试机制或确保远程缓存极其稳定。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 22:19:15 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia reviewed 2026-07-22 22:21:26 +08:00
xiaoxia left a comment
Author
Owner

CI改动,4个required门禁全绿,approve

CI改动,4个required门禁全绿,approve
xiaoxia merged commit 8aaef6e964 into develop 2026-07-22 22:22:04 +08:00

🗑️ 预览环境已清理

PR #745 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #745 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.