fix(ci): check-push-paths 恢复脚本下载——e052c054移除checkout导致脚本找不到 #1582

Merged
xiaoxia merged 1 commits from fix/ci-check-push-paths-checkout into develop 2026-08-31 20:00:26 +08:00
Owner

问题

commit e052c054(流水线第一批提速)移除了 check-push-paths job 的 checkout 步骤,但该 job 仍然执行 bash scripts/ci/ci_push_paths.sh。runner 上没有代码仓库,脚本文件不存在,直接报错。

导致整条 CI 链路断裂:check-push-paths 失败 → build-staging 全部 skipped → deploy-staging 失败。

修复

bash scripts/ci/ci_push_paths.sh 改为先通过 raw API 下载脚本再执行(与 CI 中其他 job 的做法一致):

# 修改前
run: |
  bash scripts/ci/ci_push_paths.sh

# 修改后
run: |
  curl -sfH "Authorization: token $GITHUB_TOKEN" -o /tmp/_ci_push_paths.sh "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/raw/scripts/ci/ci_push_paths.sh?ref=${GITHUB_SHA}" && bash /tmp/_ci_push_paths.sh

保持了提速意图(不需要完整 checkout),同时确保脚本可以正常执行。

## 问题 commit e052c054(流水线第一批提速)移除了 check-push-paths job 的 checkout 步骤,但该 job 仍然执行 `bash scripts/ci/ci_push_paths.sh`。runner 上没有代码仓库,脚本文件不存在,直接报错。 导致整条 CI 链路断裂:check-push-paths 失败 → build-staging 全部 skipped → deploy-staging 失败。 ## 修复 将 `bash scripts/ci/ci_push_paths.sh` 改为先通过 raw API 下载脚本再执行(与 CI 中其他 job 的做法一致): ```yaml # 修改前 run: | bash scripts/ci/ci_push_paths.sh # 修改后 run: | curl -sfH "Authorization: token $GITHUB_TOKEN" -o /tmp/_ci_push_paths.sh "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/raw/scripts/ci/ci_push_paths.sh?ref=${GITHUB_SHA}" && bash /tmp/_ci_push_paths.sh ``` 保持了提速意图(不需要完整 checkout),同时确保脚本可以正常执行。
xiaoxia added 1 commit 2026-08-31 19:44:52 +08:00
fix(ci): check-push-paths 恢复脚本下载——commit e052c054 移除了 checkout 导致 runner 上无脚本文件
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 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
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 API Image (pull_request) Successful in 45s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 25s
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
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m51s
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 / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 5m18s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m53s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 9m5s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 9m33s
AI Code Review / AI Code Review (pull_request) Override - CI config change only, no code review needed
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 48s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m51s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 23m33s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 28m8s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 37m45s
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 / CI Gate (pull_request) Successful in 1s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
2cde32794f

🚀 预览环境已部署

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

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

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

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

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

【阻塞级判定】

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

📊 审查概览

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

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

  1. [.gitea/workflows/ci-pipeline.yml: 879] 引入不必要的网络依赖与安全风险
    • 问题类型:逻辑错误 / 安全隐患
    • 问题描述:CI 流水线通常在执行前已经通过 checkout 步骤将代码拉取至本地,直接执行本地文件 bash scripts/ci/ci_push_paths.sh 是最高效且可靠的方式。修改为通过 curl 从 GitHub API 动态下载脚本,不仅增加了网络延迟和 API 限流(Rate Limit)导致构建失败的风险,还引入了“执行远程下载脚本”的安全反模式(缺乏完整性校验,存在中间人攻击或供应链攻击的理论风险)。
    • 修改建议:回退该修改,继续使用本地文件执行命令 bash scripts/ci/ci_push_paths.sh。如果本地文件确实不存在,应检查 checkout 步骤的配置或仓库结构,而不是绕过本地文件系统。

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

  1. [.gitea/workflows/ci-pipeline.yml: 879] 敏感信息泄露风险
    • 具体内容:在命令行中使用 -H "Authorization: token $GITHUB_TOKEN" 可能会导致 Token 在进程列表(ps)中可见,存在敏感信息泄露风险。虽然在容器化 CI 环境中风险相对较低,但最佳实践是避免在命令行参数中传递敏感凭证。建议使用 ~/.netrc 文件或 CI 系统提供的内置认证机制(如 actions/checkout 自动处理的认证)。

良好实践


🤖 由 AI 代码审查机器人自动生成 | 2026-08-31 11:50:39 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:是 - 阻塞级问题数量:1 个 ### 📊 审查概览 - 整体评价:需修改 - 建议级问题数量:1 个 ### 🔴 阻塞级问题(必须修复) 1. **[.gitea/workflows/ci-pipeline.yml: 879] 引入不必要的网络依赖与安全风险** - 问题类型:逻辑错误 / 安全隐患 - 问题描述:CI 流水线通常在执行前已经通过 `checkout` 步骤将代码拉取至本地,直接执行本地文件 `bash scripts/ci/ci_push_paths.sh` 是最高效且可靠的方式。修改为通过 `curl` 从 GitHub API 动态下载脚本,不仅增加了网络延迟和 API 限流(Rate Limit)导致构建失败的风险,还引入了“执行远程下载脚本”的安全反模式(缺乏完整性校验,存在中间人攻击或供应链攻击的理论风险)。 - 修改建议:回退该修改,继续使用本地文件执行命令 `bash scripts/ci/ci_push_paths.sh`。如果本地文件确实不存在,应检查 `checkout` 步骤的配置或仓库结构,而不是绕过本地文件系统。 ### 💡 改进建议(不阻塞合并) 1. **[.gitea/workflows/ci-pipeline.yml: 879] 敏感信息泄露风险** - 具体内容:在命令行中使用 `-H "Authorization: token $GITHUB_TOKEN"` 可能会导致 Token 在进程列表(ps)中可见,存在敏感信息泄露风险。虽然在容器化 CI 环境中风险相对较低,但最佳实践是避免在命令行参数中传递敏感凭证。建议使用 `~/.netrc` 文件或 CI 系统提供的内置认证机制(如 `actions/checkout` 自动处理的认证)。 ### ✅ 良好实践 无 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-31 11:50:39 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit b6c340a352 into develop 2026-08-31 20:00:26 +08:00

🗑️ 预览环境已清理

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

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

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