GitHub Actions 新变化怎样检查工作流兼容性
来源:17golang原创
时间:2026-10-23 06:01:30 400浏览 收藏
GitHub Actions 这轮变化,真正容易让旧工作流失效的地方不在 YAML 是否还能解析,而在依赖引用、运行环境、历史记录和触发策略一起改变。兼容性检查建议按“依赖是否锁定、runner 是否还存在、记录是否保得住、触发是否会被策略拦截”四条线展开。
先盘点再启用策略:把每个 workflow 的uses、runs-on、保留期需求和触发事件列成表,再分批迁移,最容易避免 CI 在同一天出现多种原因的失败。
官方地址:https://github.blog/changelog/
先看这四项变化会碰到哪里
| 变化 | 直接影响 | 先检查什么 |
|---|---|---|
| Workflow lockfiles 公共预览 | uses 依赖可锁到已审查的 commit,策略启用后未纳入的工作流可能被阻断 | 工作流、可复用工作流、.github/workflows/actions.lock |
| macOS 14 runner 退役 | macos-14、macos-14-large、macos-14-xlarge 将在 2026-11-02 退役 | runs-on、Xcode 和原生依赖回归 |
| Actions retention 范围扩大 | checks、workflow runs、statuses 也按同一保留期清理,不再默认长期保留 | 审计窗口、组织上限、需要导出的记录 |
| 执行保护默认规则 | 公共仓库的 pull_request_target 可能在 2026-12-02 起受到默认限制 | 触发事件、Secrets 使用、Policy insights |
这四项并不是同一种升级:锁文件和执行保护属于策略边界,runner 是环境替换,retention 是数据生命周期。迁移单里要分开记录负责人和回滚条件。
第一步:把 action 依赖锁住,再检查差异
官方的 workflow dependency lockfile 由 GitHub CLI 扩展生成,文件通常是 .github/workflows/actions.lock。它会记录 action 及其传递依赖对应的 commit;可复用工作流仍由定义它的仓库负责锁定。先在分支上生成,再把 workflow 和 lockfile 的完整差异一起审查。
# 安装官方 GitHub CLI 扩展;首次接入前先确认 uses 引用指向期望版本
gh extension install github/gh-actions-lock
# 扫描 .github/workflows 并生成或更新锁文件
gh actions-lock
# 只检查本地是否存在覆盖所有依赖的锁项,不修改文件
gh actions-lock --verify-local --no-fix
# 在拉取请求中检查锁文件是否过期
gh actions-lock --verify
不要直接手改 lockfile。重点看两类 diff:workflow 的 uses 是否从可变 tag 变成了明确版本,以及 lockfile 中的 commit、仓库身份是否出现意外变化。只有确认这些变更符合预期后,才在小范围打开 Require lockfile;企业版可先使用 Evaluate 模式观察会被阻断的运行。

第二步:扫描 runner 标签和工具链假设
如果工作流里还写着 macos-14、macos-14-large 或 macos-14-xlarge,要在 2026-11-02 前迁移。官方给出的替代方向包括 macos-15、macos-latest(当前指向 macOS 26)及相应的大规格标签。
# 找出固定的 macOS 14 runner;命令只读文本,不改变工作流
rg -n "macos-14|macos-latest|runs-on:" .github/workflows
# 检查 workflow 是否把 Xcode、架构或系统路径写死
rg -n "xcode-select|DEVELOPER_DIR|/Applications|arm64|x86_64" .github/workflows
替换标签不等于兼容性完成。macOS 15、macOS 26 和 Apple Silicon 可能带来 Xcode、系统 SDK、Homebrew 架构或缓存键变化。先复制一个 workflow 做回归,至少覆盖编译、测试、缓存恢复和产物上传;确定工具链后再合并主分支。对 macos-latest 则要接受它会随 GitHub 的迁移策略变化,关键发布链路更适合显式固定版本并定期升级。
第三步:把保留期和触发策略当成兼容性的一部分
从 2026-10-01 起,checks、workflow runs 和 statuses 也跟随 Actions retention 设置清理。若团队需要超过默认窗口的审计材料,不要等记录消失后再找;应提前提高允许范围内的保留期,或把必要日志、报告和元数据导出到自己的归档系统。
另一个高风险点是 pull_request_target。公共仓库的默认保护规则会在 2026-12-02 自动强制执行,依赖该事件读取 Secrets 或执行受信任代码的 workflow 要先用 Policy insights 找出受影响运行,再决定是改为更安全的事件、拆分受信任任务,还是为确有必要的 workflow 做明确 allowlist。不要为了“先跑起来”把来自 fork 的不可信代码直接放进带 Secrets 的任务。
on:
pull_request:
# 普通验证尽量使用 fork 隔离的事件,不把 Secrets 暴露给外部代码
branches: [main]
permissions:
# 默认最小权限,具体任务再在 job 级别增加
contents: read
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 运行测试
run: go test ./...
这段示例只是兼容性审查的起点,不代表所有项目都能直接替换事件。若确实需要 pull_request_target,应把它与不可信代码检出、脚本执行和 Secrets 使用逐项拆开评估。

最后用一张迁移单收口
- 列出每个 workflow 的
uses、runs-on、触发事件和是否依赖 Secrets。 - 先生成 actions.lock,审查 commit 与仓库身份,再在一个仓库或一组 workflow 上试用策略。
- 把 macOS 14 替换为明确的新标签,验证 Xcode、架构、缓存和产物,不只改一行 YAML。
- 确认 retention 能覆盖审计周期;必须长期保存的结果在清理前导出。
- 对 pull_request_target 使用 Policy insights 做预演,记录会被阻断的运行,最后才启用强制策略。
判断是否兼容的标准不是“今天能不能点绿色”,而是依赖版本、执行环境、可追溯记录和触发权限都能被团队解释。把这四类变化拆开推进,升级就能从一次大爆炸变成几次可回滚的小变更。
常见问题
actions.lock 能替代把 uses 固定到完整 SHA 吗?
不能简单画等号。锁文件提供另一层可审查的依赖记录,是否启用 Require lockfile 仍取决于仓库策略;已有 SHA pinning 也可以在分阶段迁移中继续保留。
使用 macos-latest 就不用做回归了吗?
不是。latest 方便跟随平台迁移,但系统、Xcode 和架构仍可能变化。发布链路应定期验证,或在需要稳定性的阶段使用显式 runner 标签。
-
314 收藏
-
Golang · Go教程 | 3个月前 | CI/CD · gitHub actions · Go教程 · 持续集成 · Go 持续集成 CI Go test GitHub Actions self-hosted runner 自托管 runner340 收藏
-
216 收藏
-
351 收藏
-
196 收藏
-
306 收藏
-
361 收藏
-
321 收藏
-
科技周边 · 业界新闻 | 1小时前 | MySQL · 查询优化 · explain index 生成列 MySQL 8.4 generated column JSON_UNQUOTE SHOW WARNINGS127 收藏
-
374 收藏
-
218 收藏
-
399 收藏
-
161 收藏
-
219 收藏
-
316 收藏
-
461 收藏
-
329 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习