SuperAPI AI 工具集

reproducing-ci-locally

部署与运维

查看项目

更新于 10-15 23:44

技能介绍

用途:让本地检查与 CI runner 执行同一件事,解决“本地通过、CI 失败”的命令差异问题。核心方法是从工作流文件而非 Makefile 或习惯中推导本地命令。

主要能力:读取 .github/workflows/ 提取命令与顺序、作用路径、测试选择(marker、-k 过滤、被排除的套件)、env: 块与 setup-* 中的运行时版本;用 set -a; . ./.env.ci; set +a 镜像环境;用 uv venv 与 uv pip install 按 CI 的解释器版本和 extras 建环境;用 .venv/bin/python -m <tool> 或 uv run --no-sync 驱动工具,必要时加 env -u VIRTUAL_ENV;用 uvx ruff@0.16.4 复现 CI 解析的具体版本。

使用方式:因门禁步骤按顺序执行且首个失败即中断,故逐个单独运行各步骤并打印退出码,例如 ruff check app tests scripts; echo "lint: $?",不要用 && 串联。差异应修在共享配置(pyproject.toml 的 addopts、marker 定义、lint 规则、requires-python)而非仅改工作流。用 gh api repos/OWNER/REPO/branches/main/protection 确认哪些 job 是必需门禁;用 gh pr checks --watch 与 gh run view --log-failed 确认真实结果。

限制与注意:本仓库 ffmpeg-skill 的门禁为 .github/workflows/ci.yml,先按操作系统安装 ffmpeg(apt / brew install ffmpeg-full / choco install ffmpeg),再运行 python tests/test_all.py 与 python tests/test_contract.py(unittest 而非 pytest,无 marker 表达式;部分 test_contract.py 测试因依赖 POSIX shell 在 Windows 上被 skipIf 跳过)。npm test 在两个文件上不叠加 OS 条件跳过,非 Windows 机器上已可忠实复现,仅调试 Windows 专属失败时需先确认 skipIf 到底排除了什么。事件条件步骤在推送重跑时会被跳过;末尾权限失败(如 HTTP 403)会让构建步骤全绿而 job 红。来源:wdm0006/python-skills(MIT)。