https://github.com/python/cpython/commit/58330cf55746924225b99f7755fdf176c328b3dc
commit: 58330cf55746924225b99f7755fdf176c328b3dc
branch: 3.14
author: Victor Stinner <[email protected]>
committer: vstinner <[email protected]>
date: 2026-07-11T11:47:03+02:00
summary:

[3.14] gh-152785: Upgrade Ubuntu from 24.04 to 26.04 in GitHub Actions 
(#152717) (#153416) (#153526)

* [3.15] gh-152785: Upgrade Ubuntu from 24.04 to 26.04 in GitHub Actions 
(#152717) (#153416)

gh-152785: Upgrade Ubuntu from 24.04 to 26.04 in GitHub Actions (#152717)

* Replace "ubuntu-24.04" with "ubuntu-26.04" on most jobs.
* Replace "ubuntu-latest" with "ubuntu-26.04" for Cross build Linux.
* Replace "ubuntu-latest" with "ubuntu-slim" for small workloads.
* Update ".github/actionlint.yaml" to allow "ubuntu-26.04"
  and "ubuntu-26.04-arm" images.

Backport changes:

* Keep Ubuntu 24.04 and llvm.sh to install LLVM 19 and LLVM 20.
* WASI uses ubuntu-26.04, not ubuntu-26.04-arm.

(cherry picked from commit 4c79929705eb31959a6f4071cc34583de0737a28)

Co-authored-by: Hugo van Kemenade <[email protected]>
(cherry picked from commit da999e638c03a05ed2b0f8a828f4013c7f9179bd)

Co-authored-by: Hugo van Kemenade <[email protected]>

files:
M .github/actionlint.yaml
M .github/workflows/add-issue-header.yml
M .github/workflows/build.yml
M .github/workflows/jit.yml
M .github/workflows/new-bugs-announce-notifier.yml
M .github/workflows/posix-deps-apt.sh
M .github/workflows/require-pr-label.yml
M .github/workflows/reusable-docs.yml
M .github/workflows/reusable-emscripten.yml
M .github/workflows/reusable-san.yml
M .github/workflows/reusable-ubuntu.yml
M .github/workflows/reusable-wasi.yml
M .github/workflows/stale.yml
M .github/workflows/tail-call.yml
M .github/workflows/verify-expat.yml

diff --git a/.github/actionlint.yaml b/.github/actionlint.yaml
index eacfff24889021..61ee08db9919bb 100644
--- a/.github/actionlint.yaml
+++ b/.github/actionlint.yaml
@@ -1,5 +1,12 @@
 config-variables: null
 
+# Pending release of actionlint > 1.7.12 for ubuntu-26.04* support:
+# https://github.com/rhysd/actionlint/pull/683
+self-hosted-runner:
+  labels:
+    - ubuntu-26.04
+    - ubuntu-26.04-arm
+
 paths:
   .github/workflows/**/*.yml:
      ignore:
diff --git a/.github/workflows/add-issue-header.yml 
b/.github/workflows/add-issue-header.yml
index 4c25976b9c24f7..55eb6bf33b8128 100644
--- a/.github/workflows/add-issue-header.yml
+++ b/.github/workflows/add-issue-header.yml
@@ -17,7 +17,7 @@ permissions:
 
 jobs:
   add-header:
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-slim
     permissions:
       issues: write
     timeout-minutes: 5
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index fa214f10de0d5f..cdd91a66968d78 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -100,7 +100,7 @@ jobs:
     name: 'Check if Autoconf files are up to date'
     # Don't use ubuntu-latest but a specific version to make the job
     # reproducible: to get the same tools versions (autoconf, aclocal, ...)
-    runs-on: ubuntu-24.04
+    runs-on: ubuntu-26.04
     container:
       image: ghcr.io/python/autoconf:2025.01.02.12581854023
     timeout-minutes: 60
@@ -143,7 +143,7 @@ jobs:
     name: 'Check if generated files are up to date'
     # Don't use ubuntu-latest but a specific version to make the job
     # reproducible: to get the same tools versions (autoconf, aclocal, ...)
-    runs-on: ubuntu-24.04
+    runs-on: ubuntu-26.04
     timeout-minutes: 60
     needs: build-context
     if: needs.build-context.outputs.run-tests == 'true'
@@ -272,6 +272,8 @@ jobs:
         free-threading:
         - false
         - true
+        # For BOLT jobs, https://apt.llvm.org/llvm.sh doesn't support LLVM 19
+        # on Ubuntu 26.04, so stick to Ubuntu 24.04 until LLVM is upgraded.
         os:
         - ubuntu-24.04
         - ubuntu-24.04-arm
@@ -297,7 +299,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        os: [ubuntu-24.04]
+        os: [ubuntu-26.04]
         ssllib:
           # See Tools/ssl/make_ssl_data.py for notes on adding a new version
           ## OpenSSL
@@ -370,7 +372,7 @@ jobs:
           - arch: aarch64
             runs-on: macos-26
           - arch: x86_64
-            runs-on: ubuntu-24.04
+            runs-on: ubuntu-26.04
 
     runs-on: ${{ matrix.runs-on }}
     steps:
@@ -417,7 +419,7 @@ jobs:
 
   test-hypothesis:
     name: "Hypothesis tests on Ubuntu"
-    runs-on: ubuntu-24.04
+    runs-on: ubuntu-26.04
     timeout-minutes: 60
     needs: build-context
     if: needs.build-context.outputs.run-ubuntu == 'true'
@@ -528,7 +530,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        os: [ubuntu-24.04]
+        os: [ubuntu-26.04]
     env:
       OPENSSL_VER: 3.5.7
       PYTHONSTRICTEXTENSIONBUILD: 1
@@ -592,7 +594,7 @@ jobs:
 
   cross-build-linux:
     name: Cross build Linux
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-26.04
     timeout-minutes: 60
     needs: build-context
     if: needs.build-context.outputs.run-ubuntu == 'true'
diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml
index c148c55b623f69..27846f8843e792 100644
--- a/.github/workflows/jit.yml
+++ b/.github/workflows/jit.yml
@@ -26,7 +26,7 @@ env:
 jobs:
   interpreter:
     name: Interpreter (Debug)
-    runs-on: ubuntu-24.04
+    runs-on: ubuntu-26.04
     timeout-minutes: 60
     steps:
       - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 
v6.0.2
@@ -138,6 +138,8 @@ jobs:
           - true
           - false
         include:
+          # https://apt.llvm.org/llvm.sh doesn't support LLVM 19
+          # on Ubuntu 26.04, so stick to Ubuntu 24.04 until LLVM is upgraded.
           - target: x86_64-unknown-linux-gnu/gcc
             runner: ubuntu-24.04
           - target: aarch64-unknown-linux-gnu/gcc
@@ -162,6 +164,8 @@ jobs:
   linux-extras:
     name: ${{ matrix.name }}
 
+    # https://apt.llvm.org/llvm.sh doesn't support LLVM 19 on Ubuntu 26.04,
+    # so stick to Ubuntu 24.04 until LLVM is upgraded.
     runs-on: ubuntu-24.04
     timeout-minutes: 60
     strategy:
diff --git a/.github/workflows/new-bugs-announce-notifier.yml 
b/.github/workflows/new-bugs-announce-notifier.yml
index e585657dde6881..ea175ed20d1e7b 100644
--- a/.github/workflows/new-bugs-announce-notifier.yml
+++ b/.github/workflows/new-bugs-announce-notifier.yml
@@ -10,7 +10,7 @@ permissions:
 
 jobs:
   notify-new-bugs-announce:
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-slim
     permissions:
       issues: read
     timeout-minutes: 10
diff --git a/.github/workflows/posix-deps-apt.sh 
b/.github/workflows/posix-deps-apt.sh
index 1be3f3d0ffffcc..3b3d90e198360e 100755
--- a/.github/workflows/posix-deps-apt.sh
+++ b/.github/workflows/posix-deps-apt.sh
@@ -4,21 +4,20 @@ apt-get update
 apt-get -yq --no-install-recommends install \
     build-essential \
     pkg-config \
+    curl \
     gdb \
     lcov \
     libb2-dev \
     libbz2-dev \
     libffi-dev \
-    libgdbm-dev \
     libgdbm-compat-dev \
+    libgdbm-dev \
     liblzma-dev \
     libncurses5-dev \
     libreadline6-dev \
     libsqlite3-dev \
     libssl-dev \
     libzstd-dev \
-    lzma \
-    lzma-dev \
     strace \
     tk-dev \
     uuid-dev \
diff --git a/.github/workflows/require-pr-label.yml 
b/.github/workflows/require-pr-label.yml
index f3e2666879530f..8af254c10786e1 100644
--- a/.github/workflows/require-pr-label.yml
+++ b/.github/workflows/require-pr-label.yml
@@ -11,7 +11,7 @@ jobs:
   label-dnm:
     name: DO-NOT-MERGE
     if: github.repository_owner == 'python'
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-slim
     permissions:
       pull-requests: read
     timeout-minutes: 10
@@ -28,7 +28,7 @@ jobs:
   label-reviews:
     name: Unresolved review
     if: github.repository_owner == 'python'
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-slim
     permissions:
       pull-requests: read
     timeout-minutes: 10
diff --git a/.github/workflows/reusable-docs.yml 
b/.github/workflows/reusable-docs.yml
index 3de76dd48c5961..2e54cd9e23cab7 100644
--- a/.github/workflows/reusable-docs.yml
+++ b/.github/workflows/reusable-docs.yml
@@ -90,7 +90,7 @@ jobs:
   # Run "doctest" on HEAD as new syntax doesn't exist in the latest stable 
release
   doctest:
     name: 'Doctest'
-    runs-on: ubuntu-24.04
+    runs-on: ubuntu-26.04
     timeout-minutes: 60
     steps:
     - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
diff --git a/.github/workflows/reusable-emscripten.yml 
b/.github/workflows/reusable-emscripten.yml
index 38e6dcceb8f47c..c14a41b5682877 100644
--- a/.github/workflows/reusable-emscripten.yml
+++ b/.github/workflows/reusable-emscripten.yml
@@ -12,7 +12,7 @@ env:
 jobs:
   build-emscripten-reusable:
     name: 'build and test'
-    runs-on: ubuntu-24.04
+    runs-on: ubuntu-26.04
     timeout-minutes: 40
     steps:
     - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
diff --git a/.github/workflows/reusable-san.yml 
b/.github/workflows/reusable-san.yml
index 317763c65f3c25..47e41c90a1658b 100644
--- a/.github/workflows/reusable-san.yml
+++ b/.github/workflows/reusable-san.yml
@@ -27,6 +27,8 @@ jobs:
         && ' (free-threading)'
         || ''
       }}
+    # https://apt.llvm.org/llvm.sh doesn't support LLVM 20 on Ubuntu 26.04,
+    # so stick to Ubuntu 24.04 until LLVM is upgraded.
     runs-on: ubuntu-24.04
     timeout-minutes: 60
     steps:
diff --git a/.github/workflows/reusable-ubuntu.yml 
b/.github/workflows/reusable-ubuntu.yml
index 63527bd02b94f6..6cd480b0285346 100644
--- a/.github/workflows/reusable-ubuntu.yml
+++ b/.github/workflows/reusable-ubuntu.yml
@@ -43,6 +43,8 @@ jobs:
       run: sudo ./.github/workflows/posix-deps-apt.sh
     - name: Install Clang and BOLT
       if: ${{ fromJSON(inputs.bolt-optimizations) }}
+      # For BOLT jobs, https://apt.llvm.org/llvm.sh doesn't support LLVM 19
+      # on Ubuntu 26.04, so stick to Ubuntu 24.04 until LLVM is upgraded.
       run: |
         sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh 19
         sudo apt-get install --no-install-recommends bolt-19
diff --git a/.github/workflows/reusable-wasi.yml 
b/.github/workflows/reusable-wasi.yml
index eb26e248c15b5a..bd08c120fd00ee 100644
--- a/.github/workflows/reusable-wasi.yml
+++ b/.github/workflows/reusable-wasi.yml
@@ -12,7 +12,7 @@ env:
 jobs:
   build-wasi-reusable:
     name: 'build and test'
-    runs-on: ubuntu-24.04
+    runs-on: ubuntu-26.04
     timeout-minutes: 60
     env:
       WASMTIME_VERSION: 38.0.3
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
index 1fbc4a20dbc7dd..56193a901ce076 100644
--- a/.github/workflows/stale.yml
+++ b/.github/workflows/stale.yml
@@ -10,7 +10,7 @@ permissions:
 jobs:
   stale:
     if: github.repository_owner == 'python'
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-slim
     permissions:
       pull-requests: write
     timeout-minutes: 10
diff --git a/.github/workflows/tail-call.yml b/.github/workflows/tail-call.yml
index a9b938fdd783cc..8fd63d7a6f8988 100644
--- a/.github/workflows/tail-call.yml
+++ b/.github/workflows/tail-call.yml
@@ -100,13 +100,13 @@ jobs:
       matrix:
         include:
           - target: x86_64-unknown-linux-gnu/gcc
-            runner: ubuntu-24.04
+            runner: ubuntu-26.04
             configure_flags: --with-pydebug
           - target: x86_64-unknown-linux-gnu/gcc-free-threading
-            runner: ubuntu-24.04
+            runner: ubuntu-26.04
             configure_flags: --disable-gil
           - target: aarch64-unknown-linux-gnu/gcc
-            runner: ubuntu-24.04-arm
+            runner: ubuntu-26.04-arm
             configure_flags: --with-pydebug
     steps:
       - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 
v6.0.2
@@ -117,8 +117,7 @@ jobs:
           python-version: '3.11'
       - name: Build
         run: |
-          sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh 
${{ env.LLVM_VERSION }}
-          export PATH="$(llvm-config-${{ env.LLVM_VERSION }} --bindir):$PATH"
+          # On ubuntu-26.04 image, clang is clang-21 by default
           CC=clang-${{ env.LLVM_VERSION }} ./configure --with-tail-call-interp 
${{ matrix.configure_flags }}
           make all --jobs 4
       - name: Test
diff --git a/.github/workflows/verify-expat.yml 
b/.github/workflows/verify-expat.yml
index 472a11db2da5fb..158e8f10377cad 100644
--- a/.github/workflows/verify-expat.yml
+++ b/.github/workflows/verify-expat.yml
@@ -20,7 +20,7 @@ concurrency:
 
 jobs:
   verify:
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-slim
     timeout-minutes: 5
     steps:
       - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 
v6.0.2

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to