SuperAPI AI 工具集

running-github-actions-efficiently

通用与其它

查看项目

更新于 10-16 03:37

技能介绍

用途:面向私有仓库的 CI 成本与速度优化清单,目标是削减 GitHub Actions 计费分钟数与墙钟时间,同时不减少 CI 实际验证的内容。公共仓库免费,成本集中在私有仓库,通常少数工作流占大头。

主要能力与用法:

  1. 计费认知:分钟按 job 计费并向上取整,乘以运行器倍率(Linux 1x、Windows 2x、macOS 10x),所以先审查所有 macOS job。Xcode/Apple 平台构建测试需要 macOS;Lint、格式化(如 SwiftLint/SwiftFormat)、纯单元测试、打包、文档构建通常可迁到 ubuntu-latest,拆分为独立的 Linux lint job 加 macOS 构建 job。SwiftLint 与 SwiftFormat 有自包含 Linux 预编译二进制;文中给出从 GitHub Release 下载并安装的 shell 片段,并使用 swiftlint-static 与 swiftformat_linux,版本需在 URL 中固定,curl 加 -f。真正无法迁移的情况是 SwiftPM 目标声明 platforms: [.macOS(...)] 或依赖 AppKit/SwiftUI/CloudKit 等 Apple 相关库。
  2. 触发卫生:push 不带分支过滤并与 pull_request 同时触发会在同一提交上跑两次;把 push 限定到受保护分支(如 main),PR 负责合并前校验;用 paths-ignore 跳过纯文档变更(注意必需状态检查与路径过滤的冲突风险)。
  3. 并发:在工作流顶层加 concurrency 与 cancel-in-progress: true 取消被取代的运行;部署/发布类工作流应使用独立 group 且不取消。
  4. 缓存:按 lockfile 做键,优先使用 setup-* 内置缓存(uv、pip、npm、Go),其余用 actions/cache 缓存依赖目录,Rust 用 Cargo.lock,SwiftPM 用 Package.resolved,Docker 用 buildx 的 type=gha;缓存依赖图而非脆弱的机器相关构建状态。macOS 上可设 HOMEBREW_NO_AUTO_UPDATE 等跳过 brew 自动更新。
  5. 矩阵与定时:完整矩阵只在 main/夜间运行,PR 用最小矩阵;只测受支持版本与必要操作系统;审计所有 schedule: cron 规则,健康检查应改用外部监控;时区双 cron 技巧仍支付启动成本。
  6. 失败与长时间运行照常计费:步骤按从便宜到昂贵排序,先 lint/typecheck;为每个 job 设 timeout-minutes;不要靠重跑掩盖不稳定的测试。

限制与测量:用仓库/组织 Billing 页面、/repos/{owner}/{repo}/actions/runs/{id}/timing 与 runs 列表对比运行次数与合并频率,优先修复最耗时的少数工作流。文中未提供具体价格与配额数值。