fix(ci): #916 improve check-frontend-only: pagination + infra detection + fix empty-line bug #926

Merged
xiaoxia merged 4 commits from fix/ci-required-checks-coverage-916 into develop 2026-07-26 15:19:30 +08:00
Owner

调查结论

实际required check覆盖率远高于工单描述:8/9 的 required check 是始终运行的,只有 1 个测试类 check 是条件触发的(Unit Tests 或 Frontend Unit Tests)。

原因为 check-frontend-only 的判定逻辑存在 空行计数 bug(grep -cv 会把末尾空行算进去),导致 BACKEND_COUNT 永远 >= 1,纯前端/纯后端的判定实际上从未生效,所有 PR 都是全量 CI。

修复内容

1. 修复空行计数 bug

  • 原逻辑:grep -cv "^apps/web/" 会把末尾空行算作后端文件
  • 新逻辑:BACKEND_COUNT = TOTAL - FRONTEND_COUNT,其中 TOTAL 是非空行数

2. 修复大 PR 漏判风险

  • 原逻辑:只取前 300 个文件,超大 PR 可能漏判
  • 新逻辑:分页获取所有变更文件,确保完整判定

3. 新增基础设施文件强制全量检测

  • 改了 infra/Dockerfile.gitea/workflows/scripts/ci/docker/ 的 PR,强制运行完整 CI
  • 防止 CI 配置或 Dockerfile 变更时,相关构建/检查被意外跳过

#916

## 调查结论 实际required check覆盖率远高于工单描述:**8/9 的 required check 是始终运行的**,只有 1 个测试类 check 是条件触发的(Unit Tests 或 Frontend Unit Tests)。 原因为 check-frontend-only 的判定逻辑存在 **空行计数 bug**(grep -cv 会把末尾空行算进去),导致 `BACKEND_COUNT` 永远 >= 1,纯前端/纯后端的判定实际上从未生效,所有 PR 都是全量 CI。 ## 修复内容 ### 1. 修复空行计数 bug - 原逻辑:`grep -cv "^apps/web/"` 会把末尾空行算作后端文件 - 新逻辑:`BACKEND_COUNT = TOTAL - FRONTEND_COUNT`,其中 TOTAL 是非空行数 ### 2. 修复大 PR 漏判风险 - 原逻辑:只取前 300 个文件,超大 PR 可能漏判 - 新逻辑:分页获取所有变更文件,确保完整判定 ### 3. 新增基础设施文件强制全量检测 - 改了 `infra/`、`Dockerfile`、`.gitea/workflows/`、`scripts/ci/`、`docker/` 的 PR,强制运行完整 CI - 防止 CI 配置或 Dockerfile 变更时,相关构建/检查被意外跳过 关 #916
xiaoxia added 1 commit 2026-07-26 13:06:47 +08:00
fix(ci): #916 improve check-frontend-only: pagination + infra detection + fix empty-line bug
AI Code Review / AI Code Review (pull_request) Failing after 0s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 21s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m57s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 47m18s
70022bed89
xiaoxia added 1 commit 2026-07-26 13:15:47 +08:00
Merge branch 'develop' of https://git.xiaoxiajianji.com/xiaoxia/xiaoxia-saas into fix/ci-required-checks-coverage-916
AI Code Review / AI Code Review (pull_request) Failing after 0s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 37s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m47s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 47m21s
5b562fe475

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #926 | | 预览链接 | [https://pr-926.preview.xiaoxiajianji.com](https://pr-926.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 1 commit 2026-07-26 14:09:22 +08:00
fix(ci): #916 fix YAML syntax error in check-frontend-only step
AI Code Review / AI Code Review (pull_request) Failing after 0s
CI/CD Pipeline / Check if frontend-only change (pull_request) Failing after 17s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 49s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 32s
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 / PR Build Worker Image (pull_request) Successful in 8s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m9s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m20s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 43s
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 / Frontend Unit Tests (pull_request) Successful in 28s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m47s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m40s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m4s
CI/CD Pipeline / Deploy Production (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 / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Successful in 5m36s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m40s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 47m34s
9705f4f449
The multi-line string concatenation had zero-indent closing quote which
broke YAML parsing. Replace with $'\n' single-line concatenation.
xiaoxia added 1 commit 2026-07-26 15:00:07 +08:00
fix(ci): #916 fix set -e crash in pagination loop
AI Code Review / AI Code Review (pull_request) Failing after 0s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 19s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 28s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 8s
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 / Frontend Lint (pull_request) Successful in 1m0s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m28s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m35s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 53s
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 / Frontend Unit Tests (pull_request) Successful in 29s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (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 / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m39s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m8s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m11s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m37s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 5m25s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Failing after 14s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 18s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 49m20s
ba481f8ca7
Python sys.exit(1) caused command substitution to fail under set -e.
Replace exit-code-based pagination with wc -l line count check,
and add || true guard to prevent early exit.
xiaoxia force-pushed fix/ci-required-checks-coverage-916 from e7ae642ec5 to ba481f8ca7 2026-07-26 15:00:07 +08:00 Compare
xiaoxia merged commit 6a303a3b6e into develop 2026-07-26 15:19:30 +08:00
xiaoxia deleted branch fix/ci-required-checks-coverage-916 2026-07-26 15:19:30 +08:00

🗑️ 预览环境已清理

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

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

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