Das Problem
GitHub stellt das Runner-Label ubuntu-latest zwischen dem 19. Oktober und dem
19. November 2026 von Ubuntu 24.04 auf Ubuntu 26.04 um. Drei Arten von
Fehlern lassen sich allein aus dem Workflow vorhersagen: apt-Pakete, die es in
26.04 nicht mehr gibt (zum Beispiel gcc-9, gcc-10, clang-14 bis
clang-16, postgresql-client-16, lzma-dev, libatlas-base-dev),
Python-Versionen, die actions/setup-python auf 26.04 nicht installieren
kann, und Playwright-Versionen ohne Unterstützung für 26.04.
Der Bedarf ist belegt:
- actions/runner-images#14748,
die Ankündigung der Umstellung, hat 241 Reaktionen und 90 Kommentare. Als
Abhilfe nennt sie,
ubuntu-24.04festzuschreiben oder gegenubuntu-26.04zu testen. - Seit Beginn der Umstellung melden Projekte dieselben Fehler einzeln: Python 3.8 und 3.9 in setup-python (BOSWatch/BW3-Core#163, konflux-ci/diffused#56), Playwright (DataBiosphere/data-browser#4996, cncf/maintainer-d#179, CieloVistaSoftware/wb-starter#1955) und alte Compiler aus apt (graph-algorithms/edge-addition-planarity-suite#377). Jeder dieser Fälle wurde erst bemerkt, als das CI fehlschlug.
- Die vorherige Umstellung auf 24.04 verlief genauso: actions/runner-images#10636 (384 Reaktionen, 168 Kommentare) und tauri-apps/tauri#9662 (150 Reaktionen, 93 Kommentare).
- actionlint prüft, ob Runner-Labels gültig sind. lastgreen vergleicht einen fehlgeschlagenen Lauf mit dem letzten erfolgreichen und hilft damit erst nach einem Fehler.
Wie es funktioniert
ubuntu-latest-check liest
die Workflow-Dateien und expandiert Matrizen nach GitHubs Regeln für include
und exclude, sodass jeder Befund die betroffenen Kombinationen nennt. Für
jeden Job auf ubuntu-latest führt es drei Prüfungen aus:
- Jedes Paket aus
apt-get installoderapt installinrun:-Schritten oder ausawalsh128/cache-apt-pkgs-actionwird in den Paketindizes des Ubuntu-Archivs für beide Releases nachgeschlagen (Release,-updatesund-security, alle vier Komponenten, einschließlichProvides). Ein Paket, das es in 24.04 gibt, in 26.04 aber nicht, wird gemeldet. - Angeforderte Python-Versionen werden mit dem Manifest von
actions/python-versions verglichen. Für 26.04 gibt es keine Builds von 3.8
und 3.9 und nur Patch-Releases, die nach Einführung der 26.04-Unterstützung
gebaut wurden. Exakte Angaben wie
3.12.3schlagen deshalb ebenfalls fehl. - Für Jobs, die
playwright installausführen, wird die festgeschriebene Playwright-Version auspackage-lock.json,pnpm-lock.yamloderyarn.lockgelesen. Versionen vor 1.61.0 scheitern; 1.61.0 ist das erste Release mit Einträgen fürubuntu26.04in seiner Browser-Registry.
Jobs in einem container: oder auf self-hosted-Runnern werden übersprungen.
--repo und --owner prüfen entfernte Repositories über gh,
--label ubuntu-24.04 prüft auch festgeschriebene Jobs, und der Exit-Code ist
1, sobald es einen Fehler gibt. Der Befehl kann also als CI-Schritt laufen.
Das ist die Ausgabe für den Demo-Workflow im Repository:
$ ubuntu-latest-check examples/demo
examples/demo/.github/workflows/ci.yml:9: error: job test [os=ubuntu-latest, python-version=3.9]: python 3.9: actions/setup-python has no Python 3.9 build for Ubuntu 26.04 (it has one for 24.04)
examples/demo/.github/workflows/ci.yml:23: error: job test: apt gcc-10: apt package exists in Ubuntu 24.04 but not in 26.04
examples/demo/.github/workflows/ci.yml:23: error: job test: apt postgresql-client-16: apt package exists in Ubuntu 24.04 but not in 26.04
examples/demo/.github/workflows/ci.yml:34: error: job e2e: playwright 1.59.1: Playwright 1.59.1 (from web/package-lock.json) does not support Ubuntu 26.04, 'playwright install' fails there; 1.61.0 is the first release that does
examples/demo/.github/workflows/ci.yml:33: error: job e2e: apt libgdk-pixbuf2.0-0: apt package exists in Ubuntu 24.04 but not in 26.04
examples/demo/.github/workflows/ci.yml:33: error: job e2e: apt libx264-164: apt package exists in Ubuntu 24.04 but not in 26.04
1 workflow files, 2 jobs on ubuntu-latest, 6 errors, 0 warnings (Ubuntu 24.04 -> 26.04)
Auf den Default-Branches öffentlicher Repositories meldete es am 29. Oktober
2026 unter anderem lzma-dev in python/mypy, libatlas-base-dev in
numpy/numpy und Playwright 1.58.2 in CieloVistaSoftware/wb-starter. Mit
--label ubuntu-24.04 meldete es die in cncf/maintainer-d festgeschriebene
Playwright-Version 1.57.0, die das dortige Issue beschreibt.
Tests
Die Unit-Tests laufen gegen feste Paket- und Versionslisten. Sie decken das
Herauslesen von apt-Paketnamen aus Shell-Skripten ab, die Expansion von
Matrizen, das Erkennen von runs-on und container, den Abgleich von
Python-Versionen, die drei Lockfile-Formate, apt-Quellen, die einen Fehler zur
Warnung herabstufen, übersprungene Jobs und ungültiges YAML. Zwei Live-Tests
verwenden das echte Ubuntu-Archiv und das python-versions-Manifest: Der
Demo-Workflow muss genau die sechs Befunde oben liefern, und der eigene
Workflow des Repositories muss bestehen. Das CI führt alle Tests mit Python 3.9
und 3.13 aus, bei jedem Push und einmal pro Woche.
Grenzen
- Geprüft wird nur, was im Workflow steht. Pakete, die Skripte, Makefiles oder Shell-Variablen installieren, sieht das Werkzeug nicht.
- Fügt ein Job eine apt-Quelle hinzu, wird ein fehlendes Paket als Warnung gemeldet. Ob ein PPA für 26.04 baut, wird nicht geprüft.
- Geprüft wird nur x64.
- Ausdrücke außer Verweisen auf
matrix.*, literalen Strings und||werden nicht ausgewertet. - Andere Änderungen im 26.04-Image (Ruby-Versionen, die Standard-Java-Version,
/tmpals tmpfs, neuere Compiler) werden nicht geprüft. - Entfernte Scans lesen nur den Default-Branch.
Code und Installationsanleitung liegen unter github.com/Jwrede/ubuntu-latest-check.