GitHub Actions: "The ubuntu-latest label will migrate to Ubuntu 26"
GitHub is moving the ubuntu-latest label from Ubuntu 24.04 to Ubuntu 26.04. Every job that asks for ubuntu-latest carries this notice in its annotations:
The ubuntu-latest label will migrate to Ubuntu 26 beginning October 19, 2026. For more information, see https://github.com/actions/runner-images/issues/14748
The notice itself does nothing. What matters is that the move is already under way: it rolls out over several weeks from October 19 and is planned to be complete by November 19, 2026 (runner-images #14748). Until then, the same workflow can get 24.04 in one job and 26.04 in the next, and comments on that issue describe builds that started failing once a job landed on 26.04, with nothing changed in the repository. It concerns the x64 label; ubuntu-24.04-arm and ubuntu-slim are not in the list of affected images.
Which image did the job get
Open the job's "Set up job" step. The Runner Image group names it:
Runner Image Image: ubuntu-24.04 Version: 20261025.353.1
On the new image it says ubuntu-26.04, and the Operating System group above it shows 26.04. Compare a failed job with the last one that passed before looking for anything else. A re-run can land on the other image, so a re-run that passes proves nothing until November 19.
What breaks
Java: the default is 25, and JDK 8 is gone
The image's tool list sets the default JDK to 25 on 26.04 (17 on 24.04) and installs 11, 17, 21 and 25, without 8 (toolset-2604.json in actions/runner-images, November 3). The table in the announcement still says 17; the image's own documentation says 25. Gradle can run on Java 25 only from 9.1.0 (Gradle's compatibility table), so a job that runs Gradle 8 or older without choosing a JDK fails while compiling the build script, with an error such as:
Unsupported class file major version 69
That includes flutter build apk, which runs the project's Android Gradle wrapper. Choose the JDK yourself, or move the wrapper to Gradle 9.1 or later:
- uses: actions/setup-java@v6
with:
distribution: temurin
java-version: '17'
Since 17 is still installed on 26.04, one step also works: echo "JAVA_HOME=$JAVA_HOME_17_X64" >> "$GITHUB_ENV". JAVA_HOME_8_X64 is not set on 26.04.
Python: no 3.8 or 3.9, and only recent patch releases
actions/setup-python downloads a build made for the runner's exact Ubuntu version. On November 3 its list of builds had nothing for 26.04 in 3.8 or 3.9, and only the newest patch releases of the others: 3.10.20 to 3.10.22, 3.11.15 to 3.11.18, 3.12.13 to 3.12.16, 3.13.13 to 3.13.18 and 3.14.6 to 3.14.10 (actions/python-versions, versions-manifest.json). An older pin, such as 3.12.4 or a .python-version file with one, fails at setup with a message like this:
The version '3.9' with architecture 'x64' was not found for ubuntu 26.04.
Ask for the minor version ("3.12"), or keep the old versions on 24.04:
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
os: [ubuntu-latest]
include:
- python-version: "3.9"
os: ubuntu-24.04
runs-on: ${{ matrix.os }}
Other changes reported so far
sudo -E: one project's CI broke on asudo -Estep, and the report suggests--preserve-env=with the variables you need instead (a comment on runner-images #14748, November 2).- Docker: the tool list installs Docker 29.4.2 on 26.04 and 28.0.4 on 24.04.
- The kernel (7.0) and systemd (259) are new, as listed in the announcement.
What to do
- To keep things as they were, name the old image. The notice goes away too:
runs-on: ubuntu-24.04
- To move on your own schedule, try
runs-on: ubuntu-26.04in a branch or as an extra matrix entry first, fix what fails, then go back toubuntu-latestor stay onubuntu-26.04. - If something on 26.04 is broken that you cannot fix in your workflow, the announcement asks for an issue in actions/runner-images.
Azure Pipelines
The announcement lists Azure DevOps as affected too, with vmImage: ubuntu-latest. A comment on October 26 pointed out that Microsoft's page of hosted agents still showed ubuntu-latest as 24.04, but on November 2 a pipeline that names no vmImage ran on 26.04 and failed with permission errors (a comment on runner-images #14748). On 26.04 the agent's user is runner instead of vsts, so paths under its home directory change (runner-images #15028). vmImage: ubuntu-24.04 keeps the old image.
See which jobs failed from IntelliJ IDEA
Pipeline Inbox for GitHub Actions Workflows, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, lists the runs of all your repositories in an IDE tool window, with their jobs and steps, so a job that started failing during the move stands out next to the ones that passed, and your current branch's runs are in the status bar. Reading is free; re-running failed jobs, cancelling, running workflows and reviewing deployments are Pro (US$1.50 a month, with a 30-day trial).
GitHub and GitHub Actions are trademarks of GitHub, Inc.; IntelliJ IDEA is a trademark of JetBrains s.r.o.; Ubuntu is a trademark of Canonical Ltd. This page is not affiliated with, sponsored or endorsed by GitHub, Inc., JetBrains or Canonical.
More: "No space left on device" on a hosted runner · The "Node.js 20 is deprecated" warning · The macOS 14 image retirement · Re-running jobs with debug logging · GitHub Actions plugins for IntelliJ IDEA compared · 日本語