2026年了,GitHub 终于知道告诉你 runner 哪天停用了
写过 CI 的人都踩过这个坑——某天早上 workflow 突然全红了,runner 报错版本不再支持,然后翻遍 GitHub 文档也找不到这个版本哪天停用的。只能一边临时降级,一边等 GitHub 在某个角落发个公告。
2026 年 9 月,GitHub 给这个坑填上了。一个新的 REST API,可以直接查到任意 runner 版本的注册截止时间和运行时截止时间,提前规划升级,不用再靠感觉和听说了。
新 API:
GET /actions/runners/deprecations/{version}
调用示例:
curl -L -H Accept: application/vnd.github+json -H Authorization: Bearer $GITHUB_TOKEN https://api.github.com/actions/runners/deprecations/x64
返回内容:
{
runner_version: x64,
runtime_deprecates_at: 2027-03-15T00:00:00Z,
registration_deprecates_at: 2027-02-01T00:00:00Z
}
两个时间点:
runtime_deprecates_at 是这个版本的 runner 镜像哪天停止提供。
registration_deprecates_at 是这个版本哪天开始不再接受新注册。
两者通常差几周,给你足够的缓冲期迁移。
这个 API 能干什么?最直接的应用:把弃用信息接进你的升级提醒系统。
用一个简单的 GitHub Actions workflow 定期拉这个 API,runner 版本快到 registration_deprecates_at 时自动发告警:
yaml
name: Runner Version Health Check
on:
schedule:
- cron: 0 9 1
workflow_dispatch:
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v7
with:
script: |
const version = x64;
const res = await github.rest.actions.getRunnerVersionDeprecation({
owner: context.repo.owner,
repo: context.repo.repo,
version: version
});
const deprecatesAt = new Date(res.data.registration_deprecates_at);
const now = new Date();
const daysLeft = Math.ceil((deprecatesAt – now) / (1000 60 60 * 24));
if (daysLeft <= 60) {
console.log(Runner ${version} 将在 ${daysLeft} 天后停止注册);
}
这样你不会在某天早上突然收到一堆 workflow 失败告警,而是提前几周就知道该升级了。
另外两个同期更新也要注意。
除了 runner 弃用 API,GitHub Actions 9 月初还同步发了两个相关更新。
第一,vulnerability-alerts 权限细粒度化。
之前 workflow 想读 Dependabot 漏洞警报,必须开 security-events: read 或者直接用 actions: read 全开。现在新增了 vulnerability-alerts 这个最小权限粒度,只读访问警报信息,不再需要宽泛的安全事件权限:
yaml
permissions:
vulnerability-alerts: read
第二,复用 workflow 的身份追溯。
复用 workflow,之前有个坑:你在主 workflow 里用 workflow_ref 拿到的是调用方的 ref,不是实际执行的那个 workflow 文件的 ref。这对于审计和安全溯源很麻烦。
现在新增了四个 job context 属性:
job.workflow_ref:定义当前 job 的 workflow 文件的完整 ref
job.workflow_sha:定义当前 job 的 workflow 文件的 commit SHA
job.workflow_repository:workflow 文件所在的仓库
job.workflow_file_path:相对于仓库根目录的文件路径
这四个值反映的是定义当前 job 的 workflow 文件,而不是调用方。只有在复用 workflow 场景下,它们和原有的 github.workflow_ref / github.workflow_sha 才有区别。
怎么用:
yaml
jobs:
audit:
runs-on: ubuntu-latest
steps:
- name: Log workflow identity
run: |
echo Running from: ${{ job.workflow_ref }}
echo SHA: ${{ job.workflow_sha }}
echo File: ${{ job.workflow_file_path }}
echo Repo: ${{ job.workflow_repository }}
加上这三个更新,GitHub Actions 9 月的升级重点其实是可见性与控制:runner 版本生命周期可查、最小权限可配、workflow 来源可追溯。这三件事做好了,CI 的可维护性才算真正进入工程化阶段。
下一步:去你项目里搜一下 runs-on 用的是不是 ubuntu-latest,然后去 GitHub Actions 日志里翻一下当前 runner 版本,对照上面的 API 查一下它的截止时间。提前一个月处理,比突然红了再应急要舒服得多。
评论区
登录后可评论。