* Replace "ubuntu-24.04" with "ubuntu-26.04".
* 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.
* Install Ubuntu libmpdec-dev package, rather than installing libmpdec
from source (tarball).
* No longer run https://apt.llvm.org/llvm.sh, since ubuntu-26.04 provides
clang-21 by default.
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
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:
jobs:
add-header:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-slim
permissions:
issues: write
timeout-minutes: 5
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
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'
- false
- true
os:
- - ubuntu-24.04
- - ubuntu-24.04-arm
+ - ubuntu-26.04
+ - ubuntu-26.04-arm
exclude:
# Do not test BOLT with free-threading, to conserve resources
- bolt: true
free-threading: true
# BOLT currently crashes during instrumentation on aarch64
- - os: ubuntu-24.04-arm
+ - os: ubuntu-26.04-arm
bolt: true
include:
# Enable CPU-intensive tests on ARM (default build only)
- - os: ubuntu-24.04-arm
+ - os: ubuntu-26.04-arm
bolt: false
free-threading: false
test-opts: '-u cpu'
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
- 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:
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'
strategy:
fail-fast: false
matrix:
- os: [ubuntu-24.04]
+ os: [ubuntu-26.04]
env:
OPENSSL_VER: 3.5.7
PYTHONSTRICTEXTENSIONBUILD: 1
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'
jobs:
interpreter:
name: Interpreter (Debug)
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-26.04
timeout-minutes: 60
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- false
include:
- target: x86_64-unknown-linux-gnu/gcc
- runner: ubuntu-24.04
+ runner: ubuntu-26.04
- target: aarch64-unknown-linux-gnu/gcc
- runner: ubuntu-24.04-arm
+ runner: ubuntu-26.04-arm
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
sudo ./.github/workflows/posix-deps-apt.sh
- 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
./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '' }}
make all --jobs 4
- name: Test
linux-extras:
name: ${{ matrix.name }}
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-26.04
timeout-minutes: 60
strategy:
fail-fast: false
sudo ./.github/workflows/posix-deps-apt.sh
- 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
if [ "${{ matrix.use_clang }}" = "true" ]; then
export CC=clang-${{ env.LLVM_VERSION }}
fi
jobs:
notify-new-bugs-announce:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-slim
permissions:
issues: read
timeout-minutes: 10
build-essential \
pkg-config \
cmake \
+ curl \
gdb \
lcov \
libb2-dev \
libbz2-dev \
libffi-dev \
- libgdbm-dev \
libgdbm-compat-dev \
+ libgdbm-dev \
liblzma-dev \
+ libmpdec-dev \
libncurses5-dev \
libreadline6-dev \
libsqlite3-dev \
libssl-dev \
libzstd-dev \
- lzma \
- lzma-dev \
strace \
tk-dev \
uuid-dev \
xvfb \
zlib1g-dev
-
-# Workaround missing libmpdec-dev on ubuntu 24.04 by building mpdecimal
-# from source. ppa:ondrej/php (launchpad.net) are unreliable
-# (https://status.canonical.com) so fetch the tarball directly
-# from the upstream host.
-# https://www.bytereef.org/mpdecimal/
-MPDECIMAL_VERSION=4.0.1
-curl -fsSL "https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-${MPDECIMAL_VERSION}.tar.gz" \
- | tar -xz -C /tmp
-(cd "/tmp/mpdecimal-${MPDECIMAL_VERSION}" \
- && ./configure --prefix=/usr/local \
- && make -j"$(nproc)" \
- && make install)
-ldconfig
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
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
# 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
&& ' (free-threading)'
|| ''
}}
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-26.04
timeout-minutes: 60
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Install dependencies
run: |
sudo ./.github/workflows/posix-deps-apt.sh
- # Install clang
- wget https://apt.llvm.org/llvm.sh
- chmod +x llvm.sh
- sudo ./llvm.sh 21
- sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-21 100
- sudo update-alternatives --set clang /usr/bin/clang-21
- sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-21 100
- sudo update-alternatives --set clang++ /usr/bin/clang++-21
+ # On ubuntu-26.04 image, clang is clang-21 by default
if [ "${SANITIZER}" = "TSan" ]; then
# Reduce ASLR to avoid TSan crashing
- name: Install Clang and BOLT
if: ${{ fromJSON(inputs.bolt-optimizations) }}
run: |
- sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh 21
+ # On ubuntu-26.04 image, LLVM is LLVM-21 by default
sudo apt-get install --no-install-recommends bolt-21
echo PATH="$(llvm-config-21 --bindir):$PATH" >> $GITHUB_ENV
- name: Configure OpenSSL env vars
jobs:
build-wasi-reusable:
name: 'build and test'
- runs-on: ubuntu-24.04-arm
+ runs-on: ubuntu-26.04-arm
timeout-minutes: 60
env:
WASMTIME_VERSION: 38.0.3
jobs:
stale:
if: github.repository_owner == 'python'
- runs-on: ubuntu-latest
+ runs-on: ubuntu-slim
permissions:
actions: write
pull-requests: write
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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
jobs:
verify:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-slim
timeout-minutes: 5
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0