The ubuntu-22.04 countdown
The ubuntu-22.04 and ubuntu-22.04-arm hosted runners are being
retired. GitHub announced the schedule in
actions/runner-images#14254:
| date | what happens |
|---|---|
| September 17, 2026 | deprecation begins — longer queue times during peak hours |
| March 23 / 30, April 6 / 13, 2027 | scheduled failure brownouts — jobs that run during the windows fail |
| April 17, 2027 | fully unsupported — jobs requesting the label stop running entirely |
(Dates from the announcement as of 2026-09-08; the issue is the source of truth if GitHub adjusts the schedule.)
ubuntu-latest users are not affected — it has pointed at
ubuntu-24.04 since late 2024. This page is about workflows that pin
the label.
How many repos are still on it?
Snapshot of 2026-09-08, static lint of the default branch of the 250 most-starred repos on GitHub (205 with analyzable workflows — same population as the state of the top 250 study):
- 21 of 205 repos still pin
ubuntu-22.04somewhere - 155 jobs across 74 workflow files
The busiest offenders:
| repo | jobs pinning ubuntu-22.04* | workflow files |
|---|---|---|
| huggingface/transformers | 45 | 25 |
| localsend/localsend | 19 | 7 |
| microsoft/playwright | 19 | 5 |
| coder/code-server | 12 | 4 |
| clash-verge-rev/clash-verge-rev | 9 | 5 |
| openclaw/openclaw | 7 | 3 |
| farion1231/cc-switch | 6 | 3 |
| ggml-org/llama.cpp | 6 | 4 |
| unslothai/unsloth | 6 | 3 |
| louislam/uptime-kuma | 4 | 1 |
(A “job” here is one D020 finding: one runs-on: label occurrence,
including labels reached through ${{ matrix.os }} values. Counts are
what gha-doctor rule D020
reports with --lint-only — no run history involved.)
The one-command migration
gha-doctor flags every pinned ubuntu-22.04/ubuntu-22.04-arm label
(rule D020) and --fix rewrites them to ubuntu-24.04 /
ubuntu-24.04-arm — a same-architecture, mechanical swap with an
unambiguous target:
$ gha-doctor --diff # preview the patch
$ gha-doctor --fix # apply it
No checkout handy? Lint any repo remotely and apply the patch locally:
$ gha-doctor --repo you/yourrepo --diff > bump.patch
$ git apply bump.patch # in a clone
What --fix deliberately does not touch (you get a loud skip note
instead of a silent edit):
- labels reached through
${{ matrix.KEY }}— the matrix value’s text may be referenced inif:/include:/exclude:logic the linter can’t see - Windows and macOS labels — the target is a judgment call (see below)
After the bump, skim the ubuntu-24.04 image manifest if your workflow leans on preinstalled tools: the 24.04 image ships different default tool versions than 22.04 did.
While you’re in there: macos-14 dies sooner
macos-14 (+ -large/-xlarge) is on a shorter countdown —
brownouts since July 6, 2026 and fully unsupported November 2, 2026
(#13518).
D020 flags it too; the fix is by hand (macos-15 or macos-26 — newer
images change Xcode majors, so the target is your call).
Generated by
scripts/gen-runner-countdown.py
from a fresh top-250 sweep. See also: rules reference ·
state of the top 250 ·
the CI waste ledger.