This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 5cdfa8571b0 Use Python 3.14 as the default Python of the 3.5.0 images 
(#76800)
5cdfa8571b0 is described below

commit 5cdfa8571b0f273d6afe8452b66d379b33ea5410
Author: Jarek Potiuk <[email protected]>
AuthorDate: Tue Nov 10 10:53:19 2026 +0100

    Use Python 3.14 as the default Python of the 3.5.0 images (#76800)
    
    The default Python of the image is meant to be the newest Python version
    that every provider installed in the regular image supports. All of them
    support Python 3.14 - the only provider that excludes it is not part of the
    image - so the default had fallen behind. This applies from Airflow 3.5.0
    on; the 3.4 images keep Python 3.13 as their default.
    
    Generated-by: Claude Opus 5
---
 Dockerfile                                                        | 4 ++--
 Dockerfile.ci                                                     | 4 ++--
 dev/breeze/src/airflow_breeze/global_constants.py                 | 2 +-
 docker-stack-docs/README.md                                       | 8 ++++----
 docker-stack-docs/build-arg-ref.rst                               | 2 +-
 docker-stack-docs/build.rst                                       | 4 ++--
 docker-stack-docs/changelog.rst                                   | 7 +++++++
 .../docker-examples/customizing/add-build-essential-custom.sh     | 2 +-
 docker-stack-docs/docker-examples/customizing/custom-sources.sh   | 2 +-
 .../docker-examples/customizing/pypi-dev-runtime-deps.sh          | 2 +-
 .../docker-examples/customizing/pypi-extras-and-deps.sh           | 2 +-
 .../docker-examples/customizing/pypi-selected-version.sh          | 2 +-
 .../docker-examples/restricted/restricted_environments.sh         | 2 +-
 docker-stack-docs/index.rst                                       | 8 ++++----
 14 files changed, 29 insertions(+), 22 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index 55f19f59395..012bbd74711 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -60,7 +60,7 @@ ARG AIRFLOW_VERSION="3.4.0"
 #
 # The FIPS-validated variants require a paid Docker subscription and cannot be 
mirrored or made the
 # default, but you can build a FIPS-compliant image by pointing the build at 
one:
-#   docker build . --build-arg 
BASE_IMAGE="dhi.io/python:3.13.18-debian13-fips-dev"
+#   docker build . --build-arg 
BASE_IMAGE="dhi.io/python:3.14.10-debian13-fips-dev"
 #
 # AIRFLOW_IMAGE_FLAVOR="legacy" builds the image the way it was built before 
the hardened base images:
 # BASE_IMAGE is then a plain Debian image (for example "debian:bookworm-slim") 
and Python
@@ -71,7 +71,7 @@ ARG AIRFLOW_VERSION="3.4.0"
 # build fails if a version passed here does not match it. Breeze passes the 
Python patchlevel that
 # "breeze ci upgrade" last moved, so a new patch release also rebuilds the 
legacy flavor.
 ARG AIRFLOW_IMAGE_FLAVOR="hardened"
-ARG 
BASE_IMAGE="ghcr.io/apache/airflow/base/python:3.13.18-debian13-dev@sha256:3a4e14a0dc4300490df0d33f49c6d5a1bc76bd7e48de1214656f5fd77a84504b"
+ARG 
BASE_IMAGE="ghcr.io/apache/airflow/base/python:3.14.10-debian13-dev@sha256:e1c528dee57ce33c3192099679a1690a1541030f5137df3587d3ed0454a172b6"
 
 # DEV_OS_DEPS_IMAGE / RUNTIME_OS_DEPS_IMAGE: the images the build and the 
final image install their OS
 # dependencies on. By default both are BASE_IMAGE and the build installs them 
from the apt repositories.
diff --git a/Dockerfile.ci b/Dockerfile.ci
index d03aa9236d0..38fb9638373 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -28,8 +28,8 @@
 #
 # The FIPS-validated variants require a paid Docker subscription and cannot be 
mirrored or made the
 # default, but you can build a FIPS-compliant image by pointing the build at 
one:
-#   docker build . --build-arg 
BASE_IMAGE="dhi.io/python:3.13.18-debian13-fips-dev"
-ARG 
BASE_IMAGE="ghcr.io/apache/airflow/base/python:3.13.18-debian13-dev@sha256:3a4e14a0dc4300490df0d33f49c6d5a1bc76bd7e48de1214656f5fd77a84504b"
+#   docker build . --build-arg 
BASE_IMAGE="dhi.io/python:3.14.10-debian13-fips-dev"
+ARG 
BASE_IMAGE="ghcr.io/apache/airflow/base/python:3.14.10-debian13-dev@sha256:e1c528dee57ce33c3192099679a1690a1541030f5137df3587d3ed0454a172b6"
 
 # CI_OS_DEPS_IMAGE: the image the OS dependencies are installed on. By default 
that is BASE_IMAGE and
 # the build installs them from the apt repositories. Breeze passes the pinned 
OS-dependencies image
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py 
b/dev/breeze/src/airflow_breeze/global_constants.py
index 438ccaa17aa..51db919fbd4 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -81,7 +81,7 @@ APACHE_AIRFLOW_GITHUB_REPOSITORY = "apache/airflow"
 ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS = ["3.11", "3.12", "3.13", "3.14"]
 DEFAULT_PYTHON_MAJOR_MINOR_VERSION = ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS[0]
 DEFAULT_PYTHON_MAJOR_MINOR_VERSION_FOR_IMAGES = (
-    "3.13"  # "highest complete" python version (where all providers are 
included)
+    "3.14"  # "highest complete" python version (where all providers are 
included)
 )
 
 ALLOWED_ARCHITECTURES = [Architecture.X86_64, Architecture.ARM]
diff --git a/docker-stack-docs/README.md b/docker-stack-docs/README.md
index 925373ca0f1..a8b25ef8574 100644
--- a/docker-stack-docs/README.md
+++ b/docker-stack-docs/README.md
@@ -33,9 +33,9 @@ for all the supported Python versions.
 
 You can find the following images there (Assuming Airflow version `3.5.0`):
 
-* `apache/airflow:latest` - the latest released Airflow image with default 
Python version (3.12 currently)
+* `apache/airflow:latest` - the latest released Airflow image with default 
Python version (3.14 currently)
 * `apache/airflow:latest-pythonX.Y` - the latest released Airflow image with 
specific Python version
-* `apache/airflow:3.5.0` - the versioned Airflow image with default Python 
version (3.12 currently)
+* `apache/airflow:3.5.0` - the versioned Airflow image with default Python 
version (3.14 currently)
 * `apache/airflow:3.5.0-pythonX.Y` - the versioned Airflow image with specific 
Python version
 
 Those are "reference" regular images. They contain the most common set of 
extras, dependencies and providers that are
@@ -45,9 +45,9 @@ You can also use "slim" images that contain only core Airflow 
and are about half
 but you need to add all the [Reference for package 
extras](https://airflow.apache.org/docs/apache-airflow/stable/extra-packages-ref.html)
 and providers that you need separately
 via [Building the 
image](https://airflow.apache.org/docs/docker-stack/build.html#build-build-image).
 
-* `apache/airflow:slim-latest`              - the latest released Airflow 
image with default Python version (3.12 currently)
+* `apache/airflow:slim-latest`              - the latest released Airflow 
image with default Python version (3.14 currently)
 * `apache/airflow:slim-latest-pythonX.Y`    - the latest released Airflow 
image with specific Python version
-* `apache/airflow:slim-3.5.0`           - the versioned Airflow image with 
default Python version (3.12 currently)
+* `apache/airflow:slim-3.5.0`           - the versioned Airflow image with 
default Python version (3.14 currently)
 * `apache/airflow:slim-3.5.0-pythonX.Y` - the versioned Airflow image with 
specific Python version
 
 The Apache Airflow image provided as convenience package is optimized for 
size, and
diff --git a/docker-stack-docs/build-arg-ref.rst 
b/docker-stack-docs/build-arg-ref.rst
index 5e10789441c..3634c64c9dc 100644
--- a/docker-stack-docs/build-arg-ref.rst
+++ b/docker-stack-docs/build-arg-ref.rst
@@ -116,7 +116,7 @@ Those are the most common arguments that you use when you 
want to build a custom
     functionality - only added confusion - so it has been removed.
 
 The default ``BASE_IMAGE`` is Airflow's public mirror of the `Docker Hardened 
Image <https://dhi.io>`_ for
-Python - for Airflow |airflow-version| that is 
``ghcr.io/apache/airflow/base/python:3.13.18-debian13-dev``,
+Python - for Airflow |airflow-version| that is 
``ghcr.io/apache/airflow/base/python:3.14.10-debian13-dev``,
 pinned to the digest the Airflow CI last passed on (see :ref:`the hardened 
base images <image-hardened-base>`). Pulling the mirror needs no
 credentials; pulling ``dhi.io`` directly requires a ``docker login dhi.io``.
 
diff --git a/docker-stack-docs/build.rst b/docker-stack-docs/build.rst
index 5dabf354b5d..6c35bf8f70d 100644
--- a/docker-stack-docs/build.rst
+++ b/docker-stack-docs/build.rst
@@ -316,9 +316,9 @@ Naming conventions for the images:
 
+----------------+--------------------------+---------------------------------+--------------------------------------+
 | Image          | Python                   | Standard image                  
| Slim image                           |
 
+================+==========================+=================================+======================================+
-| Latest default | 3.13                     | apache/airflow:latest           
| apache/airflow:slim-latest           |
+| Latest default | 3.14                     | apache/airflow:latest           
| apache/airflow:slim-latest           |
 
+----------------+--------------------------+---------------------------------+--------------------------------------+
-| Default        | 3.13                     | apache/airflow:X.Y.Z            
| apache/airflow:slim-X.Y.Z            |
+| Default        | 3.14                     | apache/airflow:X.Y.Z            
| apache/airflow:slim-X.Y.Z            |
 
+----------------+--------------------------+---------------------------------+--------------------------------------+
 | Latest         | 3.11,3.12,3.13,3.14      | apache/airflow:latest-pythonN.M 
| apache/airflow:slim-latest-pythonN.M |
 
+----------------+--------------------------+---------------------------------+--------------------------------------+
diff --git a/docker-stack-docs/changelog.rst b/docker-stack-docs/changelog.rst
index 79454aa9a66..57dde6ec9e7 100644
--- a/docker-stack-docs/changelog.rst
+++ b/docker-stack-docs/changelog.rst
@@ -34,6 +34,13 @@ the Airflow team.
        any Airflow version from the ``Airflow 2`` line. There is no guarantee 
that it will work, but if it does,
        then you can use latest features from that image to build images for 
previous Airflow versions.
 
+Airflow 3.5.0
+~~~~~~~~~~~~~
+
+  * The default Python version of the image changed from 3.13 to 3.14. The 
images without a
+    ``-pythonX.Y`` suffix - such as ``apache/airflow:3.5.0``, ``latest`` and 
their ``slim-`` variants -
+    now use Python 3.14. Use the ``-python3.13`` images to stay on Python 3.13.
+
 Airflow 3.4.0
 ~~~~~~~~~~~~~
 
diff --git 
a/docker-stack-docs/docker-examples/customizing/add-build-essential-custom.sh 
b/docker-stack-docs/docker-examples/customizing/add-build-essential-custom.sh
index 8a6ea470e10..1af111f0115 100755
--- 
a/docker-stack-docs/docker-examples/customizing/add-build-essential-custom.sh
+++ 
b/docker-stack-docs/docker-examples/customizing/add-build-essential-custom.sh
@@ -31,7 +31,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg 
BASE_IMAGE="${BASE_IMAGE:-ghcr.io/apache/airflow/base/python:3.13.18-debian13-dev}"
 \
+    --build-arg 
BASE_IMAGE="${BASE_IMAGE:-ghcr.io/apache/airflow/base/python:3.14.10-debian13-dev}"
 \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_PYTHON_DEPS="mpi4py==4.1.1" \
     --build-arg ADDITIONAL_DEV_APT_DEPS="libopenmpi-dev" \
diff --git a/docker-stack-docs/docker-examples/customizing/custom-sources.sh 
b/docker-stack-docs/docker-examples/customizing/custom-sources.sh
index ea40788ea1a..271f34214b6 100755
--- a/docker-stack-docs/docker-examples/customizing/custom-sources.sh
+++ b/docker-stack-docs/docker-examples/customizing/custom-sources.sh
@@ -32,7 +32,7 @@ export DOCKER_BUILDKIT=1
 docker build . -f Dockerfile \
     --pull \
     --platform 'linux/amd64' \
-    --build-arg 
BASE_IMAGE="${BASE_IMAGE:-ghcr.io/apache/airflow/base/python:3.13.18-debian13-dev}"
 \
+    --build-arg 
BASE_IMAGE="${BASE_IMAGE:-ghcr.io/apache/airflow/base/python:3.14.10-debian13-dev}"
 \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_AIRFLOW_EXTRAS="slack,odbc" \
     --build-arg ADDITIONAL_PYTHON_DEPS=" \
diff --git 
a/docker-stack-docs/docker-examples/customizing/pypi-dev-runtime-deps.sh 
b/docker-stack-docs/docker-examples/customizing/pypi-dev-runtime-deps.sh
index 22b87c7a5a3..8d3dde9ad2e 100755
--- a/docker-stack-docs/docker-examples/customizing/pypi-dev-runtime-deps.sh
+++ b/docker-stack-docs/docker-examples/customizing/pypi-dev-runtime-deps.sh
@@ -32,7 +32,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg 
BASE_IMAGE="${BASE_IMAGE:-ghcr.io/apache/airflow/base/python:3.13.18-debian13-dev}"
 \
+    --build-arg 
BASE_IMAGE="${BASE_IMAGE:-ghcr.io/apache/airflow/base/python:3.14.10-debian13-dev}"
 \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_AIRFLOW_EXTRAS="jdbc" \
     --build-arg ADDITIONAL_PYTHON_DEPS="pandas==2.1.2" \
diff --git 
a/docker-stack-docs/docker-examples/customizing/pypi-extras-and-deps.sh 
b/docker-stack-docs/docker-examples/customizing/pypi-extras-and-deps.sh
index a9f5ea6f967..72536535a8a 100755
--- a/docker-stack-docs/docker-examples/customizing/pypi-extras-and-deps.sh
+++ b/docker-stack-docs/docker-examples/customizing/pypi-extras-and-deps.sh
@@ -31,7 +31,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg 
BASE_IMAGE="${BASE_IMAGE:-ghcr.io/apache/airflow/base/python:3.13.18-debian13-dev}"
 \
+    --build-arg 
BASE_IMAGE="${BASE_IMAGE:-ghcr.io/apache/airflow/base/python:3.14.10-debian13-dev}"
 \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_AIRFLOW_EXTRAS="mssql,hdfs" \
     --build-arg ADDITIONAL_PYTHON_DEPS="oauth2client" \
diff --git 
a/docker-stack-docs/docker-examples/customizing/pypi-selected-version.sh 
b/docker-stack-docs/docker-examples/customizing/pypi-selected-version.sh
index a6b519ef175..bf82b0483a9 100755
--- a/docker-stack-docs/docker-examples/customizing/pypi-selected-version.sh
+++ b/docker-stack-docs/docker-examples/customizing/pypi-selected-version.sh
@@ -30,7 +30,7 @@ export AIRFLOW_VERSION=3.0.3
 export DOCKER_BUILDKIT=1
 
 docker build . \
-    --build-arg 
BASE_IMAGE="${BASE_IMAGE:-ghcr.io/apache/airflow/base/python:3.13.18-debian13-dev}"
 \
+    --build-arg 
BASE_IMAGE="${BASE_IMAGE:-ghcr.io/apache/airflow/base/python:3.14.10-debian13-dev}"
 \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --tag "my-pypi-selected-version:0.0.1"
 # [END build]
diff --git 
a/docker-stack-docs/docker-examples/restricted/restricted_environments.sh 
b/docker-stack-docs/docker-examples/restricted/restricted_environments.sh
index cbcff085057..995147decf0 100755
--- a/docker-stack-docs/docker-examples/restricted/restricted_environments.sh
+++ b/docker-stack-docs/docker-examples/restricted/restricted_environments.sh
@@ -47,7 +47,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg 
BASE_IMAGE="${BASE_IMAGE:-ghcr.io/apache/airflow/base/python:3.13.18-debian13-dev}"
 \
+    --build-arg 
BASE_IMAGE="${BASE_IMAGE:-ghcr.io/apache/airflow/base/python:3.14.10-debian13-dev}"
 \
     --build-arg AIRFLOW_INSTALLATION_METHOD="apache-airflow" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg INSTALL_MYSQL_CLIENT="false" \
diff --git a/docker-stack-docs/index.rst b/docker-stack-docs/index.rst
index ee5ee1a89a0..d3093de3afc 100644
--- a/docker-stack-docs/index.rst
+++ b/docker-stack-docs/index.rst
@@ -62,9 +62,9 @@ The same applies to the "slim" images.
 
 You can find the following images there (Assuming Airflow version 
:subst-code:`|airflow-version|`):
 
-* :subst-code:`apache/airflow:latest`              - the latest released 
Airflow image with default Python version (3.12 currently)
+* :subst-code:`apache/airflow:latest`              - the latest released 
Airflow image with default Python version (3.14 currently)
 * :subst-code:`apache/airflow:latest-pythonX.Y`    - the latest released 
Airflow image with specific Python version
-* :subst-code:`apache/airflow:|airflow-version|`           - the versioned 
Airflow image with default Python version (3.12 currently)
+* :subst-code:`apache/airflow:|airflow-version|`           - the versioned 
Airflow image with default Python version (3.14 currently)
 * :subst-code:`apache/airflow:|airflow-version|-pythonX.Y` - the versioned 
Airflow image with specific Python version
 
 Those are "reference" regular images. They contain the most common set of 
extras, dependencies and providers that are
@@ -74,9 +74,9 @@ You can also use "slim" images that contain only core Airflow 
and are about half
 but you need to add all the :doc:`apache-airflow:extra-packages-ref` and 
providers that you need separately
 via :ref:`Building the image <build:build_image>`.
 
-* :subst-code:`apache/airflow:slim-latest`              - the latest released 
Airflow image with default Python version (3.12 currently)
+* :subst-code:`apache/airflow:slim-latest`              - the latest released 
Airflow image with default Python version (3.14 currently)
 * :subst-code:`apache/airflow:slim-latest-pythonX.Y`    - the latest released 
Airflow image with specific Python version
-* :subst-code:`apache/airflow:slim-|airflow-version|`           - the 
versioned Airflow image with default Python version (3.12 currently)
+* :subst-code:`apache/airflow:slim-|airflow-version|`           - the 
versioned Airflow image with default Python version (3.14 currently)
 * :subst-code:`apache/airflow:slim-|airflow-version|-pythonX.Y` - the 
versioned Airflow image with specific Python version
 
 The Apache Airflow image provided as convenience package is optimized for 
size, and

Reply via email to