ci: 第二批流水线提速 - 合并 validate-python + 拆分 validate-style/security #1580

Merged
xiaoxia merged 1 commits from ci/pipeline-speedup-batch2 into develop 2026-08-31 18:54:47 +08:00
Owner

CI 流水线第二批提速优化

改动 5:合并 validate-type-check + validate-migration → validate-python

  • 一次 checkout + 一次 pip install → 先后运行 mypy + alembic
  • 节省:~2min checkout + ~1min pip install + 1 个 runner slot
  • 保留 validate-migration 的 DATABASE_URL 环境变量

改动 6:拆分 validate-code-quality → validate-style + validate-security

新 Job 内容 预计耗时
validate-style compileall + black/isort/ruff 格式检查 + vulture 死代码(仅告警)+ auto-fix ~3min
validate-security detect-secrets + bandit(仅告警)+ pip-audit(仅告警)+ CI 脚本语法校验 ~5min

两个 job 并行执行,wall-clock 从 ~10min 降到 ~5min。

配套更新

  • ci-gate needs:validate-code-quality → validate-style + validate-security
  • ci-gate needs:validate-type-check + validate-migration → validate-python
  • build-production needs:validate-code-quality → validate-style + validate-security
  • 删除已废弃的 scripts/ci/validate_code_quality.sh
## CI 流水线第二批提速优化 ### 改动 5:合并 validate-type-check + validate-migration → validate-python - 一次 checkout + 一次 pip install → 先后运行 mypy + alembic - 节省:~2min checkout + ~1min pip install + 1 个 runner slot - 保留 validate-migration 的 DATABASE_URL 环境变量 ### 改动 6:拆分 validate-code-quality → validate-style + validate-security | 新 Job | 内容 | 预计耗时 | |--------|------|----------| | validate-style | compileall + black/isort/ruff 格式检查 + vulture 死代码(仅告警)+ auto-fix | ~3min | | validate-security | detect-secrets + bandit(仅告警)+ pip-audit(仅告警)+ CI 脚本语法校验 | ~5min | 两个 job 并行执行,wall-clock 从 ~10min 降到 ~5min。 ### 配套更新 - ci-gate needs:validate-code-quality → validate-style + validate-security - ci-gate needs:validate-type-check + validate-migration → validate-python - build-production needs:validate-code-quality → validate-style + validate-security - 删除已废弃的 scripts/ci/validate_code_quality.sh
xiaoxia added 1 commit 2026-08-31 18:25:19 +08:00
ci: batch2 speedup - merge validate-type-check+migration into validate-python, split validate-code-quality into validate-style+validate-security
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (push) Successful in 1s
CI/CD Pipeline / Check push changed paths (push) Failing after 2s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Has been skipped
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / Build Staging Web Image (push) Has been skipped
CI/CD Pipeline / Build Staging API Image (push) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (push) Has been skipped
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 - Security (pull_request) Has been skipped
CI/CD Pipeline / Validate - Style (pull_request) Has been skipped
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Style (push) Successful in 3m52s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 4m19s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 4m41s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 5m18s
CI/CD Pipeline / Validate - Python (mypy + alembic) (push) Successful in 5m12s
CI/CD Pipeline / Retag skipped Staging API Image (push) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (push) Has been skipped
CI/CD Pipeline / Validate - Security (push) Failing after 5m19s
CI/CD Pipeline / Retag skipped Staging Worker Image (push) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker 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 / PR Build API Image (pull_request) Successful in 3m32s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 3m37s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 5m19s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 8m42s
CI/CD Pipeline / Integration Tests (push) Successful in 6m59s
AI Code Review / AI Code Review (pull_request) Successful in 9m14s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been skipped
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 / CI Gate (pull_request) Successful in 3s
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (push) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (push) 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 / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (push) Successful in 20m36s
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / CI Gate (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Canary Release to Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
4ae6394c95
Change 5: Merge validate-type-check + validate-migration into validate-python
- Single checkout + single pip install → mypy + alembic
- Saves ~2min checkout + ~1min pip install + 1 runner slot
- Preserves DATABASE_URL env for alembic migration validation

Change 6: Split validate-code-quality into validate-style + validate-security
- validate-style: compileall + black/isort/ruff + vulture (advisory) + auto-fix (~3min)
- validate-security: detect-secrets + bandit (advisory) + pip-audit (advisory) + CI scripts syntax (~5min)
- Both jobs run in parallel, reducing wall-clock time from ~10min to ~5min

Updated references:
- ci-gate needs: validate-code-quality → validate-style + validate-security
- ci-gate needs: validate-type-check + validate-migration → validate-python
- build-production needs: validate-code-quality → validate-style + validate-security
- Removed obsolete scripts/ci/validate_code_quality.sh
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:是
  • 阻塞级问题数量:1 个

📊 审查概览

  • 整体评价:需修改
  • 建议级问题数量:2 个

🔴 阻塞级问题(必须修复)

  1. [.gitea/workflows/ci-pipeline.yml: ~160] validate-style 任务缺少依赖安装步骤
    • 问题类型:逻辑错误
    • 问题描述:在将 validate-code-quality 拆分为 validate-style 时,diff 中移除了原有的 Install dependencies 步骤(安装 requirements-base.txt, requirements.txt, requirements-dev.txt)以及手动安装 blackisort 的步骤。新的 validate_style.sh 脚本执行了 python3 -m compileall(需要项目依赖)、blackisortruff。由于缺少安装步骤,这些工具和依赖将不存在,导致该 CI 任务必然失败。
    • 修改建议:在 validate-style 任务中,恢复 Install dependencies 步骤,确保安装 requirements-dev.txt(通常包含 linter)或其他必要的依赖文件,以便 compileall 和 linter 能够正常运行。

💡 改进建议(不阻塞合并)

  1. [.gitea/workflows/ci-pipeline.yml: ~250] validate-security 任务安装了不必要的全量依赖

    • 具体内容:validate-security 任务中安装了 requirements-base.txt, requirements.txt, requirements-dev.txt。该任务主要运行 bandit(静态分析)和 pip-audit(依赖审计)。pip-audit 可以直接审计文件而不需要安装依赖包,bandit 通常也不需要运行时环境。安装全量依赖会显著增加 CI 运行时间和资源消耗。建议仅安装 bandit 等必需工具,或利用 pip-audit 的本地文件审计功能而不安装项目依赖。
  2. [.gitea/workflows/ci-pipeline.yml] 缓存 Key 碎片化导致存储浪费

    • 具体内容:三个新任务(validate-style, validate-security, validate-python)使用了不同的 cache key(pip-style, pip-security, pip-python),但它们都基于 hashFiles('requirements*.txt') 且安装内容高度重叠。这将导致同一份依赖包在缓存中存储三份,浪费磁盘空间。建议统一使用同一个 cache key(如 ${{ runner.os }}-pip-deps-${{ hashFiles('requirements*.txt') }}),除非任务间存在严重的包版本冲突需要隔离。

良好实践

  • 将原本耦合的代码质量检查拆分为 Style、Security、Python 三个独立任务,职责划分更清晰,便于并行排查问题。
  • validate-style 任务中保留了 Auto-fix formatting 步骤,对开发者友好。
  • validate_security.sh 中对 banditpip-audit 设置为非阻断(advisory only),既进行了扫描又避免了因第三方库漏洞阻塞主流程,符合安全扫描的常见策略。

🤖 由 AI 代码审查机器人自动生成 | 2026-08-31 10:29:55 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:是 - 阻塞级问题数量:1 个 ### 📊 审查概览 - 整体评价:需修改 - 建议级问题数量:2 个 ### 🔴 阻塞级问题(必须修复) 1. **[.gitea/workflows/ci-pipeline.yml: ~160] validate-style 任务缺少依赖安装步骤** - 问题类型:逻辑错误 - 问题描述:在将 `validate-code-quality` 拆分为 `validate-style` 时,diff 中移除了原有的 `Install dependencies` 步骤(安装 requirements-base.txt, requirements.txt, requirements-dev.txt)以及手动安装 `black` 和 `isort` 的步骤。新的 `validate_style.sh` 脚本执行了 `python3 -m compileall`(需要项目依赖)、`black`、`isort` 和 `ruff`。由于缺少安装步骤,这些工具和依赖将不存在,导致该 CI 任务必然失败。 - 修改建议:在 `validate-style` 任务中,恢复 `Install dependencies` 步骤,确保安装 `requirements-dev.txt`(通常包含 linter)或其他必要的依赖文件,以便 `compileall` 和 linter 能够正常运行。 ### 💡 改进建议(不阻塞合并) 1. **[.gitea/workflows/ci-pipeline.yml: ~250] validate-security 任务安装了不必要的全量依赖** - 具体内容:`validate-security` 任务中安装了 `requirements-base.txt`, `requirements.txt`, `requirements-dev.txt`。该任务主要运行 `bandit`(静态分析)和 `pip-audit`(依赖审计)。`pip-audit` 可以直接审计文件而不需要安装依赖包,`bandit` 通常也不需要运行时环境。安装全量依赖会显著增加 CI 运行时间和资源消耗。建议仅安装 `bandit` 等必需工具,或利用 `pip-audit` 的本地文件审计功能而不安装项目依赖。 2. **[.gitea/workflows/ci-pipeline.yml] 缓存 Key 碎片化导致存储浪费** - 具体内容:三个新任务(`validate-style`, `validate-security`, `validate-python`)使用了不同的 cache key(`pip-style`, `pip-security`, `pip-python`),但它们都基于 `hashFiles('requirements*.txt')` 且安装内容高度重叠。这将导致同一份依赖包在缓存中存储三份,浪费磁盘空间。建议统一使用同一个 cache key(如 `${{ runner.os }}-pip-deps-${{ hashFiles('requirements*.txt') }}`),除非任务间存在严重的包版本冲突需要隔离。 ### ✅ 良好实践 - 将原本耦合的代码质量检查拆分为 Style、Security、Python 三个独立任务,职责划分更清晰,便于并行排查问题。 - `validate-style` 任务中保留了 `Auto-fix formatting` 步骤,对开发者友好。 - `validate_security.sh` 中对 `bandit` 和 `pip-audit` 设置为非阻断(advisory only),既进行了扫描又避免了因第三方库漏洞阻塞主流程,符合安全扫描的常见策略。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-31 10:29:55 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->

🚀 预览环境已部署

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

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

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

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

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

🗑️ 预览环境已清理

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

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

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