Software

GitHub's ubuntu-latest moves to Ubuntu 26.04 on October 19

By · Tue Sep 29 2026 · 6 min read · 0 views

View as a Web Story

Software#github actions#devops#ubuntu 26.04#ci#runner images

GitHub Actions runners moving from Ubuntu 24.04 to Ubuntu 26.04

GitHub Actions starts moving the ubuntu-latest label from Ubuntu 24.04 to Ubuntu 26.04 on October 19, 2026. The rollout finishes by November 19, according to the GitHub changelog entry from September 17. Any workflow that says runs-on: ubuntu-latest will silently get a new toolchain in that window.

The changelog does not list the version changes. This post does, using GitHub's own image inventories. Short version: the default Node.js, Python, Java, PHP, Docker Compose and CMake all jump a major version.

When does ubuntu-latest change to Ubuntu 26.04?

ubuntu-latest is a GitHub Actions runner label that points at the newest stable Ubuntu image GitHub hosts. GitHub says it will move that label to Ubuntu 26.04 gradually between October 19 and November 19, 2026, per the runner-images announcement thread.

Gradual means two repositories may see different images on the same day. A green build can go red with no commit in between. That is the failure mode to plan for.

GitHub's advice is two lines. Test against ubuntu-26.04 before the window opens, or pin ubuntu-24.04 if you are not ready.

What changes between the ubuntu-24.04 and ubuntu-26.04 runner images?

Ubuntu 26.04 is the April 2026 long-term-support release of Ubuntu, and GitHub's 26.04 image ships newer versions of nearly every default tool. The table compares the two published inventories: the Ubuntu 24.04 image README (image 20260920.314.1) and the Ubuntu 26.04 image README (image 20260920.143.1).

Tool Ubuntu 24.04 image Ubuntu 26.04 image
Kernel 6.17.0-1022-azure 7.0.0-1012-azure
Python (system default) 3.12.3 3.14.4
Node.js (default) 22.23.2 24.21.0
npm 10.9.8 11.19.0
Java (default) 17.0.20 25.0.4
PHP 8.3.6 8.5.4
Ruby (default) 3.2.3 3.3.8
OpenSSL 3.0.13 3.5.5
Docker Engine and client 28.0.4 29.4.2
Docker Compose 2.38.2 5.1.3
CMake 3.31.6 4.4.3
Helm 3.22.0 4.3.0
GNU C++ (newest) 14.2.0 15.2.0
PostgreSQL 16.15 18.6
MySQL 8.0.46 8.4.11
Bash 5.2.21 5.3.9

Some third-party guides claim OpenSSL moves from 3.0 to 3.3. GitHub's own 26.04 inventory lists 3.5.5, so trust the inventory.

Methodology: we analyzed both README inventories, image builds 20260920.314.1 and 20260920.143.1, line by line. The table keeps every tool whose version differs or that appears in only one file, and every version number passed a fact-check against those two files.

Which tools disappear from the Ubuntu 26.04 runner image?

The Ubuntu 26.04 image drops several tools that the 24.04 image still carries, according to the full 26.04 software inventory. If a job calls one of them by name, it fails with "command not found".

Removed from the 26.04 image Notes
Java 8 Java 11, 17, 21 and 25 remain
Clang 16, 17, 18 Clang 20, 21, 22 replace them
GNU C++ 12.4, 13.3, 14.2 13.4, 14.3, 15.2 replace them
Miniconda The CONDA variable is now empty
Julia, Swift, Mercurial Install them in the job
Fastlane, Lerna, Newman, Parcel, Pulumi Install with the tool's own installer in the job
Haveged, MediaInfo, Sphinx search server Install with apt-get in the job

What stays the same on ubuntu-26.04?

Ubuntu 24.04 is the previous long-term-support image, and it caches the same runtimes as the new one. The cached versions that actions/setup-* uses are identical on both images, as the cached tools list for 24.04 shows. Both list Python 3.10.21 through 3.14.7, Node.js 22.23.2 and 24.21.0, Go 1.24.13 through 1.26.8, and Ruby 3.2.11 through 4.0.7.

Advertisement

Both images also carry the same .NET SDKs (8.0 through 10.0.401), Gradle 9.7.1, Docker Buildx 0.37.1 and Google Chrome 153.0.8010.52. A workflow that installs its runtimes with setup-node, setup-python and setup-java will not notice the change.

The workflows that do notice are the ones that trust whatever python, node, java or docker happens to be on the path.

What will most likely break on Ubuntu 26.04?

Four kinds of jobs break: those that use the default runtime, those that build native code, those that use Docker Compose, and those that call a removed tool. Does your workflow call python or node without a setup step? Then the first kind is yours. GitHub's general availability notice for 26.04 confirms the image is production-ready, so the break is a version change, not a bug.

  1. Default runtimes. A step that runs python script.py without setup-python now runs Python 3.14.4, not 3.12.3. Older pinned dependencies without 3.14 wheels fall back to source builds or fail.
  2. Native builds. CMake 4.4.3 replaces 3.31.6. CMake 4.0 removed support for projects that declare cmake_minimum_required below 3.5, according to the CMake 4.0 release notes. Older vendored projects then stop configuring, unless you set CMAKE_POLICY_VERSION_MINIMUM. OpenSSL 3.5.5 and GCC 15.2 can also surface new warnings and errors.
  3. Docker Compose. Compose jumps from 2.38.2 to 5.1.3, a change of major version. Compose files that relied on removed or renamed behaviour need a test run.
  4. Databases. MySQL 8.4.11 replaces 8.0.46, and PostgreSQL 18.6 replaces 16.15. MySQL 8.4 disables the mysql_native_password plugin by default, per the MySQL 8.4 reference manual, so old client configs can fail to authenticate.

Helm also moves from 3.22.0 to 4.3.0, so deploy jobs that run helm from the runner image deserve a dry run.

How do I test my workflows on Ubuntu 26.04 today?

Add a matrix that runs each job on both images, and let the new image fail without blocking the merge. This gives you the results before GitHub flips the label, as the migration notice from GitHub advises.

jobs:
  test:
    runs-on: ${{ matrix.os }}
    continue-on-error: ${{ matrix.os == 'ubuntu-26.04' }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-24.04, ubuntu-26.04]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
      - run: npm ci && npm test

Run it for a week. When the 26.04 column is green, change runs-on to ubuntu-latest or to ubuntu-26.04 explicitly.

Should I pin ubuntu-24.04 or move to ubuntu-26.04?

Move to ubuntu-26.04 if your jobs install runtimes with the setup actions. Pin ubuntu-24.04 only as a short-term brake for jobs that call removed tools or old CMake projects.

The reasoning is the clock. GitHub has already started deprecating its Ubuntu 22.04 images, with full retirement by April 17, according to the Ubuntu 22 deprecation notice. Pinning delays the work but does not remove it.

Pinning has a second cost. A pinned label stops receiving newer tool versions, so security fixes in newer OpenSSL and Docker builds do not reach the job. Use the pin for weeks, not quarters.

A practical order for a team with many repositories:

  1. Grep for ubuntu-latest across every workflow file.
  2. Add the two-image matrix to the five most important pipelines first.
  3. Replace bare python, node and java calls with the setup actions.
  4. Install any removed tool explicitly, for example npm i -g newman.
  5. Switch to ubuntu-26.04 once the matrix is green, before October 19.

The same month also brings the retirement covered in Python 3.10 dies in October. 3.14 is four hops away, and Node.js Has a New Release Schedule: What Changes explains why Node 24 is now the default worth targeting.

Advertisement

FAQ

When does ubuntu-latest switch to Ubuntu 26.04?

GitHub starts moving `ubuntu-latest` to Ubuntu 26.04 on October 19, 2026 and finishes by November 19, 2026. The rollout is gradual, so different repositories switch on different days within that window.

How do I keep using Ubuntu 24.04 in GitHub Actions?

Set `runs-on: ubuntu-24.04` in the workflow instead of `ubuntu-latest`. GitHub recommends this pin for teams that are not ready. Treat it as temporary, because older images eventually get deprecated.

What Python version does the Ubuntu 26.04 runner use?

The Ubuntu 26.04 runner image defaults to Python 3.14.4, up from 3.12.3 on Ubuntu 24.04. The cached versions available through `actions/setup-python` are the same on both images, 3.10.21 through 3.14.7.

Will actions/setup-node still work on Ubuntu 26.04?

Yes. Both images cache Node.js 22.23.2 and 24.21.0, so `actions/setup-node` resolves the same versions. Only jobs that call `node` without the setup action see the default move from 22.23.2 to 24.21.0.

Comments

Loading…

Sign in to join the conversation.

Related posts

Java 27 short-term release compared with Java 25 LTS support dates

Java 27 is not LTS: should you leave Java 25?

Java 27 shipped on September 15, 2026, and it is not a long-term-support release. Oracle says it will provide updates to JDK 27 until March 2027, when Oracle JDK 28 supersedes it. The next

Tue Sep 29 2026 · 6 min read · 0 views

Software