SuperAPI AI 工具集

running-github-actions-efficiently

智能体与模型

查看项目

更新于 10-15 23:44

技能介绍

用途:针对私有仓库中 GitHub Actions 计费分钟被少数工作流占据的问题,提供一套排查与修复清单,目标是减少计费分钟和等待时间,同时不削减 CI 实际验证的内容。

主要能力: 一、计费倍率认知。分钟按作业计费、向上取整到分钟,再乘以运行器 OS 倍率:Linux(ubuntu-)为 1x,Windows(windows-)为 2x,macOS(macos-)为 10x。因此首先要找出 macOS 作业并判断每一步是否真需 macOS;Xcode/Apple 平台构建与测试需要,而 SwiftLint、SwiftFormat 等 lint/格式化、无 Apple 框架的纯单元测试、打包与文档构建通常不需要,可迁到 ubuntu-latest,成本约降至十分之一。SwiftLint 与 SwiftFormat 均提供自包含的 Linux 预编译二进制,示例中通过 curl 下载 swiftlint-static 与 swiftformat_linux 并安装使用,需固定版本、使用 curl -f 并引用确切二进制名。若 SwiftPM 目标仅声明 macOS 平台或依赖 AppKit/SwiftUI 等 Apple 库,则应保留在 macOS。 二、触发条件卫生。push 不加分支过滤会与 pull_request 对同一提交各触发一次完整运行,可用 push: branches: [main] 限定合并后提交,预合并校验交给 pull_request;再用 paths-ignore 排除文档类改动。 三、并发控制。使用 concurrency: group: ${{ github.workflow }}-${{ github.ref }} 加 cancel-in-progress: true 自动取消被取代的运行;部署、发布等会写外部状态的流程应使用独立 group 且不启用取消。 四、依赖缓存。优先使用 setup- 内置缓存(如 astral-sh/setup-uv、actions/setup-python、actions/setup-node、actions/setup-go),其他生态用 actions/cache,以 lockfile 哈希为 key 并配 restore-keys;Rust 缓存 ~/.cargo/registry、~/.cargo/git、target,SwiftPM 缓存 .build 与 ~/Library/Caches/org.swift.swiftpm,Docker 用 buildx 的 type=gha 缓存。缓存依赖图而非机器相关的编译产物。macOS 上可用 HOMEBREW_NO_AUTO_UPDATE=1 跳过 brew update。 五、矩阵与定时任务。矩阵会成倍增加作业数,建议 main/夜间跑全矩阵、PR 跑最小矩阵(一个 OS、最低与最高版本),只测试实际支持的版本。schedule cron 会持续计费,应逐个审计;健康检查不宜放在 Actions 上;grep -rl "schedule:" .github/workflows/ 可找出全部定时工作流。 六、失败与超时。失败作业仍全额计费,应把便宜的 lint/类型检查排在长构建之前,并为每个作业设置 timeout-minutes。 七、测量。通过 Settings → Billing 查看本月分钟与按仓库明细,用 /repos/{owner}/{repo}/actions/runs/{id}/timing 查看单次运行计费毫秒,用 /repos/{owner}/{repo}/actions/runs?created=>=YYYY-MM-DD 统计各工作流运行次数与触发事件。优先修复排名靠前的一两个问题。

限制与说明:公开仓库免费,成本集中于私有仓库。资料未提供具体价格与免费额度数值。关于本仓库 ffmpeg-skill,其 .github/workflows/ci.yml 已正确限定 push 分支,且无 Python 依赖安装步骤可缓存;经直接阅读文件确认,尚缺 concurrency 块与 timeout-minutes,资料中未说明是否已添加。