SuperAPI AI 工具集

python-ci

部署与运维

查看项目

更新于 10-16 03:15

技能介绍

用途:为 Python 仓库构建 GitHub Actions 质量门禁,让 lint、类型检查、测试在 Python 版本矩阵上运行,最终汇总到一个 all-checks-passed 聚合任务,并作为必需状态检查在分支规则集后强制执行,防止 CI 被静默削弱(被跳过的任务算成功、改名的矩阵腿、可变 action 标签、过宽的 GITHUB_TOKEN 权限、pull_request_target 与缓存信任边界漏洞)。工作流本身应视为生产代码。

主要能力:1) 先调查仓库:读取 pyproject.toml 中的工具配置与 requires-python(决定矩阵),检查是否有提交的 uv.lock(有则必须 uv sync --locked)。CI 只运行仓库已定义的工具,不引入新工具或更宽松的变体,用检查模式(ruff check、ruff format --check);若已有层自动修复,CI 只做验证。2) 编写 ci.yml:触发含 push、pull_request、merge_group;permissions: contents: read;concurrency 取消进行中的 PR;任务为 lint、typecheck、test(矩阵)。可用 astral-sh/setup-uv(enable-cache: true),用 uv sync --locked --group dev 与 uv run <tool>;无 uv 时用 actions/setup-python 加 pip 缓存回退。矩阵列出 requires-python 的每个版本并加引号(如 ['3.11','3.12','3.13','3.14'])。所有 action 从一开始就固定到完整 commit SHA。3) 覆盖率接线:每个矩阵腿用 COVERAGE_FILE 与 --cov-fail-under=0 运行并上传唯一名 artifact(含 include-hidden-files: true),再设合并任务做 coverage combine 与 report,阈值在仓库覆盖率配置中。4) 加 all-checks-passed 聚合任务(needs 各任务、if: always(),显式检查 failure/cancelled/skipped),只把它设为必需检查,任务名保持稳定。5) 通过 API 配置分支保护或规则集,仅将 all-checks-passed 设为必需,开启 enforce_admins;合并队列依赖 merge_group 触发。6) 加固:SHA 固定 action、最小化 GITHUB_TOKEN、用 zizmor 与 actionlint 静态分析、注意 pull_request_target 与缓存信任边界。7) 端到端验证,运行 scripts/check_workflows.py 与 zizmor 确保退出码为 0。

适用场景与限制:仅负责质量门禁。发布/发布工作流归 python-release;pre-commit 归 python-precommit;coverage.py 配置归 python-testing;依赖机器人、密钥扫描、CodeQL 等归 python-supply-chain;修复 CI 报告的失败归 python-lint / python-typing 或常规调试。在从未跑过 lint 的仓库上直接开启门禁会失败,应先落地清理提交。