You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2023/11/03 11:33:04 UTC

(airflow) branch bookworm updated (d1e4d02a2e -> 30de24d458)

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

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


    omit d1e4d02a2e Switch our base image to use Debian bookworm
     add b27047430f Refactor azure managed identity (#35367)
     add 3f4028f54e Update dag-run.rst to mention Airflow's support for extended cron syntax through croniter (#35342)
     add db012ac5de Fix `pip` version in the main PROD image of Airflow (#35387)
     add e22dcff6eb Fix typo - air-gapPed (#35398)
     new 30de24d458 Switch our base image to use Debian bookworm

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (d1e4d02a2e)
            \
             N -- N -- N   refs/heads/bookworm (30de24d458)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .github/workflows/ci.yml                           |   3 +
 Dockerfile                                         |   3 +
 airflow/providers/microsoft/azure/hooks/adx.py     |  14 +--
 airflow/providers/microsoft/azure/hooks/asb.py     |  15 ++-
 .../providers/microsoft/azure/hooks/base_azure.py  |  14 +--
 airflow/providers/microsoft/azure/hooks/batch.py   |  31 +++---
 .../microsoft/azure/hooks/container_registry.py    |  15 ++-
 .../microsoft/azure/hooks/container_volume.py      |  39 ++++---
 airflow/providers/microsoft/azure/hooks/cosmos.py  |  15 ++-
 .../microsoft/azure/hooks/data_factory.py          |  14 +--
 .../providers/microsoft/azure/hooks/data_lake.py   |  30 +++---
 .../providers/microsoft/azure/hooks/fileshare.py   |  79 ++++++--------
 airflow/providers/microsoft/azure/hooks/synapse.py |  15 ++-
 airflow/providers/microsoft/azure/hooks/wasb.py    |  14 +--
 airflow/providers/microsoft/azure/utils.py         |  24 +++++
 docs/apache-airflow/core-concepts/dag-run.rst      |   2 +-
 docs/docker-stack/build.rst                        |   2 +-
 tests/providers/microsoft/azure/hooks/test_adx.py  | 118 +++++++++++----------
 tests/providers/microsoft/azure/hooks/test_asb.py  |  41 +++----
 .../microsoft/azure/hooks/test_azure_batch.py      |  16 +--
 .../azure/hooks/test_azure_container_instance.py   |   2 +-
 .../microsoft/azure/hooks/test_azure_cosmos.py     |  60 ++++++++---
 .../azure/hooks/test_azure_data_factory.py         |  68 ++++++------
 .../microsoft/azure/hooks/test_azure_data_lake.py  |  76 ++++++-------
 .../microsoft/azure/hooks/test_azure_fileshare.py  |  24 +++--
 .../microsoft/azure/hooks/test_azure_synapse.py    |  45 +++++---
 .../microsoft/azure/hooks/test_base_azure.py       |  46 +++++++-
 tests/providers/microsoft/azure/hooks/test_wasb.py |   1 +
 tests/providers/microsoft/azure/test_utils.py      |  17 ++-
 29 files changed, 474 insertions(+), 369 deletions(-)


(airflow) 01/01: Switch our base image to use Debian bookworm

Posted by po...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 30de24d4588bc642169a68ff4da14fac64159503
Author: raphaelauv <ra...@gmail.com>
AuthorDate: Mon Jun 19 13:22:26 2023 +0200

    Switch our base image to use Debian bookworm
    
    Debian bookworm (12) is the current stable version of Debian and
    it is on the market for more than a year so all the other
    dependencies should have enough time to catch up.
    
    While Debian bullseye is still supported (oldstable) it will
    be switching to LTS support mode (managed by volunteers) roughly in
    July 2024 - but we want to switch our reference images
    to bookworm long before that date.
    
    This PR switches our reference images to Debian Bookworm for
    Dockerfiles and images that will be released to Airflow 2.8.0.
    
    Similarly as with "Debian buster -> Debian bullseye" switch we
    will switch our reference images to bookworm and we will not be
    publishing images based on bullseye. However our users will still
    be able to build custom images using our Dockerfiles with bullseye base
    image until we release Airflow 2.9.0 where the bullseye support will
    be dropped entirely.
    
    We provide release notes and instructions on how users can build
    the bullseye images if they still want to do it - for example
    because their system level dependencies will require them to do so,
    but the users are advised to switch to bookworm-based images as soon
    as possible.
    
    The users will likely still be able to build custom Airflow images for
    future airflow releases (using Dockerfiles released with Airlfow 2.8),
    however as of Airflow 2.9, we will not release Dockerfiles with support
    for that and we will not verify if Airflow with default depenencies can
    be installed on bullseye Debian.
    
    Co-authored-by: Jarek Potiuk <ja...@potiuk.com>
    Co-authored-by: raphaelauv <ra...@gmail.com>
---
 .github/workflows/ci.yml                           |  42 +++++++
 CI.rst                                             |   4 +-
 Dockerfile                                         |  44 +++++++-
 Dockerfile.ci                                      |  46 +++++++-
 IMAGES.rst                                         |  20 ++--
 INSTALL                                            |   2 +-
 README.md                                          |  23 ++--
 ...0004-using-docker-images-as-test-environment.md |   2 +-
 dev/breeze/src/airflow_breeze/branch_defaults.py   |   2 +-
 .../airflow_breeze/commands/ci_image_commands.py   |   2 +
 .../commands/ci_image_commands_config.py           |   1 +
 .../commands/production_image_commands.py          |   2 +
 .../commands/production_image_commands_config.py   |   3 +-
 .../commands/release_management_commands.py        |   4 +-
 dev/breeze/src/airflow_breeze/global_constants.py  |   3 +-
 .../airflow_breeze/params/common_build_params.py   |   3 +-
 .../src/airflow_breeze/utils/common_options.py     |  11 +-
 docs/docker-stack/build-arg-ref.rst                |   2 +-
 docs/docker-stack/build.rst                        |  40 ++++---
 docs/docker-stack/changelog.rst                    |  48 +++++---
 .../customizing/add-build-essential-custom.sh      |   2 +-
 .../docker-examples/customizing/custom-sources.sh  |   2 +-
 ...pypi-selected-version.sh => debian-bullseye.sh} |   6 +-
 .../customizing/github-different-repository.sh     |   2 +-
 .../docker-examples/customizing/github-main.sh     |   2 +-
 .../customizing/github-v2-2-test.sh                |   2 +-
 .../customizing/pypi-dev-runtime-deps.sh           |   2 +-
 .../customizing/pypi-extras-and-deps.sh            |   2 +-
 .../customizing/pypi-selected-version.sh           |   2 +-
 .../restricted/restricted_environments.sh          |   2 +-
 generated/PYPI_README.md                           |   4 +-
 images/breeze/output-commands-hash.txt             |  26 ++---
 images/breeze/output-commands.svg                  |   2 +-
 images/breeze/output_ci-image_build.svg            | 122 +++++++++++----------
 images/breeze/output_prod-image_build.svg          |  82 ++++++++------
 images/breeze/output_setup_config.svg              |   2 +-
 images/breeze/output_shell.svg                     |   2 +-
 images/breeze/output_start-airflow.svg             |   2 +-
 images/breeze/output_testing_db-tests.svg          |   2 +-
 images/breeze/output_testing_integration-tests.svg |   2 +-
 images/breeze/output_testing_tests.svg             |   2 +-
 scripts/docker/install_mssql.sh                    |   1 +
 scripts/docker/install_os_dependencies.sh          |  41 ++++++-
 .../example_taskflow_api_docker_virtualenv.py      |   2 +-
 44 files changed, 423 insertions(+), 197 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 9aaa1e53fd..c150924479 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -431,6 +431,48 @@ jobs:
           PYTHON_VERSIONS: ${{needs.build-info.outputs.all-python-versions-list-as-string}}
           DEBUG_RESOURCES: ${{ needs.build-info.outputs.debug-resources }}
 
+  build-prod-images-bullseye:
+    timeout-minutes: 80
+    name: >
+      ${{needs.build-info.outputs.build-job-description}} PROD images
+      ${{needs.build-info.outputs.all-python-versions-list-as-string}}
+    runs-on: ${{fromJSON(needs.build-info.outputs.runs-on)}}
+    needs: [build-info, build-ci-images, generate-constraints]
+    if: needs.build-info.outputs.canary-run == 'true'
+    env:
+      DEFAULT_BRANCH: ${{ needs.build-info.outputs.default-branch }}
+      DEFAULT_CONSTRAINTS_BRANCH: ${{ needs.build-info.outputs.default-constraints-branch }}
+      RUNS_ON: "${{needs.build-info.outputs.runs-on}}"
+      BACKEND: sqlite
+      DOCKER_CACHE: ${{ needs.build-info.outputs.cache-directive }}
+      VERSION_SUFFIX_FOR_PYPI: "dev0"
+      DEBUG_RESOURCES: ${{needs.build-info.outputs.debug-resources}}
+      # Force more parallelism for build even on public images
+      PARALLELISM: 6
+    steps:
+      - name: Cleanup repo
+        run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
+      - uses: actions/checkout@v3
+        with:
+          ref: ${{ needs.build-info.outputs.targetCommitSha }}
+          persist-credentials: false
+          submodules: recursive
+      - name: >
+          Build PROD Images Bullseye
+          ${{needs.build-info.outputs.all-python-versions-list-as-string}}:${{env.IMAGE_TAG}}
+        uses: ./.github/actions/build-prod-images
+        with:
+          build-provider-packages: ${{ needs.build-info.outputs.default-branch == 'main' }}
+        env:
+          UPGRADE_TO_NEWER_DEPENDENCIES: ${{ needs.build-info.outputs.upgrade-to-newer-dependencies }}
+          DOCKER_CACHE: ${{ needs.build-info.outputs.cache-directive }}
+          PYTHON_VERSIONS: ${{needs.build-info.outputs.all-python-versions-list-as-string}}
+          DEBUG_RESOURCES: ${{ needs.build-info.outputs.debug-resources }}
+          DEBIAN_VERSION: "bullseye"
+          # Do not override the "bookworm" image - just push a new bullseye image
+          # TODO: improve caching for that build
+          IMAGE_TAG: bullseye-"${{ github.event.pull_request.head.sha || github.sha }}"
+
   run-breeze-tests:
     timeout-minutes: 10
     name: Breeze unit tests
diff --git a/CI.rst b/CI.rst
index 469768251d..f815ffd9e5 100644
--- a/CI.rst
+++ b/CI.rst
@@ -113,11 +113,11 @@ have to be percent-encoded when you access them via UI (/ = %2F)
 +--------------+----------------------------------------------------------+----------------------------------------------------------+
 | Image        | Name:tag (both cases latest version and per-build)       | Description                                              |
 +==============+==========================================================+==========================================================+
-| Python image | python:<X.Y>-slim-bullseye                               | Base Python image used by both production and CI image.  |
+| Python image | python:<X.Y>-slim-bookworm                               | Base Python image used by both production and CI image.  |
 | (DockerHub)  |                                                          | Python maintainer release new versions of those image    |
 |              |                                                          | with security fixes every few weeks in DockerHub.        |
 +--------------+----------------------------------------------------------+----------------------------------------------------------+
-| Airflow      | airflow/<BRANCH>/python:<X.Y>-slim-bullseye              | Version of python base image used in Airflow Builds      |
+| Airflow      | airflow/<BRANCH>/python:<X.Y>-slim-bookworm              | Version of python base image used in Airflow Builds      |
 | python base  |                                                          | We keep the "latest" version only to mark last "good"    |
 | image        |                                                          | python base that went through testing and was pushed.    |
 +--------------+----------------------------------------------------------+----------------------------------------------------------+
diff --git a/Dockerfile b/Dockerfile
index 5297a4f6b6..55cf854296 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -46,7 +46,7 @@ ARG AIRFLOW_USER_HOME_DIR=/home/airflow
 # latest released version here
 ARG AIRFLOW_VERSION="2.7.2"
 
-ARG PYTHON_BASE_IMAGE="python:3.8-slim-bullseye"
+ARG PYTHON_BASE_IMAGE="python:3.8-slim-bookworm"
 
 ARG AIRFLOW_PIP_VERSION=23.3.1
 ARG AIRFLOW_IMAGE_REPOSITORY="https://github.com/apache/airflow"
@@ -104,11 +104,27 @@ software-properties-common sqlite3 sudo unixodbc unixodbc-dev"
 }
 
 function get_runtime_apt_deps() {
+    local debian_version
+    local debian_version_apt_deps
+    # Get debian version without installing lsb_release
+    # shellcheck disable=SC1091
+    debian_version=$(. /etc/os-release;   printf '%s\n' "$VERSION_CODENAME";)
+    echo
+    echo "DEBIAN CODENAME: ${debian_version}"
+    echo
+    if [[ "${debian_version}" == "bullseye" ]]; then
+        debian_version_apt_deps="libffi7 libldap-2.4-2 libssl1.1 netcat"
+    else
+        debian_version_apt_deps="libffi8 libldap-2.5-0 libssl3 netcat-openbsd"
+    fi
+    echo
+    echo "APPLIED INSTALLATION CONFIGURATION FOR DEBIAN VERSION: ${debian_version}"
+    echo
     if [[ "${RUNTIME_APT_DEPS=}" == "" ]]; then
         RUNTIME_APT_DEPS="apt-transport-https apt-utils ca-certificates \
 curl dumb-init freetds-bin gosu krb5-user libgeos-dev \
-ldap-utils libffi7 libldap-2.4-2 libsasl2-2 libsasl2-modules libssl1.1 locales \
-lsb-release netcat openssh-client python3-selinux rsync sasl2-bin sqlite3 sudo unixodbc"
+ldap-utils libsasl2-2 libsasl2-modules locales ${debian_version_apt_deps} \
+lsb-release openssh-client python3-selinux rsync sasl2-bin sqlite3 sudo unixodbc"
         export RUNTIME_APT_DEPS
     fi
 }
@@ -138,6 +154,27 @@ function install_debian_dev_dependencies() {
         bash -o pipefail -o errexit -o nounset -o nolog -c "${ADDITIONAL_DEV_APT_COMMAND}"
     fi
     apt-get update
+    local debian_version
+    local debian_version_apt_deps
+    # Get debian version without installing lsb_release
+    # shellcheck disable=SC1091
+    debian_version=$(. /etc/os-release;   printf '%s\n' "$VERSION_CODENAME";)
+    echo
+    echo "DEBIAN CODENAME: ${debian_version}"
+    echo
+    if [[ "${debian_version}" == "bullseye" ]]; then
+        echo
+        echo "Bullseye detected - replacing dependencies in additional dev apt deps"
+        echo
+        # Replace dependencies in additional dev apt deps to be compatible with Bullseye
+        ADDITIONAL_DEV_APT_DEPS=${ADDITIONAL_DEV_APT_DEPS//libgcc-11-dev/libgcc-10-dev}
+        ADDITIONAL_DEV_APT_DEPS=${ADDITIONAL_DEV_APT_DEPS//netcat-openbsd/netcat}
+        echo
+        echo "Replaced bullseye dev apt dependencies"
+        echo "${ADDITIONAL_DEV_APT_COMMAND}"
+        echo
+    fi
+
     # shellcheck disable=SC2086
     apt-get install -y --no-install-recommends ${DEV_APT_DEPS} ${ADDITIONAL_DEV_APT_DEPS}
 }
@@ -337,6 +374,7 @@ function install_mssql_client() {
     distro=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
     version=$(lsb_release -rs)
     local driver=msodbcsql18
+    curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
     curl --silent https://packages.microsoft.com/keys/microsoft.asc | apt-key add - >/dev/null 2>&1
     curl --silent "https://packages.microsoft.com/config/${distro}/${version}/prod.list" > \
         /etc/apt/sources.list.d/mssql-release.list
diff --git a/Dockerfile.ci b/Dockerfile.ci
index 152131d5be..d8619e1c5a 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -16,7 +16,7 @@
 #
 # WARNING: THIS DOCKERFILE IS NOT INTENDED FOR PRODUCTION USE OR DEPLOYMENT.
 #
-ARG PYTHON_BASE_IMAGE="python:3.8-slim-bullseye"
+ARG PYTHON_BASE_IMAGE="python:3.8-slim-bookworm"
 
 ##############################################################################################
 # This is the script image where we keep all inlined bash scripts needed in other segments
@@ -64,11 +64,27 @@ software-properties-common sqlite3 sudo unixodbc unixodbc-dev"
 }
 
 function get_runtime_apt_deps() {
+    local debian_version
+    local debian_version_apt_deps
+    # Get debian version without installing lsb_release
+    # shellcheck disable=SC1091
+    debian_version=$(. /etc/os-release;   printf '%s\n' "$VERSION_CODENAME";)
+    echo
+    echo "DEBIAN CODENAME: ${debian_version}"
+    echo
+    if [[ "${debian_version}" == "bullseye" ]]; then
+        debian_version_apt_deps="libffi7 libldap-2.4-2 libssl1.1 netcat"
+    else
+        debian_version_apt_deps="libffi8 libldap-2.5-0 libssl3 netcat-openbsd"
+    fi
+    echo
+    echo "APPLIED INSTALLATION CONFIGURATION FOR DEBIAN VERSION: ${debian_version}"
+    echo
     if [[ "${RUNTIME_APT_DEPS=}" == "" ]]; then
         RUNTIME_APT_DEPS="apt-transport-https apt-utils ca-certificates \
 curl dumb-init freetds-bin gosu krb5-user libgeos-dev \
-ldap-utils libffi7 libldap-2.4-2 libsasl2-2 libsasl2-modules libssl1.1 locales \
-lsb-release netcat openssh-client python3-selinux rsync sasl2-bin sqlite3 sudo unixodbc"
+ldap-utils libsasl2-2 libsasl2-modules locales ${debian_version_apt_deps} \
+lsb-release openssh-client python3-selinux rsync sasl2-bin sqlite3 sudo unixodbc"
         export RUNTIME_APT_DEPS
     fi
 }
@@ -98,6 +114,27 @@ function install_debian_dev_dependencies() {
         bash -o pipefail -o errexit -o nounset -o nolog -c "${ADDITIONAL_DEV_APT_COMMAND}"
     fi
     apt-get update
+    local debian_version
+    local debian_version_apt_deps
+    # Get debian version without installing lsb_release
+    # shellcheck disable=SC1091
+    debian_version=$(. /etc/os-release;   printf '%s\n' "$VERSION_CODENAME";)
+    echo
+    echo "DEBIAN CODENAME: ${debian_version}"
+    echo
+    if [[ "${debian_version}" == "bullseye" ]]; then
+        echo
+        echo "Bullseye detected - replacing dependencies in additional dev apt deps"
+        echo
+        # Replace dependencies in additional dev apt deps to be compatible with Bullseye
+        ADDITIONAL_DEV_APT_DEPS=${ADDITIONAL_DEV_APT_DEPS//libgcc-11-dev/libgcc-10-dev}
+        ADDITIONAL_DEV_APT_DEPS=${ADDITIONAL_DEV_APT_DEPS//netcat-openbsd/netcat}
+        echo
+        echo "Replaced bullseye dev apt dependencies"
+        echo "${ADDITIONAL_DEV_APT_COMMAND}"
+        echo
+    fi
+
     # shellcheck disable=SC2086
     apt-get install -y --no-install-recommends ${DEV_APT_DEPS} ${ADDITIONAL_DEV_APT_DEPS}
 }
@@ -297,6 +334,7 @@ function install_mssql_client() {
     distro=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
     version=$(lsb_release -rs)
     local driver=msodbcsql18
+    curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
     curl --silent https://packages.microsoft.com/keys/microsoft.asc | apt-key add - >/dev/null 2>&1
     curl --silent "https://packages.microsoft.com/config/${distro}/${version}/prod.list" > \
         /etc/apt/sources.list.d/mssql-release.list
@@ -1086,7 +1124,7 @@ ARG DEV_APT_COMMAND=""
 ARG ADDITIONAL_DEV_APT_COMMAND=""
 ARG ADDITIONAL_DEV_ENV_VARS=""
 ARG ADDITIONAL_DEV_APT_DEPS="bash-completion dumb-init git graphviz gosu krb5-user \
-less libenchant-2-2 libgcc-10-dev libgeos-dev libpq-dev net-tools netcat \
+less libenchant-2-2 libgcc-11-dev libgeos-dev libpq-dev net-tools netcat-openbsd \
 openssh-server postgresql-client software-properties-common rsync tmux unzip vim xxd"
 
 ARG ADDITIONAL_DEV_APT_ENV=""
diff --git a/IMAGES.rst b/IMAGES.rst
index db825ecf5b..678e1062c8 100644
--- a/IMAGES.rst
+++ b/IMAGES.rst
@@ -320,7 +320,7 @@ you have ``buildx`` plugin installed.
 
   DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg ADDITIONAL_AIRFLOW_EXTRAS="jdbc" \
     --build-arg ADDITIONAL_PYTHON_DEPS="pandas" \
     --build-arg ADDITIONAL_DEV_APT_DEPS="gcc g++" \
@@ -343,7 +343,7 @@ based on example in `this comment <https://github.com/apache/airflow/issues/8605
 
   DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_INSTALLATION_METHOD="apache-airflow" \
     --build-arg ADDITIONAL_AIRFLOW_EXTRAS="slack" \
     --build-arg ADDITIONAL_PYTHON_DEPS="apache-airflow-providers-odbc \
@@ -356,7 +356,7 @@ based on example in `this comment <https://github.com/apache/airflow/issues/8605
         rocketchat_API \
         typeform" \
     --build-arg ADDITIONAL_DEV_APT_DEPS="msodbcsql17 unixodbc-dev g++" \
-    --build-arg ADDITIONAL_DEV_APT_COMMAND="curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add --no-tty - && curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list" \
+    --build-arg ADDITIONAL_DEV_APT_COMMAND="curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add --no-tty - && curl https://packages.microsoft.com/config/debian/12/prod.list > /etc/apt/sources.list.d/mssql-release.list" \
     --build-arg ADDITIONAL_DEV_ENV_VARS="ACCEPT_EULA=Y"
     --tag my-image:0.0.1
 
@@ -368,7 +368,7 @@ The following build arguments (``--build-arg`` in docker build command) can be u
 +------------------------------------------+------------------------------------------+------------------------------------------+
 | Build argument                           | Default value                            | Description                              |
 +==========================================+==========================================+==========================================+
-| ``PYTHON_BASE_IMAGE``                    | ``python:3.8-slim-bullseye``             | Base Python image                        |
+| ``PYTHON_BASE_IMAGE``                    | ``python:3.8-slim-bookworm``             | Base Python image                        |
 +------------------------------------------+------------------------------------------+------------------------------------------+
 | ``PYTHON_MAJOR_MINOR_VERSION``           | ``3.8``                                  | major/minor version of Python (should    |
 |                                          |                                          | match base image)                        |
@@ -475,7 +475,7 @@ This builds the CI image in version 3.8 with default extras ("all").
 
   DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
      --pull \
-     --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" --tag my-image:0.0.1
+     --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" --tag my-image:0.0.1
 
 
 This builds the CI image in version 3.8 with "gcp" extra only.
@@ -484,7 +484,7 @@ This builds the CI image in version 3.8 with "gcp" extra only.
 
   DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_EXTRAS=gcp --tag my-image:0.0.1
 
 
@@ -494,7 +494,7 @@ This builds the CI image in version 3.8 with "apache-beam" extra added.
 
   DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg ADDITIONAL_AIRFLOW_EXTRAS="apache-beam" --tag my-image:0.0.1
 
 This builds the CI image in version 3.8 with "mssql" additional package added.
@@ -503,7 +503,7 @@ This builds the CI image in version 3.8 with "mssql" additional package added.
 
   DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg ADDITIONAL_PYTHON_DEPS="mssql" --tag my-image:0.0.1
 
 This builds the CI image in version 3.8 with "gcc" and "g++" additional apt dev dependencies added.
@@ -512,7 +512,7 @@ This builds the CI image in version 3.8 with "gcc" and "g++" additional apt dev
 
   DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
     --pull
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg ADDITIONAL_DEV_APT_DEPS="gcc g++" --tag my-image:0.0.1
 
 This builds the CI image in version 3.8 with "jdbc" extra and "default-jre-headless" additional apt runtime dependencies added.
@@ -521,7 +521,7 @@ This builds the CI image in version 3.8 with "jdbc" extra and "default-jre-headl
 
   DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_EXTRAS=jdbc \
     --tag my-image:0.0.1
 
diff --git a/INSTALL b/INSTALL
index da9846ac95..b76af9d622 100644
--- a/INSTALL
+++ b/INSTALL
@@ -5,7 +5,7 @@ This is a generic installation method that requires a number of dependencies to
 Depending on your system you might need different prerequisites, but the following
 systems/prerequisites are known to work:
 
-Linux (Debian Bullseye and Linux Mint Debbie):
+Linux (Debian Bullseye, Bookworm and Linux Mint Debbie):
 
 sudo apt install build-essential python3-dev libsqlite3-dev openssl \
                  sqlite default-libmysqlclient-dev libmysqlclient-dev postgresql
diff --git a/README.md b/README.md
index 8ef10eaed4..3dce59f401 100644
--- a/README.md
+++ b/README.md
@@ -118,7 +118,9 @@ The work to add Windows support is tracked via [#10388](https://github.com/apach
 it is not a high priority. You should only use Linux-based distros as "Production" execution environment
 as this is the only environment that is supported. The only distro that is used in our CI tests and that
 is used in the [Community managed DockerHub image](https://hub.docker.com/p/apache/airflow) is
-`Debian Bullseye`.
+`Debian Bookworm`. We also have support for legacy ``Debian Bullseye`` base image if you want to build a
+custom image but it is deprecated and option to do it will be removed in the Dockerfile that
+will accompany Airflow 2.9.0 so you are advised to switch to ``Debian Bookworm`` for your custom images.
 
 <!-- END Requirements, please keep comment here to allow auto update of PyPI readme.md -->
 <!-- START Getting started, please keep comment here to allow auto update of PyPI readme.md -->
@@ -344,20 +346,21 @@ we publish an Apache Airflow release. Those images contain:
 
 The version of the base OS image is the stable version of Debian. Airflow supports using all currently active
 stable versions - as soon as all Airflow dependencies support building, and we set up the CI pipeline for
-building and testing the OS version. Approximately 6 months before the end-of-life of a previous stable
-version of the OS, Airflow switches the images released to use the latest supported version of the OS.
+building and testing the OS version. Approximately 6 months before the end-of-regular support of a
+previous stable version of the OS, Airflow switches the images released to use the latest supported
+version of the OS.
+
 For example since ``Debian Buster`` end-of-life was August 2022, Airflow switched the images in `main` branch
 to use ``Debian Bullseye`` in February/March 2022. The version was used in the next MINOR release after
 the switch happened. In case of the Bullseye switch - 2.3.0 version used ``Debian Bullseye``.
 The images released  in the previous MINOR version continue to use the version that all other releases
-for the MINOR version used.
-
-Support for ``Debian Buster`` image was dropped in August 2022 completely and everyone is expected to
-stop building their images using ``Debian Buster``.
+for the MINOR version used. Similar switch from ``Debian Bullseye`` to ``Debian Bookworm`` has been implemented
+before 2.8.0 release in October 2023 and ``Debian Bookworm`` will be the only option supported as of
+Airflow 2.9.0.
 
-Users will continue to be able to build their images using stable Debian releases until the end of life and
-building and verifying of the images happens in our CI but no unit tests were executed using this image in
-the `main` branch.
+Users will continue to be able to build their images using stable Debian releases until the end of regular
+support and building and verifying of the images happens in our CI but no unit tests were executed using
+this image in the `main` branch.
 
 ## Approach to dependencies of Airflow
 
diff --git a/dev/breeze/doc/adr/0004-using-docker-images-as-test-environment.md b/dev/breeze/doc/adr/0004-using-docker-images-as-test-environment.md
index 4ed0c8cfae..51aeb3cca9 100644
--- a/dev/breeze/doc/adr/0004-using-docker-images-as-test-environment.md
+++ b/dev/breeze/doc/adr/0004-using-docker-images-as-test-environment.md
@@ -120,7 +120,7 @@ suited for the job:
 * management and automated synchronisation of the environment can be easily done using simple, external
   scripts that will check the "freshness" of the images and propose corrective actions (pulling or
   rebuilding the image) for the user whenever they are needed (all that in cross-platform way)
-* we can use specific base image (Debian Bullseye with Long Term Support) and rely on security fixes provided
+* we can use specific base image (Debian bookworm with Long Term Support) and rely on security fixes provided
   by Debian for system dependencies.
 
 The only alternative considered is a plain virtualenv managed individually by each user. The problem with
diff --git a/dev/breeze/src/airflow_breeze/branch_defaults.py b/dev/breeze/src/airflow_breeze/branch_defaults.py
index f4df1af474..c9dbaa8080 100644
--- a/dev/breeze/src/airflow_breeze/branch_defaults.py
+++ b/dev/breeze/src/airflow_breeze/branch_defaults.py
@@ -39,4 +39,4 @@ from __future__ import annotations
 
 AIRFLOW_BRANCH = "main"
 DEFAULT_AIRFLOW_CONSTRAINTS_BRANCH = "constraints-main"
-DEBIAN_VERSION = "bullseye"
+DEBIAN_VERSION = "bookworm"
diff --git a/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py b/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
index cd7c915d8b..560f3852ec 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
@@ -46,6 +46,7 @@ from airflow_breeze.utils.common_options import (
     option_build_timeout_minutes,
     option_builder,
     option_commit_sha,
+    option_debian_version,
     option_debug_resources,
     option_dev_apt_command,
     option_dev_apt_deps,
@@ -222,6 +223,7 @@ def get_exitcode(status: int) -> int:
 
 @ci_image.command(name="build")
 @option_python
+@option_debian_version
 @option_run_in_parallel
 @option_parallelism
 @option_skip_cleanup
diff --git a/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py b/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py
index 6e88b70abe..f256406ea4 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py
@@ -53,6 +53,7 @@ CI_IMAGE_TOOLS_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
         {
             "name": "Advanced options (for power users)",
             "options": [
+                "--debian-version",
                 "--install-providers-from-sources",
                 "--airflow-constraints-location",
                 "--airflow-constraints-mode",
diff --git a/dev/breeze/src/airflow_breeze/commands/production_image_commands.py b/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
index 3c8b3b14cf..9f132aa3e7 100644
--- a/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
@@ -42,6 +42,7 @@ from airflow_breeze.utils.common_options import (
     option_build_progress,
     option_builder,
     option_commit_sha,
+    option_debian_version,
     option_debug_resources,
     option_dev_apt_command,
     option_dev_apt_deps,
@@ -149,6 +150,7 @@ def prod_image():
 
 @prod_image.command(name="build")
 @option_python
+@option_debian_version
 @option_run_in_parallel
 @option_parallelism
 @option_skip_cleanup
diff --git a/dev/breeze/src/airflow_breeze/commands/production_image_commands_config.py b/dev/breeze/src/airflow_breeze/commands/production_image_commands_config.py
index 8ffc636521..0f55650b88 100644
--- a/dev/breeze/src/airflow_breeze/commands/production_image_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/production_image_commands_config.py
@@ -75,8 +75,9 @@ PRODUCTION_IMAGE_TOOLS_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] =
             ],
         },
         {
-            "name": "Customization options (for specific customization needs)",
+            "name": "Advanced customization options (for specific customization needs)",
             "options": [
+                "--debian-version",
                 "--install-packages-from-context",
                 "--use-constraints-for-context-packages",
                 "--cleanup-context",
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index d0c079c3c9..af81359fe5 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -1018,7 +1018,7 @@ def release_prod_images(
             slim_build_args = {
                 "AIRFLOW_EXTRAS": "",
                 "AIRFLOW_CONSTRAINTS": "constraints-no-providers",
-                "PYTHON_BASE_IMAGE": f"python:{python}-slim-bullseye",
+                "PYTHON_BASE_IMAGE": f"python:{python}-slim-bookworm",
                 "AIRFLOW_VERSION": airflow_version,
             }
             if commit_sha:
@@ -1050,7 +1050,7 @@ def release_prod_images(
             get_console().print(f"[info]Building regular {airflow_version} image for Python {python}[/]")
             image_name = f"{dockerhub_repo}:{airflow_version}-python{python}"
             regular_build_args = {
-                "PYTHON_BASE_IMAGE": f"python:{python}-slim-bullseye",
+                "PYTHON_BASE_IMAGE": f"python:{python}-slim-bookworm",
                 "AIRFLOW_VERSION": airflow_version,
             }
             if commit_sha:
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py
index 3435f788ad..9eaf33f96a 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -51,6 +51,7 @@ ALLOWED_PROD_BACKENDS = ["mysql", "postgres", "mssql"]
 DEFAULT_BACKEND = ALLOWED_BACKENDS[0]
 TESTABLE_INTEGRATIONS = ["cassandra", "celery", "kerberos", "mongo", "pinot", "trino", "kafka"]
 OTHER_INTEGRATIONS = ["statsd", "otel", "openlineage"]
+ALLOWED_DEBIAN_VERSIONS = ["bookworm", "bullseye"]
 ALL_INTEGRATIONS = sorted(
     [
         *TESTABLE_INTEGRATIONS,
@@ -96,7 +97,7 @@ ALLOWED_POSTGRES_VERSIONS = ["11", "12", "13", "14", "15", "16"]
 # See: https://dev.mysql.com/blog-archive/introducing-mysql-innovation-and-long-term-support-lts-versions/
 MYSQL_LTS_RELEASES: list[str] = []
 MYSQL_OLD_RELEASES = ["8.0"]
-MYSQL_INNOVATION_RELEASE = "8.1"
+MYSQL_INNOVATION_RELEASE = "8.2"
 ALLOWED_MYSQL_VERSIONS = [*MYSQL_OLD_RELEASES, *MYSQL_LTS_RELEASES]
 if MYSQL_INNOVATION_RELEASE:
     ALLOWED_MYSQL_VERSIONS.append(MYSQL_INNOVATION_RELEASE)
diff --git a/dev/breeze/src/airflow_breeze/params/common_build_params.py b/dev/breeze/src/airflow_breeze/params/common_build_params.py
index fc1de2a4ed..782d01bca4 100644
--- a/dev/breeze/src/airflow_breeze/params/common_build_params.py
+++ b/dev/breeze/src/airflow_breeze/params/common_build_params.py
@@ -70,6 +70,7 @@ class CommonBuildParams:
     dry_run: bool = False
     version_suffix_for_pypi: str = ""
     verbose: bool = False
+    debian_version: str = "bookworm"
 
     @property
     def airflow_version(self):
@@ -121,7 +122,7 @@ class CommonBuildParams:
         """Construct Python Base Image"""
         if self.python_image is not None:
             return self.python_image
-        return f"python:{self.python}-slim-bullseye"
+        return f"python:{self.python}-slim-{self.debian_version}"
 
     @property
     def airflow_image_repository(self):
diff --git a/dev/breeze/src/airflow_breeze/utils/common_options.py b/dev/breeze/src/airflow_breeze/utils/common_options.py
index 418bc874cf..7d8351bef4 100644
--- a/dev/breeze/src/airflow_breeze/utils/common_options.py
+++ b/dev/breeze/src/airflow_breeze/utils/common_options.py
@@ -30,6 +30,7 @@ from airflow_breeze.global_constants import (
     ALLOWED_CELERY_BROKERS,
     ALLOWED_CONSTRAINTS_MODES_CI,
     ALLOWED_CONSTRAINTS_MODES_PROD,
+    ALLOWED_DEBIAN_VERSIONS,
     ALLOWED_INSTALLATION_PACKAGE_FORMATS,
     ALLOWED_MOUNT_OPTIONS,
     ALLOWED_MSSQL_VERSIONS,
@@ -132,6 +133,14 @@ option_python = click.option(
     help="Python major/minor version used in Airflow image for images.",
     envvar="PYTHON_MAJOR_MINOR_VERSION",
 )
+option_debian_version = click.option(
+    "--debian-version",
+    type=BetterChoice(ALLOWED_DEBIAN_VERSIONS),
+    default=ALLOWED_DEBIAN_VERSIONS[0],
+    show_default=True,
+    help="Debian version used in Airflow image as base for building images.",
+    envvar="DEBIAN_VERSION",
+)
 option_backend = click.option(
     "-b",
     "--backend",
@@ -517,7 +526,7 @@ option_pull = click.option(
 option_python_image = click.option(
     "--python-image",
     help="If specified this is the base python image used to build the image. "
-    "Should be something like: python:VERSION-slim-bullseye.",
+    "Should be something like: python:VERSION-slim-bookworm.",
     envvar="PYTHON_IMAGE",
 )
 option_builder = click.option(
diff --git a/docs/docker-stack/build-arg-ref.rst b/docs/docker-stack/build-arg-ref.rst
index aa3315473c..e1f566be8d 100644
--- a/docs/docker-stack/build-arg-ref.rst
+++ b/docs/docker-stack/build-arg-ref.rst
@@ -30,7 +30,7 @@ Those are the most common arguments that you use when you want to build a custom
 +------------------------------------------+------------------------------------------+---------------------------------------------+
 | Build argument                           | Default value                            | Description                                 |
 +==========================================+==========================================+=============================================+
-| ``PYTHON_BASE_IMAGE``                    | ``python:3.8-slim-bullseye``             | Base python image.                          |
+| ``PYTHON_BASE_IMAGE``                    | ``python:3.8-slim-bookworm``             | Base python image.                          |
 +------------------------------------------+------------------------------------------+---------------------------------------------+
 | ``AIRFLOW_VERSION``                      | :subst-code:`|airflow-version|`          | version of Airflow.                         |
 +------------------------------------------+------------------------------------------+---------------------------------------------+
diff --git a/docs/docker-stack/build.rst b/docs/docker-stack/build.rst
index 9df6628d4b..95aa7fc5c9 100644
--- a/docs/docker-stack/build.rst
+++ b/docs/docker-stack/build.rst
@@ -509,16 +509,10 @@ Customizing the image
 ---------------------
 
 .. warning::
-    BREAKING CHANGE! As of Airflow 2.3.0 you need to use
-    `Buildkit <https://docs.docker.com/develop/develop-images/build_enhancements/>`_ to build customized
-    Airflow Docker image. We are using new features of Building (and ``dockerfile:1.4`` syntax)
-    to make our image faster to build and "standalone" - i.e. not needing any extra files from
-    Airflow in order to be build. As of Airflow 2.3.0, the ``Dockerfile`` that is released with Airflow
-    does not need any extra folders or files and can be copied and used from any folder.
-    Previously you needed to copy Airflow sources together with the Dockerfile as some scripts were
-    needed to make it work. You also need to use ``DOCKER_CONTEXT_FILES`` build arg if you want to
-    use your own custom files during the build (see
-    :ref:`Using docker context files <using-docker-context-files>` for details).
+
+    In Dockerfiles released in Airflow 2.8.0, images are based on ``Debian Bookworm`` images as base images.
+    For Dockerfiles released as part of 2.8.* series you can still choose - deprecated now - ``Debian Bullseye``
+    image as base images, but this possibility will be removed in 2.9.0.
 
 .. note::
     You can usually use the latest ``Dockerfile`` released by Airflow to build previous Airflow versions.
@@ -531,10 +525,11 @@ Prerequisites for building customized docker image:
 * You need to enable `Buildkit <https://docs.docker.com/develop/develop-images/build_enhancements/>`_ to
   build the image. This can be done by setting ``DOCKER_BUILDKIT=1`` as an environment variable
   or by installing `the buildx plugin <https://docs.docker.com/buildx/working-with-buildx/>`_
-  and running ``docker buildx build`` command.
+  and running ``docker buildx build`` command. Docker Desktop has ``Buildkit`` enabled by default.
 
 * You need to have a new Docker installed to handle ``1.4`` syntax of the Dockerfile.
-  Docker version ``20.10.7`` and above is known to work.
+  Docker version ``23.0.0`` and above are known to work.
+
 
 Before attempting to customize the image, you need to download flexible and customizable ``Dockerfile``.
 You can extract the officially released version of the Dockerfile from the
@@ -741,7 +736,7 @@ have more complex dependencies to build.
 Building optimized images
 .........................
 
-The following example the production image in version ``3.8`` with additional airflow extras from ``2.0.2``
+The following example builds the production image in version ``3.8`` with additional airflow extras from
 PyPI package but it includes additional apt dev and runtime dependencies.
 
 The dev dependencies are those that require ``build-essential`` and usually need to involve recompiling
@@ -756,6 +751,25 @@ The ``jre-headless`` does not require recompiling so it can be installed as the
     :start-after: [START build]
     :end-before: [END build]
 
+.. _image-build-bullseye:
+
+Building Debian Bullseye-based images
+.....................................
+
+.. warning::
+
+  By default Airflow images as of Airflow 2.8.0 are based on ``Debian Bookworm``. However, you can also
+  build images based on - deprecated - ``Debian Bullseye``. This option will be removed in the
+  Dockerfile released in Airflow 2.9.0
+
+The following example builds the production image in version ``3.8`` based on ``Debian Bullseye`` base image.
+
+.. exampleinclude:: docker-examples/customizing/debian-bullseye.sh
+    :language: bash
+    :start-after: [START build]
+    :end-before: [END build]
+
+
 .. _image-build-github:
 
 
diff --git a/docs/docker-stack/changelog.rst b/docs/docker-stack/changelog.rst
index b9342ef26e..0f752cb189 100644
--- a/docs/docker-stack/changelog.rst
+++ b/docs/docker-stack/changelog.rst
@@ -34,26 +34,16 @@ 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.
 
-Changes after publishing the images
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Airflow 2.8
+~~~~~~~~~~~
 
-Occasionally our images need to be regenerated using newer ``Dockerfiles`` or constraints.
-This happens when an issue is found or a breaking change is released by our dependencies
-that invalidates the already released image, and regenerating the image makes it usable again.
-While we cannot assure 100% backwards compatibility when it happens, we at least document it
-here so that users affected can find the reason for the changes.
+* 2.8.0
+
+   * The image is based on ``Debian Bookworm`` in 2.8.0 rather than ``Debian Bullseye``. This might cause some
+     problems when building custom images. You are advised to make sure your system level dependencies are
+     working with ``Debian Bookworm``. While all reference images of Airflow 2.8.0 are built on ``Debian Bookworm``,
+     it is still possible to build deprecated custom ``Debian Bullseye`` based image in 2.8.0 following the
 
-+--------------+---------------------+-----------------------------------------+------------------------+----------------------------------------------+
-| Date         | Affected images     | Potentially breaking change             | Reason                 | Link to Pull Request                         |
-+==============+=====================+=========================================+========================+==============================================+
-| 17 June 2022 | 2.2.5               | * The ``Authlib`` library downgraded    | Flask App Builder      | https://github.com/apache/airflow/pull/24516 |
-|              |                     |   from 1.0.1 to 0.15.5 version          | not compatible with    |                                              |
-|              | 2.3.0-2.3.2         |                                         | Authlib >= 1.0.0       |                                              |
-+--------------+---------------------+-----------------------------------------+------------------------+----------------------------------------------+
-| 18 Jan 2022  | All 2.2.\*, 2.1.\*  | * The AIRFLOW_GID 500 was removed       | MySQL changed keys     | https://github.com/apache/airflow/pull/20912 |
-|              |                     | * MySQL ``apt`` repository key changed. | to sign their packages |                                              |
-|              |                     |                                         | on 17 Jan 2022         |                                              |
-+--------------+---------------------+-----------------------------------------+------------------------+----------------------------------------------+
 
 Airflow 2.7
 ~~~~~~~~~~~
@@ -248,3 +238,25 @@ Airflow 2.0
 
 * 2.0.0
    * Initial release of the image based on Debian Buster
+
+
+Changes after publishing the images
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Occasionally our images need to be regenerated using newer ``Dockerfiles`` or constraints.
+This happens when an issue is found or a breaking change is released by our dependencies
+that invalidates the already released image, and regenerating the image makes it usable again.
+While we cannot assure 100% backwards compatibility when it happens, we at least document it
+here so that users affected can find the reason for the changes.
+
++--------------+---------------------+-----------------------------------------+------------------------+----------------------------------------------+
+| Date         | Affected images     | Potentially breaking change             | Reason                 | Link to Pull Request                         |
++==============+=====================+=========================================+========================+==============================================+
+| 17 June 2022 | 2.2.5               | * The ``Authlib`` library downgraded    | Flask App Builder      | https://github.com/apache/airflow/pull/24516 |
+|              |                     |   from 1.0.1 to 0.15.5 version          | not compatible with    |                                              |
+|              | 2.3.0-2.3.2         |                                         | Authlib >= 1.0.0       |                                              |
++--------------+---------------------+-----------------------------------------+------------------------+----------------------------------------------+
+| 18 Jan 2022  | All 2.2.\*, 2.1.\*  | * The AIRFLOW_GID 500 was removed       | MySQL changed keys     | https://github.com/apache/airflow/pull/20912 |
+|              |                     | * MySQL ``apt`` repository key changed. | to sign their packages |                                              |
+|              |                     |                                         | on 17 Jan 2022         |                                              |
++--------------+---------------------+-----------------------------------------+------------------------+----------------------------------------------+
diff --git a/docs/docker-stack/docker-examples/customizing/add-build-essential-custom.sh b/docs/docker-stack/docker-examples/customizing/add-build-essential-custom.sh
index 29e8762cf1..4821e83ef3 100755
--- a/docs/docker-stack/docker-examples/customizing/add-build-essential-custom.sh
+++ b/docs/docker-stack/docker-examples/customizing/add-build-essential-custom.sh
@@ -31,7 +31,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_PYTHON_DEPS="mpi4py" \
     --build-arg ADDITIONAL_DEV_APT_DEPS="libopenmpi-dev" \
diff --git a/docs/docker-stack/docker-examples/customizing/custom-sources.sh b/docs/docker-stack/docker-examples/customizing/custom-sources.sh
index 7299dce829..ae4a9df4f0 100755
--- a/docs/docker-stack/docker-examples/customizing/custom-sources.sh
+++ b/docs/docker-stack/docker-examples/customizing/custom-sources.sh
@@ -32,7 +32,7 @@ export DOCKER_BUILDKIT=1
 docker build . -f Dockerfile \
     --pull \
     --platform 'linux/amd64' \
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_AIRFLOW_EXTRAS="slack,odbc" \
     --build-arg ADDITIONAL_PYTHON_DEPS=" \
diff --git a/docs/docker-stack/docker-examples/customizing/pypi-selected-version.sh b/docs/docker-stack/docker-examples/customizing/debian-bullseye.sh
similarity index 87%
copy from docs/docker-stack/docker-examples/customizing/pypi-selected-version.sh
copy to docs/docker-stack/docker-examples/customizing/debian-bullseye.sh
index d0c62c11b8..7de22a004b 100755
--- a/docs/docker-stack/docker-examples/customizing/pypi-selected-version.sh
+++ b/docs/docker-stack/docker-examples/customizing/debian-bullseye.sh
@@ -26,14 +26,12 @@ pushd "${TEMP_DOCKER_DIR}"
 cp "${AIRFLOW_SOURCES}/Dockerfile" "${TEMP_DOCKER_DIR}"
 
 # [START build]
-export AIRFLOW_VERSION=2.3.4
 export DOCKER_BUILDKIT=1
 
 docker build . \
     --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
-    --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
-    --tag "my-pypi-selected-version:0.0.1"
+    --tag "my-bullseye-airflow:0.0.1"
 # [END build]
-docker rmi --force "my-pypi-selected-version:0.0.1"
+docker rmi --force "my-bullseye-airflow:0.0.1"
 popd
 rm -rf "${TEMP_DOCKER_DIR}"
diff --git a/docs/docker-stack/docker-examples/customizing/github-different-repository.sh b/docs/docker-stack/docker-examples/customizing/github-different-repository.sh
index 3757976cab..b0fc6716d0 100755
--- a/docs/docker-stack/docker-examples/customizing/github-different-repository.sh
+++ b/docs/docker-stack/docker-examples/customizing/github-different-repository.sh
@@ -29,7 +29,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_INSTALLATION_METHOD="https://github.com/potiuk/airflow/archive/main.tar.gz#egg=apache-airflow" \
     --build-arg AIRFLOW_CONSTRAINTS_REFERENCE="constraints-main" \
     --build-arg CONSTRAINTS_GITHUB_REPOSITORY="potiuk/airflow" \
diff --git a/docs/docker-stack/docker-examples/customizing/github-main.sh b/docs/docker-stack/docker-examples/customizing/github-main.sh
index 3a7e1ec073..ef1da74773 100755
--- a/docs/docker-stack/docker-examples/customizing/github-main.sh
+++ b/docs/docker-stack/docker-examples/customizing/github-main.sh
@@ -30,7 +30,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_INSTALLATION_METHOD="https://github.com/apache/airflow/archive/main.tar.gz#egg=apache-airflow" \
     --build-arg AIRFLOW_CONSTRAINTS_REFERENCE="constraints-main" \
     --tag "my-github-main:0.0.1"
diff --git a/docs/docker-stack/docker-examples/customizing/github-v2-2-test.sh b/docs/docker-stack/docker-examples/customizing/github-v2-2-test.sh
index 8812cf85ef..5a7f634a4b 100755
--- a/docs/docker-stack/docker-examples/customizing/github-v2-2-test.sh
+++ b/docs/docker-stack/docker-examples/customizing/github-v2-2-test.sh
@@ -31,7 +31,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_INSTALLATION_METHOD="https://github.com/apache/airflow/archive/v2-2-test.tar.gz#egg=apache-airflow" \
     --build-arg AIRFLOW_CONSTRAINTS_REFERENCE="constraints-2-2" \
     --tag "my-github-v2-2:0.0.1"
diff --git a/docs/docker-stack/docker-examples/customizing/pypi-dev-runtime-deps.sh b/docs/docker-stack/docker-examples/customizing/pypi-dev-runtime-deps.sh
index 0323a51031..74863922d3 100755
--- a/docs/docker-stack/docker-examples/customizing/pypi-dev-runtime-deps.sh
+++ b/docs/docker-stack/docker-examples/customizing/pypi-dev-runtime-deps.sh
@@ -32,7 +32,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_AIRFLOW_EXTRAS="jdbc" \
     --build-arg ADDITIONAL_PYTHON_DEPS="pandas" \
diff --git a/docs/docker-stack/docker-examples/customizing/pypi-extras-and-deps.sh b/docs/docker-stack/docker-examples/customizing/pypi-extras-and-deps.sh
index cf51294cc6..6bd60719d8 100755
--- a/docs/docker-stack/docker-examples/customizing/pypi-extras-and-deps.sh
+++ b/docs/docker-stack/docker-examples/customizing/pypi-extras-and-deps.sh
@@ -31,7 +31,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_AIRFLOW_EXTRAS="mssql,hdfs" \
     --build-arg ADDITIONAL_PYTHON_DEPS="oauth2client" \
diff --git a/docs/docker-stack/docker-examples/customizing/pypi-selected-version.sh b/docs/docker-stack/docker-examples/customizing/pypi-selected-version.sh
index d0c62c11b8..2cf287e07a 100755
--- a/docs/docker-stack/docker-examples/customizing/pypi-selected-version.sh
+++ b/docs/docker-stack/docker-examples/customizing/pypi-selected-version.sh
@@ -30,7 +30,7 @@ export AIRFLOW_VERSION=2.3.4
 export DOCKER_BUILDKIT=1
 
 docker build . \
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --tag "my-pypi-selected-version:0.0.1"
 # [END build]
diff --git a/docs/docker-stack/docker-examples/restricted/restricted_environments.sh b/docs/docker-stack/docker-examples/restricted/restricted_environments.sh
index 012841bffe..50f184e884 100755
--- a/docs/docker-stack/docker-examples/restricted/restricted_environments.sh
+++ b/docs/docker-stack/docker-examples/restricted/restricted_environments.sh
@@ -47,7 +47,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bullseye" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_INSTALLATION_METHOD="apache-airflow" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg INSTALL_MYSQL_CLIENT="false" \
diff --git a/generated/PYPI_README.md b/generated/PYPI_README.md
index fd5c18d67c..48abffcc54 100644
--- a/generated/PYPI_README.md
+++ b/generated/PYPI_README.md
@@ -75,7 +75,9 @@ The work to add Windows support is tracked via [#10388](https://github.com/apach
 it is not a high priority. You should only use Linux-based distros as "Production" execution environment
 as this is the only environment that is supported. The only distro that is used in our CI tests and that
 is used in the [Community managed DockerHub image](https://hub.docker.com/p/apache/airflow) is
-`Debian Bullseye`.
+`Debian Bookworm`. We also have support for legacy ``Debian Bullseye`` base image if you want to build a
+custom image but it is deprecated and option to do it will be removed in the Dockerfile that
+will accompany Airflow 2.9.0 so you are advised to switch to ``Debian Bookworm`` for your custom images.
 
 ## Getting started
 
diff --git a/images/breeze/output-commands-hash.txt b/images/breeze/output-commands-hash.txt
index ed6d6340f7..9eef6e3eee 100644
--- a/images/breeze/output-commands-hash.txt
+++ b/images/breeze/output-commands-hash.txt
@@ -1,7 +1,7 @@
 # This file is automatically generated by pre-commit. If you have a conflict with this file
 # Please do not solve it but run `breeze setup regenerate-command-images`.
 # This command should fix the conflict and regenerate help images that you have conflict with.
-main:ffb1a766b791beaf5f8a983587db870f
+main:98ecc69ba3b0755b17bfecce0290f5ef
 build-docs:2e9882744f219e56726548ce2d13c3f5
 ci:find-backtracking-candidates:17fe56b867a745e5032a08dfcd3f73ee
 ci:fix-ownership:3e5a73533cc96045e72cb258783cfc96
@@ -10,10 +10,10 @@ ci:get-workflow-info:8246038093359b9c3c110043419473e2
 ci:resource-check:bfcca92f18a403ca630955074eb5e9ad
 ci:selective-check:6657ed5d42affb7264b5efcc86f17a2a
 ci:5315c29bd9f68725ef92e4db8aff5cda
-ci-image:build:dd891a7e3c99131f7166ebbccd4f670b
+ci-image:build:26e91cab59fc5836def7404484c619a4
 ci-image:pull:f9248c6026da61fe0acdb5d8f37b20da
 ci-image:verify:c90dc7e20fce2351eb89d8d1ebbd35e7
-ci-image:973b722fdd947e21ff59f3bf9cfc6264
+ci-image:33a22dbe1a324aab74355346f9cdf43f
 cleanup:8d92d453a6700f6d8cb11fb6a8b50461
 compile-www-assets:0963f1409f0aa1e3b137cddd4cc52e87
 down:4580f5b3b178ea00182694f134a751f3
@@ -32,10 +32,10 @@ k8s:status:6e711c24648c9bf42372e5b73cb2ac0f
 k8s:tests:4fea1fee4cfbf15f313ffd9026219401
 k8s:upload-k8s-image:46c5f1b042222047fda3f18f1ef75835
 k8s:6994fe347c18bcc01d95fb721a3757d5
-prod-image:build:20f84ddadc2fe4ae2723b7ccdde0197f
+prod-image:build:1628f7bff3e7e369f0358a646682e674
 prod-image:pull:3817ef211b023b76df84ee1110ef64dd
 prod-image:verify:bd2b78738a7c388dbad6076c41a9f906
-prod-image:e9ecd759e51ebd926df3170b29d1d2dc
+prod-image:6011405076eb0e1049d87e971e3adce1
 release-management:add-back-references:51960e2831d0e03a2b127d252929b843
 release-management:create-minor-branch:a3834afc4aa5d1e98002c9e9e7a9931d
 release-management:generate-constraints:01aef235b11e59ed7f10c970a5cdaba7
@@ -58,18 +58,18 @@ sbom:update-sbom-information:653be48be70b4b7ff5172d491aadc694
 sbom:386048e0c00c0de30cf181eb9f3862ea
 setup:autocomplete:fffcd49e102e09ccd69b3841a9e3ea8e
 setup:check-all-params-in-groups:5c5e3c382fc8ce84899d224448b3f48a
-setup:config:53a0aeec6237da4d46bde68fafa29dc3
+setup:config:e3643574bbd8ecb635f4a4e545129263
 setup:regenerate-command-images:3c3023afd1761030c64bd6f1d6ef4793
 setup:self-upgrade:4af905a147fcd6670a0e33d3d369a94b
 setup:version:be116d90a21c2afe01087f7609774e1e
-setup:f60eda462f5bc70fee369806fedad538
-shell:aa92fe60473e4b5d0f41b5b182c02468
-start-airflow:f09871892c61bc889e6b56791115c923
+setup:2d0ee1962148f1620924fb1ab96bcf75
+shell:7100dd035b4ab8fc137a0ee28119c575
+start-airflow:106291d99f4a64b03dae672f8227f057
 static-checks:8ed3127b97b5b56dae600aa4b15d4002
-testing:db-tests:e08e3f30ddc34d95ae56de5222392b59
+testing:db-tests:bae4c8fcb9e59f2e0bfe682725c0e55e
 testing:docker-compose-tests:fd154a058082fcfda12eb877a9a89338
 testing:helm-tests:98a9ba6631249762b1633b76a29f4461
-testing:integration-tests:c7fde5144126a445201d7e353aa19ba5
+testing:integration-tests:01490a3980b1a25c453a4bf39c60b069
 testing:non-db-tests:ed916603036dd9979b1593c4d088eb40
-testing:tests:4ad1723c7b2b6d2d7d249d42964ced92
-testing:eae1e62ff40d5012388abd104461b88e
+testing:tests:9ec49647fc0d5f2c0b4f2af876260beb
+testing:5b522dd4481e0978501e0189ecb7580a
diff --git a/images/breeze/output-commands.svg b/images/breeze/output-commands.svg
index de15344994..0068f3b66f 100644
--- a/images/breeze/output-commands.svg
+++ b/images/breeze/output-commands.svg
@@ -268,7 +268,7 @@
 </text><text class="breeze-help-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-help-line-16)">│</text><text class="breeze-help-r7" x="317.2" y="410.4" textLength="1122.4" clip-path="url(#breeze-help-line-16)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;mssql&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
 </text><text class="breeze-help-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-help-line-17)">│</text><text class="breeze-help-r5" x="317.2" y="434.8" textLength="1122.4" clip-path="url(#breeze-help-line-17)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
 </text><text class="breeze-help-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-help-line-18)">│</text><text class="breeze-help-r4" x="24.4" y="459.2" textLength="12.2" clip-path="url(#breeze-help-line-18)">-</text><text class="breeze-help-r4" x="36.6" y="459.2" textLength="109.8" clip-path="url(#breeze-help-line-18)">-postgres</text><text class="breeze-help-r4" x="146.4" y="459.2" textLength="97.6" clip-path="url(#breeze-help-line-18)">-version</text><text class="breeze-hel [...]
-</text><text class="breeze-help-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-help-line-19)">│</text><text class="breeze-help-r4" x="24.4" y="483.6" textLength="12.2" clip-path="url(#breeze-help-line-19)">-</text><text class="breeze-help-r4" x="36.6" y="483.6" textLength="73.2" clip-path="url(#breeze-help-line-19)">-mysql</text><text class="breeze-help-r4" x="109.8" y="483.6" textLength="97.6" clip-path="url(#breeze-help-line-19)">-version</text><text class="breeze-help-r6 [...]
+</text><text class="breeze-help-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-help-line-19)">│</text><text class="breeze-help-r4" x="24.4" y="483.6" textLength="12.2" clip-path="url(#breeze-help-line-19)">-</text><text class="breeze-help-r4" x="36.6" y="483.6" textLength="73.2" clip-path="url(#breeze-help-line-19)">-mysql</text><text class="breeze-help-r4" x="109.8" y="483.6" textLength="97.6" clip-path="url(#breeze-help-line-19)">-version</text><text class="breeze-help-r6 [...]
 </text><text class="breeze-help-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-help-line-20)">│</text><text class="breeze-help-r4" x="24.4" y="508" textLength="12.2" clip-path="url(#breeze-help-line-20)">-</text><text class="breeze-help-r4" x="36.6" y="508" textLength="73.2" clip-path="url(#breeze-help-line-20)">-mssql</text><text class="breeze-help-r4" x="109.8" y="508" textLength="97.6" clip-path="url(#breeze-help-line-20)">-version</text><text class="breeze-help-r6" x="268 [...]
 </text><text class="breeze-help-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-help-line-21)">│</text><text class="breeze-help-r4" x="24.4" y="532.4" textLength="12.2" clip-path="url(#breeze-help-line-21)">-</text><text class="breeze-help-r4" x="36.6" y="532.4" textLength="36.6" clip-path="url(#breeze-help-line-21)">-db</text><text class="breeze-help-r4" x="73.2" y="532.4" textLength="73.2" clip-path="url(#breeze-help-line-21)">-reset</text><text class="breeze-help-r6" x="2 [...]
 </text><text class="breeze-help-r5" x="0" y="556.8" textLength="1464" clip-path="url(#breeze-help-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-help-line-22)">
diff --git a/images/breeze/output_ci-image_build.svg b/images/breeze/output_ci-image_build.svg
index 9726169f92..98f7dbb901 100644
--- a/images/breeze/output_ci-image_build.svg
+++ b/images/breeze/output_ci-image_build.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2099.6" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2172.7999999999997" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-ci-image-build-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2048.6" />
+      <rect x="0" y="0" width="1463.0" height="2121.7999999999997" />
     </clipPath>
     <clipPath id="breeze-ci-image-build-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -294,9 +294,18 @@
 <clipPath id="breeze-ci-image-build-line-82">
     <rect x="0" y="2002.3" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-ci-image-build-line-83">
+    <rect x="0" y="2026.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-ci-image-build-line-84">
+    <rect x="0" y="2051.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-ci-image-build-line-85">
+    <rect x="0" y="2075.5" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2097.6" rx="8"/><text class="breeze-ci-image-build-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;ci-image&#160;build</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2170.8" rx="8"/><text class="breeze-ci-image-build-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;ci-image&#160;build</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -338,58 +347,61 @@
 </text><text class="breeze-ci-image-build-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-29)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="727.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-29)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="727.6" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-29)">-include</text><text class="breeze-ci-image-build-r4" x="134.2" y="727.6" textLength="195.2" clip-pa [...]
 </text><text class="breeze-ci-image-build-r5" x="0" y="752" textLength="1464" clip-path="url(#breeze-ci-image-build-line-30)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-30)">
 </text><text class="breeze-ci-image-build-r5" x="0" y="776.4" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-31)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="776.4" textLength="439.2" clip-path="url(#breeze-ci-image-build-line-31)">&#160;Advanced&#160;options&#160;(for&#160;power&#160;users)&#160;</text><text class="breeze-ci-image-build-r5" x="463.6" y="776.4" textLength="976" clip-path="url(#breeze-ci-image-build-line-31)">───────────────────────────────── [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-32)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="800.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-32)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="800.8" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-32)">-install</text><text class="breeze-ci-image-build-r4" x="134.2" y="800.8" textLength="280.6" clip-pa [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-33)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-33)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="825.2" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-33)">-airflow</text><text class="breeze-ci-image-build-r4" x="134.2" y="825.2" textLength="256.2" clip-pa [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-34)">│</text><text class="breeze-ci-image-build-r1" x="463.6" y="849.6" textLength="976" clip-path="url(#breeze-ci-image-build-line-34)">file.&#160;It&#160;could&#160;be&#160;full&#160;remote&#160;URL&#160;to&#160;the&#160;location&#160;file,&#160;or&#160;local&#160;file&#160;placed&#160;in&#160;</text><text class="breeze-ci-image-build-r5" x="1451.8" y="849.6" textL [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-35)">│</text><text class="breeze-ci-image-build-r1" x="463.6" y="874" textLength="976" clip-path="url(#breeze-ci-image-build-line-35)">`docker-context-files`&#160;(in&#160;this&#160;case&#160;it&#160;has&#160;to&#160;start&#160;with&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;< [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-36)">│</text><text class="breeze-ci-image-build-r1" x="463.6" y="898.4" textLength="976" clip-path="url(#breeze-ci-image-build-line-36)">/opt/airflow/docker-context-files).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-37)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="922.8" textLength="976" clip-path="url(#breeze-ci-image-build-line-37)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-38)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="947.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-38)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="947.2" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-38)">-airflow</text><text class="breeze-ci-image-build-r4" x="134.2" y="947.2" textLength="207.4" clip-pa [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-39)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="971.6" textLength="866.2" clip-path="url(#breeze-ci-image-build-line-39)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text class="breeze-ci-image-build-r5" x="1451.8" y="971.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-39)">│</tex [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-40)">│</text><text class="breeze-ci-image-build-r5" x="463.6" y="996" textLength="866.2" clip-path="url(#breeze-ci-image-build-line-40)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-41)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1020.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-41)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1020.4" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-41)">-airflow</text><text class="breeze-ci-image-build-r4" x="134.2" y="1020.4" textLength="268.4" cli [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-42)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1044.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-42)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1044.8" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-42)">-python</text><text class="breeze-ci-image-build-r4" x="122" y="1044.8" textLength="73.2" clip-pa [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-43)">│</text><text class="breeze-ci-image-build-r1" x="463.6" y="1069.2" textLength="976" clip-path="url(#breeze-ci-image-build-line-43)">something&#160;like:&#160;python:VERSION-slim-bullseye.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-44)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="1093.6" textLength="976" clip-path="url(#breeze-ci-image-build-line-44)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-45)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1118" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-45)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1118" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-45)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1118" textLength="146.4" clip-pa [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-46)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1142.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-46)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1142.4" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-46)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1142.4" textLength="85.4"  [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-47)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1166.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-47)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1166.8" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-47)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1166.8" textLength="219.6" [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-48)">│</text><text class="breeze-ci-image-build-r1" x="463.6" y="1191.2" textLength="976" clip-path="url(#breeze-ci-image-build-line-48)">itself).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-49)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="1215.6" textLength="976" clip-path="url(#breeze-ci-image-build-line-49)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-50)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1240" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-50)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1240" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-50)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1240" textLength="158.6" clip-pa [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-51)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1264.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-51)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1264.4" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-51)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1264.4" textLength="146.4" [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-52)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1288.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-52)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1288.8" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-52)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1288.8" textLength="195.2" [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-53)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1313.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-53)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1313.2" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-53)">-dev</text><text class="breeze-ci-image-build-r4" x="85.4" y="1313.2" textLength="109.8" clip-pat [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-54)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1337.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-54)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1337.6" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-54)">-dev</text><text class="breeze-ci-image-build-r4" x="85.4" y="1337.6" textLength="146.4" clip-pat [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-55)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1362" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-55)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1362" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-55)">-version</text><text class="breeze-ci-image-build-r4" x="134.2" y="1362" textLength="195.2" clip-path=" [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-56)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1386.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-56)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1386.4" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-56)">-commit</text><text class="breeze-ci-image-build-r4" x="122" y="1386.4" textLength="48.8" clip-pa [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1410.8" textLength="1464" clip-path="url(#breeze-ci-image-build-line-57)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r1" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-57)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="1435.2" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-58)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="1435.2" textLength="268.4" clip-path="url(#breeze-ci-image-build-line-58)">&#160;Backtracking&#160;options&#160;</text><text class="breeze-ci-image-build-r5" x="292.8" y="1435.2" textLength="1146.8" clip-path="url(#breeze-ci-image-build-line-58)">──────────────────────────────────────────────────────── [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-59)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1459.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-59)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1459.6" textLength="73.2" clip-path="url(#breeze-ci-image-build-line-59)">-build</text><text class="breeze-ci-image-build-r4" x="109.8" y="1459.6" textLength="195.2" clip- [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-60)">│</text><text class="breeze-ci-image-build-r1" x="549" y="1484" textLength="890.6" clip-path="url(#breeze-ci-image-build-line-60)">backtracking&#160;problems.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-61)">│</text><text class="breeze-ci-image-build-r7" x="549" y="1508.4" textLength="890.6" clip-path="url(#breeze-ci-image-build-line-61)">(INTEGER)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-62)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1532.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-62)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1532.8" textLength="73.2" clip-path="url(#breeze-ci-image-build-line-62)">-eager</text><text class="breeze-ci-image-build-r4" x="109.8" y="1532.8" textLength="390.4" clip- [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-63)">│</text><text class="breeze-ci-image-build-r1" x="549" y="1557.2" textLength="890.6" clip-path="url(#breeze-ci-image-build-line-63)">(see&#160;`breeze&#160;ci&#160;find-backtracking-candidates`).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-64)">│</text><text class="breeze-ci-image-build-r7" x="549" y="1581.6" textLength="890.6" clip-path="url(#breeze-ci-image-build-line-64)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1606" textLength="1464" clip-path="url(#breeze-ci-image-build-line-65)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-65)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="1630.4" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-66)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="1630.4" textLength="622.2" clip-path="url(#breeze-ci-image-build-line-66)">&#160;Preparing&#160;cache&#160;and&#160;push&#160;(for&#160;maintainers&#160;and&#160;CI)&#160;</text><text class="breeze-ci-image-build-r5" x="646.6" y="1630.4" textLength="793" clip-path="url(#breeze-ci-image-build-line-66)"> [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-67)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1654.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-67)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1654.8" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-67)">-builder</text><text class="breeze-ci-image-build-r1" x="341.6" y="1654.8" textLength="756.4" cli [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-68)">│</text><text class="breeze-ci-image-build-r5" x="341.6" y="1679.2" textLength="756.4" clip-path="url(#breeze-ci-image-build-line-68)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-69)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1703.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-69)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1703.6" textLength="109.8" clip-path="url(#breeze-ci-image-build-line-69)">-platform</text><text class="breeze-ci-image-build-r1" x="341.6" y="1703.6" textLength="329.4" c [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-70)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1728" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-70)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1728" textLength="61" clip-path="url(#breeze-ci-image-build-line-70)">-push</text><text class="breeze-ci-image-build-r1" x="341.6" y="1728" textLength="353.8" clip-path="url(# [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-71)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1752.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-71)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1752.4" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-71)">-prepare</text><text class="breeze-ci-image-build-r4" x="134.2" y="1752.4" textLength="158.6" cli [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-72)">│</text><text class="breeze-ci-image-build-r1" x="341.6" y="1776.8" textLength="1098" clip-path="url(#breeze-ci-image-build-line-72)">image).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1801.2" textLength="1464" clip-path="url(#breeze-ci-image-build-line-73)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-73)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="1825.6" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-74)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="1825.6" textLength="280.6" clip-path="url(#breeze-ci-image-build-line-74)">&#160;Github&#160;authentication&#160;</text><text class="breeze-ci-image-build-r5" x="305" y="1825.6" textLength="1134.6" clip-path="url(#breeze-ci-image-build-line-74)">───────────────────────────────────────────────────────── [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-75)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1850" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-75)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1850" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-75)">-github</text><text class="breeze-ci-image-build-r4" x="122" y="1850" textLength="134.2" clip-path="url [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-76)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1874.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-76)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1874.4" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-76)">-github</text><text class="breeze-ci-image-build-r4" x="122" y="1874.4" textLength="73.2" clip-pa [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1898.8" textLength="1464" clip-path="url(#breeze-ci-image-build-line-77)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-77)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="1923.2" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-78)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="1923.2" textLength="195.2" clip-path="url(#breeze-ci-image-build-line-78)">&#160;Common&#160;options&#160;</text><text class="breeze-ci-image-build-r5" x="219.6" y="1923.2" textLength="1220" clip-path="url(#breeze-ci-image-build-line-78)">──────────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-79)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1947.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-79)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1947.6" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-79)">-verbose</text><text class="breeze-ci-image-build-r6" x="158.6" y="1947.6" textLength="24.4" clip [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-80)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1972" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-80)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1972" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-80)">-dry</text><text class="breeze-ci-image-build-r4" x="85.4" y="1972" textLength="48.8" clip-path="url(#b [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-81)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1996.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-81)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1996.4" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-81)">-answer</text><text class="breeze-ci-image-build-r6" x="158.6" y="1996.4" textLength="24.4" clip- [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-82)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="2020.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-82)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="2020.8" textLength="61" clip-path="url(#breeze-ci-image-build-line-82)">-help</text><text class="breeze-ci-image-build-r6" x="158.6" y="2020.8" textLength="24.4" clip-path [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2045.2" textLength="1464" clip-path="url(#breeze-ci-image-build-line-83)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r1" x="1464" y="2045.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-83)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-32)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="800.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-32)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="800.8" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-32)">-debian</text><text class="breeze-ci-image-build-r4" x="122" y="800.8" textLength="97.6" clip-path=" [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-33)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="825.2" textLength="793" clip-path="url(#breeze-ci-image-build-line-33)">(bookworm&#160;|&#160;bullseye)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-34)">│</text><text class="breeze-ci-image-build-r5" x="463.6" y="849.6" textLength="793" clip-path="url(#breeze-ci-image-build-line-34)">[default:&#160;bookworm]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-35)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="874" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-35)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="874" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-35)">-install</text><text class="breeze-ci-image-build-r4" x="134.2" y="874" textLength="280.6" clip-path="url( [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-36)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="898.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-36)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="898.4" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-36)">-airflow</text><text class="breeze-ci-image-build-r4" x="134.2" y="898.4" textLength="256.2" clip-pa [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-37)">│</text><text class="breeze-ci-image-build-r1" x="463.6" y="922.8" textLength="976" clip-path="url(#breeze-ci-image-build-line-37)">file.&#160;It&#160;could&#160;be&#160;full&#160;remote&#160;URL&#160;to&#160;the&#160;location&#160;file,&#160;or&#160;local&#160;file&#160;placed&#160;in&#160;</text><text class="breeze-ci-image-build-r5" x="1451.8" y="922.8" textL [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-38)">│</text><text class="breeze-ci-image-build-r1" x="463.6" y="947.2" textLength="976" clip-path="url(#breeze-ci-image-build-line-38)">`docker-context-files`&#160;(in&#160;this&#160;case&#160;it&#160;has&#160;to&#160;start&#160;with&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-39)">│</text><text class="breeze-ci-image-build-r1" x="463.6" y="971.6" textLength="976" clip-path="url(#breeze-ci-image-build-line-39)">/opt/airflow/docker-context-files).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-40)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="996" textLength="976" clip-path="url(#breeze-ci-image-build-line-40)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-41)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1020.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-41)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1020.4" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-41)">-airflow</text><text class="breeze-ci-image-build-r4" x="134.2" y="1020.4" textLength="207.4" cli [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-42)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="1044.8" textLength="866.2" clip-path="url(#breeze-ci-image-build-line-42)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text class="breeze-ci-image-build-r5" x="1451.8" y="1044.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-42)">│</ [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-43)">│</text><text class="breeze-ci-image-build-r5" x="463.6" y="1069.2" textLength="866.2" clip-path="url(#breeze-ci-image-build-line-43)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-44)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1093.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-44)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1093.6" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-44)">-airflow</text><text class="breeze-ci-image-build-r4" x="134.2" y="1093.6" textLength="268.4" cli [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-45)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1118" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-45)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1118" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-45)">-python</text><text class="breeze-ci-image-build-r4" x="122" y="1118" textLength="73.2" clip-path="url( [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-46)">│</text><text class="breeze-ci-image-build-r1" x="463.6" y="1142.4" textLength="976" clip-path="url(#breeze-ci-image-build-line-46)">something&#160;like:&#160;python:VERSION-slim-bookworm.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-47)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="1166.8" textLength="976" clip-path="url(#breeze-ci-image-build-line-47)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-48)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1191.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-48)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1191.2" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-48)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1191.2" textLength="146.4" [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-49)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1215.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-49)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1215.6" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-49)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1215.6" textLength="85.4"  [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-50)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1240" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-50)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1240" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-50)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1240" textLength="219.6" clip-pa [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-51)">│</text><text class="breeze-ci-image-build-r1" x="463.6" y="1264.4" textLength="976" clip-path="url(#breeze-ci-image-build-line-51)">itself).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-52)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="1288.8" textLength="976" clip-path="url(#breeze-ci-image-build-line-52)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-53)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1313.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-53)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1313.2" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-53)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1313.2" textLength="158.6" [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-54)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1337.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-54)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1337.6" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-54)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1337.6" textLength="146.4" [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-55)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1362" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-55)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1362" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-55)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1362" textLength="195.2" clip-pa [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-56)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1386.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-56)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1386.4" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-56)">-dev</text><text class="breeze-ci-image-build-r4" x="85.4" y="1386.4" textLength="109.8" clip-pat [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-57)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1410.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-57)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1410.8" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-57)">-dev</text><text class="breeze-ci-image-build-r4" x="85.4" y="1410.8" textLength="146.4" clip-pat [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-58)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1435.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-58)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1435.2" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-58)">-version</text><text class="breeze-ci-image-build-r4" x="134.2" y="1435.2" textLength="195.2" cli [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-59)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1459.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-59)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1459.6" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-59)">-commit</text><text class="breeze-ci-image-build-r4" x="122" y="1459.6" textLength="48.8" clip-pa [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1484" textLength="1464" clip-path="url(#breeze-ci-image-build-line-60)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r1" x="1464" y="1484" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-60)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="1508.4" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-61)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="1508.4" textLength="268.4" clip-path="url(#breeze-ci-image-build-line-61)">&#160;Backtracking&#160;options&#160;</text><text class="breeze-ci-image-build-r5" x="292.8" y="1508.4" textLength="1146.8" clip-path="url(#breeze-ci-image-build-line-61)">──────────────────────────────────────────────────────── [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-62)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1532.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-62)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1532.8" textLength="73.2" clip-path="url(#breeze-ci-image-build-line-62)">-build</text><text class="breeze-ci-image-build-r4" x="109.8" y="1532.8" textLength="195.2" clip- [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-63)">│</text><text class="breeze-ci-image-build-r1" x="549" y="1557.2" textLength="890.6" clip-path="url(#breeze-ci-image-build-line-63)">backtracking&#160;problems.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-64)">│</text><text class="breeze-ci-image-build-r7" x="549" y="1581.6" textLength="890.6" clip-path="url(#breeze-ci-image-build-line-64)">(INTEGER)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-65)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1606" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-65)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1606" textLength="73.2" clip-path="url(#breeze-ci-image-build-line-65)">-eager</text><text class="breeze-ci-image-build-r4" x="109.8" y="1606" textLength="390.4" clip-path="ur [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-66)">│</text><text class="breeze-ci-image-build-r1" x="549" y="1630.4" textLength="890.6" clip-path="url(#breeze-ci-image-build-line-66)">(see&#160;`breeze&#160;ci&#160;find-backtracking-candidates`).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-67)">│</text><text class="breeze-ci-image-build-r7" x="549" y="1654.8" textLength="890.6" clip-path="url(#breeze-ci-image-build-line-67)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1679.2" textLength="1464" clip-path="url(#breeze-ci-image-build-line-68)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-68)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="1703.6" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-69)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="1703.6" textLength="622.2" clip-path="url(#breeze-ci-image-build-line-69)">&#160;Preparing&#160;cache&#160;and&#160;push&#160;(for&#160;maintainers&#160;and&#160;CI)&#160;</text><text class="breeze-ci-image-build-r5" x="646.6" y="1703.6" textLength="793" clip-path="url(#breeze-ci-image-build-line-69)"> [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-70)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1728" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-70)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1728" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-70)">-builder</text><text class="breeze-ci-image-build-r1" x="341.6" y="1728" textLength="756.4" clip-path=" [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-71)">│</text><text class="breeze-ci-image-build-r5" x="341.6" y="1752.4" textLength="756.4" clip-path="url(#breeze-ci-image-build-line-71)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-72)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1776.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-72)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1776.8" textLength="109.8" clip-path="url(#breeze-ci-image-build-line-72)">-platform</text><text class="breeze-ci-image-build-r1" x="341.6" y="1776.8" textLength="329.4" c [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-73)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1801.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-73)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1801.2" textLength="61" clip-path="url(#breeze-ci-image-build-line-73)">-push</text><text class="breeze-ci-image-build-r1" x="341.6" y="1801.2" textLength="353.8" clip-pat [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-74)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1825.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-74)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1825.6" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-74)">-prepare</text><text class="breeze-ci-image-build-r4" x="134.2" y="1825.6" textLength="158.6" cli [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-75)">│</text><text class="breeze-ci-image-build-r1" x="341.6" y="1850" textLength="1098" clip-path="url(#breeze-ci-image-build-line-75)">image).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1874.4" textLength="1464" clip-path="url(#breeze-ci-image-build-line-76)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-76)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="1898.8" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-77)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="1898.8" textLength="280.6" clip-path="url(#breeze-ci-image-build-line-77)">&#160;Github&#160;authentication&#160;</text><text class="breeze-ci-image-build-r5" x="305" y="1898.8" textLength="1134.6" clip-path="url(#breeze-ci-image-build-line-77)">───────────────────────────────────────────────────────── [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-78)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1923.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-78)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1923.2" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-78)">-github</text><text class="breeze-ci-image-build-r4" x="122" y="1923.2" textLength="134.2" clip-p [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-79)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1947.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-79)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1947.6" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-79)">-github</text><text class="breeze-ci-image-build-r4" x="122" y="1947.6" textLength="73.2" clip-pa [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1972" textLength="1464" clip-path="url(#breeze-ci-image-build-line-80)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-80)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="1996.4" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-81)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="1996.4" textLength="195.2" clip-path="url(#breeze-ci-image-build-line-81)">&#160;Common&#160;options&#160;</text><text class="breeze-ci-image-build-r5" x="219.6" y="1996.4" textLength="1220" clip-path="url(#breeze-ci-image-build-line-81)">──────────────────────────────────────────────────────────────── [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-82)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="2020.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-82)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="2020.8" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-82)">-verbose</text><text class="breeze-ci-image-build-r6" x="158.6" y="2020.8" textLength="24.4" clip [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-83)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="2045.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-83)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="2045.2" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-83)">-dry</text><text class="breeze-ci-image-build-r4" x="85.4" y="2045.2" textLength="48.8" clip-path [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-84)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="2069.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-84)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="2069.6" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-84)">-answer</text><text class="breeze-ci-image-build-r6" x="158.6" y="2069.6" textLength="24.4" clip- [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-85)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="2094" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-85)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="2094" textLength="61" clip-path="url(#breeze-ci-image-build-line-85)">-help</text><text class="breeze-ci-image-build-r6" x="158.6" y="2094" textLength="24.4" clip-path="url(#b [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2118.4" textLength="1464" clip-path="url(#breeze-ci-image-build-line-86)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-86)">
 </text>
     </g>
     </g>
diff --git a/images/breeze/output_prod-image_build.svg b/images/breeze/output_prod-image_build.svg
index 704bcbb25d..31e599f23d 100644
--- a/images/breeze/output_prod-image_build.svg
+++ b/images/breeze/output_prod-image_build.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2368.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2441.2" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-prod-image-build-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2317.0" />
+      <rect x="0" y="0" width="1463.0" height="2390.2" />
     </clipPath>
     <clipPath id="breeze-prod-image-build-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -327,9 +327,18 @@
 <clipPath id="breeze-prod-image-build-line-93">
     <rect x="0" y="2270.7" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-prod-image-build-line-94">
+    <rect x="0" y="2295.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-prod-image-build-line-95">
+    <rect x="0" y="2319.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-prod-image-build-line-96">
+    <rect x="0" y="2343.9" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2366" rx="8"/><text class="breeze-prod-image-build-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;prod-image&#160;build</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2439.2" rx="8"/><text class="breeze-prod-image-build-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;prod-image&#160;build</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -383,7 +392,7 @@
 </text><text class="breeze-prod-image-build-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-41)">│</text><text class="breeze-prod-image-build-r5" x="463.6" y="1020.4" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-41)">[default:&#160;constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-42)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1044.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-42)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1044.8" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-42)">-airflow</text><text class="breeze-prod-image-build-r4" x="134.2" y="1044.8" textLeng [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-43)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1069.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-43)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1069.2" textLength="85.4" clip-path="url(#breeze-prod-image-build-line-43)">-python</text><text class="breeze-prod-image-build-r4" x="122" y="1069.2" textLength= [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-44)">│</text><text class="breeze-prod-image-build-r1" x="463.6" y="1093.6" textLength="976" clip-path="url(#breeze-prod-image-build-line-44)">something&#160;like:&#160;python:VERSION-slim-bullseye.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-44)">│</text><text class="breeze-prod-image-build-r1" x="463.6" y="1093.6" textLength="976" clip-path="url(#breeze-prod-image-build-line-44)">something&#160;like:&#160;python:VERSION-slim-bookworm.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-45)">│</text><text class="breeze-prod-image-build-r7" x="463.6" y="1118" textLength="976" clip-path="url(#breeze-prod-image-build-line-45)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-46)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1142.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-46)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1142.4" textLength="134.2" clip-path="url(#breeze-prod-image-build-line-46)">-additional</text><text class="breeze-prod-image-build-r4" x="170.8" y="1142.4" text [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-47)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1166.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-47)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1166.8" textLength="134.2" clip-path="url(#breeze-prod-image-build-line-47)">-additional</text><text class="breeze-prod-image-build-r4" x="170.8" y="1166.8" text [...]
@@ -403,37 +412,40 @@
 </text><text class="breeze-prod-image-build-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-61)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1508.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-61)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1508.4" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-61)">-version</text><text class="breeze-prod-image-build-r4" x="134.2" y="1508.4" textLeng [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-62)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1532.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-62)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1532.8" textLength="85.4" clip-path="url(#breeze-prod-image-build-line-62)">-commit</text><text class="breeze-prod-image-build-r4" x="122" y="1532.8" textLength= [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="1557.2" textLength="1464" clip-path="url(#breeze-prod-image-build-line-63)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-63)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1581.6" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-64)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="1581.6" textLength="707.6" clip-path="url(#breeze-prod-image-build-line-64)">&#160;Customization&#160;options&#160;(for&#160;specific&#160;customization&#160;needs)&#160;</text><text class="breeze-prod-image-build-r5" x="732" y="1581.6" textLength="707.6" clip-path="url(#breeze-prod-image-build-l [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-65)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1606" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-65)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1606" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-65)">-install</text><text class="breeze-prod-image-build-r4" x="134.2" y="1606" textLength="268. [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-66)">│</text><text class="breeze-prod-image-build-r1" x="536.8" y="1630.4" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-66)">Implies&#160;</text><text class="breeze-prod-image-build-r4" x="634.4" y="1630.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-66)">-</text><text class="breeze-prod-image-build-r4" x="646.6" y="1630.4" t [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-67)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1654.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-67)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1654.8" textLength="48.8" clip-path="url(#breeze-prod-image-build-line-67)">-use</text><text class="breeze-prod-image-build-r4" x="85.4" y="1654.8" textLength="4 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-68)">│</text><text class="breeze-prod-image-build-r1" x="536.8" y="1679.2" textLength="902.8" clip-path="url(#breeze-prod-image-build-line-68)">constraints&#160;store&#160;in&#160;docker-context-files&#160;or&#160;from&#160;github.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-69)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1703.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-69)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1703.6" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-69)">-cleanup</text><text class="breeze-prod-image-build-r4" x="134.2" y="1703.6" textLeng [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-70)">│</text><text class="breeze-prod-image-build-r1" x="536.8" y="1728" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-70)">together&#160;with&#160;</text><text class="breeze-prod-image-build-r4" x="707.6" y="1728" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-70)">-</text><text class="breeze-prod-image-build-r4" x="719.8" y="172 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-71)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1752.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-71)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1752.4" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-71)">-disable</text><text class="breeze-prod-image-build-r4" x="134.2" y="1752.4" textLeng [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-72)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1776.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-72)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1776.8" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-72)">-disable</text><text class="breeze-prod-image-build-r4" x="134.2" y="1776.8" textLeng [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-73)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1801.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-73)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1801.2" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-73)">-disable</text><text class="breeze-prod-image-build-r4" x="134.2" y="1801.2" textLeng [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-74)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1825.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-74)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1825.6" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-74)">-disable</text><text class="breeze-prod-image-build-r4" x="134.2" y="1825.6" textLeng [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-75)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1850" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-75)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1850" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-75)">-install</text><text class="breeze-prod-image-build-r4" x="134.2" y="1850" textLength="219. [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-76)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1874.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-76)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1874.4" textLength="158.6" clip-path="url(#breeze-prod-image-build-line-76)">-installation</text><text class="breeze-prod-image-build-r4" x="195.2" y="1874.4" te [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1898.8" textLength="1464" clip-path="url(#breeze-prod-image-build-line-77)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-77)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1923.2" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-78)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="1923.2" textLength="622.2" clip-path="url(#breeze-prod-image-build-line-78)">&#160;Preparing&#160;cache&#160;and&#160;push&#160;(for&#160;maintainers&#160;and&#160;CI)&#160;</text><text class="breeze-prod-image-build-r5" x="646.6" y="1923.2" textLength="793" clip-path="url(#breeze-prod-image-buil [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-79)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1947.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-79)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1947.6" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-79)">-builder</text><text class="breeze-prod-image-build-r1" x="341.6" y="1947.6" textLeng [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-80)">│</text><text class="breeze-prod-image-build-r5" x="341.6" y="1972" textLength="756.4" clip-path="url(#breeze-prod-image-build-line-80)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-81)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1996.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-81)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1996.4" textLength="109.8" clip-path="url(#breeze-prod-image-build-line-81)">-platform</text><text class="breeze-prod-image-build-r1" x="341.6" y="1996.4" textLe [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-82)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2020.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-82)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2020.8" textLength="61" clip-path="url(#breeze-prod-image-build-line-82)">-push</text><text class="breeze-prod-image-build-r1" x="341.6" y="2020.8" textLength="3 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-83)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2045.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-83)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2045.2" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-83)">-prepare</text><text class="breeze-prod-image-build-r4" x="134.2" y="2045.2" textLeng [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-84)">│</text><text class="breeze-prod-image-build-r1" x="341.6" y="2069.6" textLength="1098" clip-path="url(#breeze-prod-image-build-line-84)">image).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2094" textLength="1464" clip-path="url(#breeze-prod-image-build-line-85)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-85)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2118.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-86)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2118.4" textLength="280.6" clip-path="url(#breeze-prod-image-build-line-86)">&#160;Github&#160;authentication&#160;</text><text class="breeze-prod-image-build-r5" x="305" y="2118.4" textLength="1134.6" clip-path="url(#breeze-prod-image-build-line-86)">───────────────────────────────────────────── [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-87)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2142.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-87)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2142.8" textLength="85.4" clip-path="url(#breeze-prod-image-build-line-87)">-github</text><text class="breeze-prod-image-build-r4" x="122" y="2142.8" textLength= [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-88)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2167.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-88)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2167.2" textLength="85.4" clip-path="url(#breeze-prod-image-build-line-88)">-github</text><text class="breeze-prod-image-build-r4" x="122" y="2167.2" textLength= [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2191.6" textLength="1464" clip-path="url(#breeze-prod-image-build-line-89)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-89)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2216" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-90)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2216" textLength="195.2" clip-path="url(#breeze-prod-image-build-line-90)">&#160;Common&#160;options&#160;</text><text class="breeze-prod-image-build-r5" x="219.6" y="2216" textLength="1220" clip-path="url(#breeze-prod-image-build-line-90)">────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-91)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2240.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-91)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2240.4" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-91)">-verbose</text><text class="breeze-prod-image-build-r6" x="158.6" y="2240.4" textLeng [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-92)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2264.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-92)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2264.8" textLength="48.8" clip-path="url(#breeze-prod-image-build-line-92)">-dry</text><text class="breeze-prod-image-build-r4" x="85.4" y="2264.8" textLength="4 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-93)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2289.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-93)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2289.2" textLength="61" clip-path="url(#breeze-prod-image-build-line-93)">-help</text><text class="breeze-prod-image-build-r6" x="158.6" y="2289.2" textLength="2 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2313.6" textLength="1464" clip-path="url(#breeze-prod-image-build-line-94)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-94)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1581.6" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-64)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="1581.6" textLength="817.4" clip-path="url(#breeze-prod-image-build-line-64)">&#160;Advanced&#160;customization&#160;options&#160;(for&#160;specific&#160;customization&#160;needs)&#160;</text><text class="breeze-prod-image-build-r5" x="841.8" y="1581.6" textLength="597.8" clip-path="url(#breeze-pr [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-65)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1606" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-65)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1606" textLength="85.4" clip-path="url(#breeze-prod-image-build-line-65)">-debian</text><text class="breeze-prod-image-build-r4" x="122" y="1606" textLength="97.6" c [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-66)">│</text><text class="breeze-prod-image-build-r7" x="536.8" y="1630.4" textLength="793" clip-path="url(#breeze-prod-image-build-line-66)">(bookworm&#160;|&#160;bullseye)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-67)">│</text><text class="breeze-prod-image-build-r5" x="536.8" y="1654.8" textLength="793" clip-path="url(#breeze-prod-image-build-line-67)">[default:&#160;bookworm]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-68)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1679.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-68)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1679.2" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-68)">-install</text><text class="breeze-prod-image-build-r4" x="134.2" y="1679.2" textLeng [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-69)">│</text><text class="breeze-prod-image-build-r1" x="536.8" y="1703.6" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-69)">Implies&#160;</text><text class="breeze-prod-image-build-r4" x="634.4" y="1703.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-69)">-</text><text class="breeze-prod-image-build-r4" x="646.6" y="1703.6" t [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-70)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1728" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-70)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1728" textLength="48.8" clip-path="url(#breeze-prod-image-build-line-70)">-use</text><text class="breeze-prod-image-build-r4" x="85.4" y="1728" textLength="402.6" cl [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-71)">│</text><text class="breeze-prod-image-build-r1" x="536.8" y="1752.4" textLength="902.8" clip-path="url(#breeze-prod-image-build-line-71)">constraints&#160;store&#160;in&#160;docker-context-files&#160;or&#160;from&#160;github.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-prod [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-72)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1776.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-72)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1776.8" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-72)">-cleanup</text><text class="breeze-prod-image-build-r4" x="134.2" y="1776.8" textLeng [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-73)">│</text><text class="breeze-prod-image-build-r1" x="536.8" y="1801.2" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-73)">together&#160;with&#160;</text><text class="breeze-prod-image-build-r4" x="707.6" y="1801.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-73)">-</text><text class="breeze-prod-image-build-r4" x="719.8"  [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-74)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1825.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-74)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1825.6" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-74)">-disable</text><text class="breeze-prod-image-build-r4" x="134.2" y="1825.6" textLeng [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-75)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1850" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-75)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1850" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-75)">-disable</text><text class="breeze-prod-image-build-r4" x="134.2" y="1850" textLength="317. [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-76)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1874.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-76)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1874.4" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-76)">-disable</text><text class="breeze-prod-image-build-r4" x="134.2" y="1874.4" textLeng [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-77)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1898.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-77)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1898.8" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-77)">-disable</text><text class="breeze-prod-image-build-r4" x="134.2" y="1898.8" textLeng [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-78)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1923.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-78)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1923.2" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-78)">-install</text><text class="breeze-prod-image-build-r4" x="134.2" y="1923.2" textLeng [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-79)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1947.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-79)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="1947.6" textLength="158.6" clip-path="url(#breeze-prod-image-build-line-79)">-installation</text><text class="breeze-prod-image-build-r4" x="195.2" y="1947.6" te [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1972" textLength="1464" clip-path="url(#breeze-prod-image-build-line-80)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-80)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1996.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-81)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="1996.4" textLength="622.2" clip-path="url(#breeze-prod-image-build-line-81)">&#160;Preparing&#160;cache&#160;and&#160;push&#160;(for&#160;maintainers&#160;and&#160;CI)&#160;</text><text class="breeze-prod-image-build-r5" x="646.6" y="1996.4" textLength="793" clip-path="url(#breeze-prod-image-buil [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-82)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2020.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-82)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2020.8" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-82)">-builder</text><text class="breeze-prod-image-build-r1" x="341.6" y="2020.8" textLeng [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-83)">│</text><text class="breeze-prod-image-build-r5" x="341.6" y="2045.2" textLength="756.4" clip-path="url(#breeze-prod-image-build-line-83)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-84)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2069.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-84)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2069.6" textLength="109.8" clip-path="url(#breeze-prod-image-build-line-84)">-platform</text><text class="breeze-prod-image-build-r1" x="341.6" y="2069.6" textLe [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-85)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2094" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-85)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2094" textLength="61" clip-path="url(#breeze-prod-image-build-line-85)">-push</text><text class="breeze-prod-image-build-r1" x="341.6" y="2094" textLength="353.8" cl [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-86)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2118.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-86)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2118.4" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-86)">-prepare</text><text class="breeze-prod-image-build-r4" x="134.2" y="2118.4" textLeng [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-87)">│</text><text class="breeze-prod-image-build-r1" x="341.6" y="2142.8" textLength="1098" clip-path="url(#breeze-prod-image-build-line-87)">image).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2167.2" textLength="1464" clip-path="url(#breeze-prod-image-build-line-88)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-88)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2191.6" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-89)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2191.6" textLength="280.6" clip-path="url(#breeze-prod-image-build-line-89)">&#160;Github&#160;authentication&#160;</text><text class="breeze-prod-image-build-r5" x="305" y="2191.6" textLength="1134.6" clip-path="url(#breeze-prod-image-build-line-89)">───────────────────────────────────────────── [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-90)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2216" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-90)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2216" textLength="85.4" clip-path="url(#breeze-prod-image-build-line-90)">-github</text><text class="breeze-prod-image-build-r4" x="122" y="2216" textLength="134.2"  [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-91)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2240.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-91)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2240.4" textLength="85.4" clip-path="url(#breeze-prod-image-build-line-91)">-github</text><text class="breeze-prod-image-build-r4" x="122" y="2240.4" textLength= [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2264.8" textLength="1464" clip-path="url(#breeze-prod-image-build-line-92)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-92)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2289.2" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-93)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2289.2" textLength="195.2" clip-path="url(#breeze-prod-image-build-line-93)">&#160;Common&#160;options&#160;</text><text class="breeze-prod-image-build-r5" x="219.6" y="2289.2" textLength="1220" clip-path="url(#breeze-prod-image-build-line-93)">──────────────────────────────────────────────────── [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-94)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2313.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-94)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2313.6" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-94)">-verbose</text><text class="breeze-prod-image-build-r6" x="158.6" y="2313.6" textLeng [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-95)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2338" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-95)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2338" textLength="48.8" clip-path="url(#breeze-prod-image-build-line-95)">-dry</text><text class="breeze-prod-image-build-r4" x="85.4" y="2338" textLength="48.8" cli [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-96)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2362.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-96)">-</text><text class="breeze-prod-image-build-r4" x="36.6" y="2362.4" textLength="61" clip-path="url(#breeze-prod-image-build-line-96)">-help</text><text class="breeze-prod-image-build-r6" x="158.6" y="2362.4" textLength="2 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2386.8" textLength="1464" clip-path="url(#breeze-prod-image-build-line-97)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2386.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-97)">
 </text>
     </g>
     </g>
diff --git a/images/breeze/output_setup_config.svg b/images/breeze/output_setup_config.svg
index 9e4fdfc65e..28514c9dbc 100644
--- a/images/breeze/output_setup_config.svg
+++ b/images/breeze/output_setup_config.svg
@@ -141,7 +141,7 @@
 </text><text class="breeze-setup-config-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-12)">│</text><text class="breeze-setup-config-r7" x="475.8" y="312.8" textLength="963.8" clip-path="url(#breeze-setup-config-line-12)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;mssql&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
 </text><text class="breeze-setup-config-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-13)">│</text><text class="breeze-setup-config-r5" x="475.8" y="337.2" textLength="963.8" clip-path="url(#breeze-setup-config-line-13)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
 </text><text class="breeze-setup-config-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-14)">│</text><text class="breeze-setup-config-r4" x="24.4" y="361.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-14)">-</text><text class="breeze-setup-config-r4" x="36.6" y="361.6" textLength="109.8" clip-path="url(#breeze-setup-config-line-14)">-postgres</text><text class="breeze-setup-config-r4" x="146.4" y="361.6" textLength="97.6" clip-path="url(#bree [...]
-</text><text class="breeze-setup-config-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-setup-config-line-15)">│</text><text class="breeze-setup-config-r4" x="24.4" y="386" textLength="12.2" clip-path="url(#breeze-setup-config-line-15)">-</text><text class="breeze-setup-config-r4" x="36.6" y="386" textLength="73.2" clip-path="url(#breeze-setup-config-line-15)">-mysql</text><text class="breeze-setup-config-r4" x="109.8" y="386" textLength="97.6" clip-path="url(#breeze-setup-con [...]
+</text><text class="breeze-setup-config-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-setup-config-line-15)">│</text><text class="breeze-setup-config-r4" x="24.4" y="386" textLength="12.2" clip-path="url(#breeze-setup-config-line-15)">-</text><text class="breeze-setup-config-r4" x="36.6" y="386" textLength="73.2" clip-path="url(#breeze-setup-config-line-15)">-mysql</text><text class="breeze-setup-config-r4" x="109.8" y="386" textLength="97.6" clip-path="url(#breeze-setup-con [...]
 </text><text class="breeze-setup-config-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-16)">│</text><text class="breeze-setup-config-r4" x="24.4" y="410.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-16)">-</text><text class="breeze-setup-config-r4" x="36.6" y="410.4" textLength="73.2" clip-path="url(#breeze-setup-config-line-16)">-mssql</text><text class="breeze-setup-config-r4" x="109.8" y="410.4" textLength="97.6" clip-path="url(#breeze-s [...]
 </text><text class="breeze-setup-config-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-17)">│</text><text class="breeze-setup-config-r4" x="24.4" y="434.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-17)">-</text><text class="breeze-setup-config-r4" x="36.6" y="434.8" textLength="134.2" clip-path="url(#breeze-setup-config-line-17)">-cheatsheet</text><text class="breeze-setup-config-r1" x="170.8" y="434.8" textLength="12.2" clip-path="url(#br [...]
 </text><text class="breeze-setup-config-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-18)">│</text><text class="breeze-setup-config-r4" x="24.4" y="459.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-18)">-</text><text class="breeze-setup-config-r4" x="36.6" y="459.2" textLength="109.8" clip-path="url(#breeze-setup-config-line-18)">-asciiart</text><text class="breeze-setup-config-r1" x="146.4" y="459.2" textLength="12.2" clip-path="url(#bree [...]
diff --git a/images/breeze/output_shell.svg b/images/breeze/output_shell.svg
index 963f4a1fb6..6cd722a070 100644
--- a/images/breeze/output_shell.svg
+++ b/images/breeze/output_shell.svg
@@ -321,7 +321,7 @@
 </text><text class="breeze-shell-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-shell-line-18)">│</text><text class="breeze-shell-r7" x="317.2" y="459.2" textLength="1122.4" clip-path="url(#breeze-shell-line-18)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;mssql&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
 </text><text class="breeze-shell-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-shell-line-19)">│</text><text class="breeze-shell-r5" x="317.2" y="483.6" textLength="1122.4" clip-path="url(#breeze-shell-line-19)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
 </text><text class="breeze-shell-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-shell-line-20)">│</text><text class="breeze-shell-r4" x="24.4" y="508" textLength="12.2" clip-path="url(#breeze-shell-line-20)">-</text><text class="breeze-shell-r4" x="36.6" y="508" textLength="109.8" clip-path="url(#breeze-shell-line-20)">-postgres</text><text class="breeze-shell-r4" x="146.4" y="508" textLength="97.6" clip-path="url(#breeze-shell-line-20)">-version</text><text class="breeze-she [...]
-</text><text class="breeze-shell-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-shell-line-21)">│</text><text class="breeze-shell-r4" x="24.4" y="532.4" textLength="12.2" clip-path="url(#breeze-shell-line-21)">-</text><text class="breeze-shell-r4" x="36.6" y="532.4" textLength="73.2" clip-path="url(#breeze-shell-line-21)">-mysql</text><text class="breeze-shell-r4" x="109.8" y="532.4" textLength="97.6" clip-path="url(#breeze-shell-line-21)">-version</text><text class="breeze [...]
+</text><text class="breeze-shell-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-shell-line-21)">│</text><text class="breeze-shell-r4" x="24.4" y="532.4" textLength="12.2" clip-path="url(#breeze-shell-line-21)">-</text><text class="breeze-shell-r4" x="36.6" y="532.4" textLength="73.2" clip-path="url(#breeze-shell-line-21)">-mysql</text><text class="breeze-shell-r4" x="109.8" y="532.4" textLength="97.6" clip-path="url(#breeze-shell-line-21)">-version</text><text class="breeze [...]
 </text><text class="breeze-shell-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-shell-line-22)">│</text><text class="breeze-shell-r4" x="24.4" y="556.8" textLength="12.2" clip-path="url(#breeze-shell-line-22)">-</text><text class="breeze-shell-r4" x="36.6" y="556.8" textLength="73.2" clip-path="url(#breeze-shell-line-22)">-mssql</text><text class="breeze-shell-r4" x="109.8" y="556.8" textLength="97.6" clip-path="url(#breeze-shell-line-22)">-version</text><text class="breeze [...]
 </text><text class="breeze-shell-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-shell-line-23)">│</text><text class="breeze-shell-r4" x="24.4" y="581.2" textLength="12.2" clip-path="url(#breeze-shell-line-23)">-</text><text class="breeze-shell-r4" x="36.6" y="581.2" textLength="36.6" clip-path="url(#breeze-shell-line-23)">-db</text><text class="breeze-shell-r4" x="73.2" y="581.2" textLength="73.2" clip-path="url(#breeze-shell-line-23)">-reset</text><text class="breeze-shell [...]
 </text><text class="breeze-shell-r5" x="0" y="605.6" textLength="1464" clip-path="url(#breeze-shell-line-24)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-shell-line-24)">
diff --git a/images/breeze/output_start-airflow.svg b/images/breeze/output_start-airflow.svg
index 6760030561..92e09d60ff 100644
--- a/images/breeze/output_start-airflow.svg
+++ b/images/breeze/output_start-airflow.svg
@@ -307,7 +307,7 @@
 </text><text class="breeze-start-airflow-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-22)">│</text><text class="breeze-start-airflow-r7" x="317.2" y="556.8" textLength="1122.4" clip-path="url(#breeze-start-airflow-line-22)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;mssql&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-23)">│</text><text class="breeze-start-airflow-r5" x="317.2" y="581.2" textLength="1122.4" clip-path="url(#breeze-start-airflow-line-23)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-24)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="605.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-24)">-</text><text class="breeze-start-airflow-r4" x="36.6" y="605.6" textLength="109.8" clip-path="url(#breeze-start-airflow-line-24)">-postgres</text><text class="breeze-start-airflow-r4" x="146.4" y="605.6" textLength="97.6" clip-path="ur [...]
-</text><text class="breeze-start-airflow-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-start-airflow-line-25)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="630" textLength="12.2" clip-path="url(#breeze-start-airflow-line-25)">-</text><text class="breeze-start-airflow-r4" x="36.6" y="630" textLength="73.2" clip-path="url(#breeze-start-airflow-line-25)">-mysql</text><text class="breeze-start-airflow-r4" x="109.8" y="630" textLength="97.6" clip-path="url(#breeze-st [...]
+</text><text class="breeze-start-airflow-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-start-airflow-line-25)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="630" textLength="12.2" clip-path="url(#breeze-start-airflow-line-25)">-</text><text class="breeze-start-airflow-r4" x="36.6" y="630" textLength="73.2" clip-path="url(#breeze-start-airflow-line-25)">-mysql</text><text class="breeze-start-airflow-r4" x="109.8" y="630" textLength="97.6" clip-path="url(#breeze-st [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-26)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="654.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-26)">-</text><text class="breeze-start-airflow-r4" x="36.6" y="654.4" textLength="73.2" clip-path="url(#breeze-start-airflow-line-26)">-mssql</text><text class="breeze-start-airflow-r4" x="109.8" y="654.4" textLength="97.6" clip-path="url(#b [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-27)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="678.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-27)">-</text><text class="breeze-start-airflow-r4" x="36.6" y="678.8" textLength="36.6" clip-path="url(#breeze-start-airflow-line-27)">-db</text><text class="breeze-start-airflow-r4" x="73.2" y="678.8" textLength="73.2" clip-path="url(#breez [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="703.2" textLength="1464" clip-path="url(#breeze-start-airflow-line-28)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-start-airflow-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-28)">
diff --git a/images/breeze/output_testing_db-tests.svg b/images/breeze/output_testing_db-tests.svg
index 0eb042217b..d6b3ca52cf 100644
--- a/images/breeze/output_testing_db-tests.svg
+++ b/images/breeze/output_testing_db-tests.svg
@@ -304,7 +304,7 @@
 </text><text class="breeze-testing-db-tests-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-34)">│</text><text class="breeze-testing-db-tests-r4" x="24.4" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-34)">-</text><text class="breeze-testing-db-tests-r4" x="36.6" y="849.6" textLength="85.4" clip-path="url(#breeze-testing-db-tests-line-34)">-python</text><text class="breeze-testing-db-tests-r7" x="268.4" y="849.6" textLength="2 [...]
 </text><text class="breeze-testing-db-tests-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-35)">│</text><text class="breeze-testing-db-tests-r5" x="317.2" y="874" textLength="732" clip-path="url(#breeze-testing-db-tests-line-35)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
 </text><text class="breeze-testing-db-tests-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-36)">│</text><text class="breeze-testing-db-tests-r4" x="24.4" y="898.4" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-36)">-</text><text class="breeze-testing-db-tests-r4" x="36.6" y="898.4" textLength="109.8" clip-path="url(#breeze-testing-db-tests-line-36)">-postgres</text><text class="breeze-testing-db-tests-r4" x="146.4" y="898.4" textLength [...]
-</text><text class="breeze-testing-db-tests-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-37)">│</text><text class="breeze-testing-db-tests-r4" x="24.4" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-37)">-</text><text class="breeze-testing-db-tests-r4" x="36.6" y="922.8" textLength="73.2" clip-path="url(#breeze-testing-db-tests-line-37)">-mysql</text><text class="breeze-testing-db-tests-r4" x="109.8" y="922.8" textLength="97 [...]
+</text><text class="breeze-testing-db-tests-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-37)">│</text><text class="breeze-testing-db-tests-r4" x="24.4" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-37)">-</text><text class="breeze-testing-db-tests-r4" x="36.6" y="922.8" textLength="73.2" clip-path="url(#breeze-testing-db-tests-line-37)">-mysql</text><text class="breeze-testing-db-tests-r4" x="109.8" y="922.8" textLength="97 [...]
 </text><text class="breeze-testing-db-tests-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-38)">│</text><text class="breeze-testing-db-tests-r4" x="24.4" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-38)">-</text><text class="breeze-testing-db-tests-r4" x="36.6" y="947.2" textLength="73.2" clip-path="url(#breeze-testing-db-tests-line-38)">-mssql</text><text class="breeze-testing-db-tests-r4" x="109.8" y="947.2" textLength="97 [...]
 </text><text class="breeze-testing-db-tests-r5" x="0" y="971.6" textLength="1464" clip-path="url(#breeze-testing-db-tests-line-39)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-db-tests-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-39)">
 </text><text class="breeze-testing-db-tests-r5" x="0" y="996" textLength="24.4" clip-path="url(#breeze-testing-db-tests-line-40)">╭─</text><text class="breeze-testing-db-tests-r5" x="24.4" y="996" textLength="439.2" clip-path="url(#breeze-testing-db-tests-line-40)">&#160;Options&#160;for&#160;parallel&#160;test&#160;commands&#160;</text><text class="breeze-testing-db-tests-r5" x="463.6" y="996" textLength="976" clip-path="url(#breeze-testing-db-tests-line-40)">─────────────────────────── [...]
diff --git a/images/breeze/output_testing_integration-tests.svg b/images/breeze/output_testing_integration-tests.svg
index aeb9a5ac8c..9b95fc43e5 100644
--- a/images/breeze/output_testing_integration-tests.svg
+++ b/images/breeze/output_testing_integration-tests.svg
@@ -201,7 +201,7 @@
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-21)">│</text><text class="breeze-testing-integration-tests-r4" x="24.4" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-21)">-</text><text class="breeze-testing-integration-tests-r4" x="36.6" y="532.4" textLength="85.4" clip-path="url(#breeze-testing-integration-tests-line-21)">-python</text><text class="breeze- [...]
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-22)">│</text><text class="breeze-testing-integration-tests-r5" x="317.2" y="556.8" textLength="732" clip-path="url(#breeze-testing-integration-tests-line-22)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-23)">│</text><text class="breeze-testing-integration-tests-r4" x="24.4" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-23)">-</text><text class="breeze-testing-integration-tests-r4" x="36.6" y="581.2" textLength="109.8" clip-path="url(#breeze-testing-integration-tests-line-23)">-postgres</text><text class="bree [...]
-</text><text class="breeze-testing-integration-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-24)">│</text><text class="breeze-testing-integration-tests-r4" x="24.4" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-24)">-</text><text class="breeze-testing-integration-tests-r4" x="36.6" y="605.6" textLength="73.2" clip-path="url(#breeze-testing-integration-tests-line-24)">-mysql</text><text class="breeze-t [...]
+</text><text class="breeze-testing-integration-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-24)">│</text><text class="breeze-testing-integration-tests-r4" x="24.4" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-24)">-</text><text class="breeze-testing-integration-tests-r4" x="36.6" y="605.6" textLength="73.2" clip-path="url(#breeze-testing-integration-tests-line-24)">-mysql</text><text class="breeze-t [...]
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-25)">│</text><text class="breeze-testing-integration-tests-r4" x="24.4" y="630" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-25)">-</text><text class="breeze-testing-integration-tests-r4" x="36.6" y="630" textLength="73.2" clip-path="url(#breeze-testing-integration-tests-line-25)">-mssql</text><text class="breeze-testing [...]
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="654.4" textLength="1464" clip-path="url(#breeze-testing-integration-tests-line-26)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-integration-tests-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-26)">
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="678.8" textLength="24.4" clip-path="url(#breeze-testing-integration-tests-line-27)">╭─</text><text class="breeze-testing-integration-tests-r5" x="24.4" y="678.8" textLength="549" clip-path="url(#breeze-testing-integration-tests-line-27)">&#160;Advanced&#160;flag&#160;for&#160;integration&#160;tests&#160;command&#160;</text><text class="breeze-testing-integration-tests-r5" x="573.4" y="678.8" textLength="866.2" clip-path="u [...]
diff --git a/images/breeze/output_testing_tests.svg b/images/breeze/output_testing_tests.svg
index 1bd6fc3abc..f15ef8c338 100644
--- a/images/breeze/output_testing_tests.svg
+++ b/images/breeze/output_testing_tests.svg
@@ -370,7 +370,7 @@
 </text><text class="breeze-testing-tests-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-testing-tests-line-49)">│</text><text class="breeze-testing-tests-r4" x="24.4" y="1215.6" textLength="12.2" clip-path="url(#breeze-testing-tests-line-49)">-</text><text class="breeze-testing-tests-r4" x="36.6" y="1215.6" textLength="85.4" clip-path="url(#breeze-testing-tests-line-49)">-python</text><text class="breeze-testing-tests-r6" x="268.4" y="1215.6" textLength="24.4" clip-path="u [...]
 </text><text class="breeze-testing-tests-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-testing-tests-line-50)">│</text><text class="breeze-testing-tests-r5" x="317.2" y="1240" textLength="732" clip-path="url(#breeze-testing-tests-line-50)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
 </text><text class="breeze-testing-tests-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-testing-tests-line-51)">│</text><text class="breeze-testing-tests-r4" x="24.4" y="1264.4" textLength="12.2" clip-path="url(#breeze-testing-tests-line-51)">-</text><text class="breeze-testing-tests-r4" x="36.6" y="1264.4" textLength="109.8" clip-path="url(#breeze-testing-tests-line-51)">-postgres</text><text class="breeze-testing-tests-r4" x="146.4" y="1264.4" textLength="97.6" clip-path [...]
-</text><text class="breeze-testing-tests-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-testing-tests-line-52)">│</text><text class="breeze-testing-tests-r4" x="24.4" y="1288.8" textLength="12.2" clip-path="url(#breeze-testing-tests-line-52)">-</text><text class="breeze-testing-tests-r4" x="36.6" y="1288.8" textLength="73.2" clip-path="url(#breeze-testing-tests-line-52)">-mysql</text><text class="breeze-testing-tests-r4" x="109.8" y="1288.8" textLength="97.6" clip-path="ur [...]
+</text><text class="breeze-testing-tests-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-testing-tests-line-52)">│</text><text class="breeze-testing-tests-r4" x="24.4" y="1288.8" textLength="12.2" clip-path="url(#breeze-testing-tests-line-52)">-</text><text class="breeze-testing-tests-r4" x="36.6" y="1288.8" textLength="73.2" clip-path="url(#breeze-testing-tests-line-52)">-mysql</text><text class="breeze-testing-tests-r4" x="109.8" y="1288.8" textLength="97.6" clip-path="ur [...]
 </text><text class="breeze-testing-tests-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-testing-tests-line-53)">│</text><text class="breeze-testing-tests-r4" x="24.4" y="1313.2" textLength="12.2" clip-path="url(#breeze-testing-tests-line-53)">-</text><text class="breeze-testing-tests-r4" x="36.6" y="1313.2" textLength="73.2" clip-path="url(#breeze-testing-tests-line-53)">-mssql</text><text class="breeze-testing-tests-r4" x="109.8" y="1313.2" textLength="97.6" clip-path="ur [...]
 </text><text class="breeze-testing-tests-r5" x="0" y="1337.6" textLength="1464" clip-path="url(#breeze-testing-tests-line-54)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-tests-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-testing-tests-line-54)">
 </text><text class="breeze-testing-tests-r5" x="0" y="1362" textLength="24.4" clip-path="url(#breeze-testing-tests-line-55)">╭─</text><text class="breeze-testing-tests-r5" x="24.4" y="1362" textLength="439.2" clip-path="url(#breeze-testing-tests-line-55)">&#160;Options&#160;for&#160;parallel&#160;test&#160;commands&#160;</text><text class="breeze-testing-tests-r5" x="463.6" y="1362" textLength="976" clip-path="url(#breeze-testing-tests-line-55)">────────────────────────────────────────── [...]
diff --git a/scripts/docker/install_mssql.sh b/scripts/docker/install_mssql.sh
index 333c75788b..248ca68307 100644
--- a/scripts/docker/install_mssql.sh
+++ b/scripts/docker/install_mssql.sh
@@ -48,6 +48,7 @@ function install_mssql_client() {
     distro=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
     version=$(lsb_release -rs)
     local driver=msodbcsql18
+    curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
     curl --silent https://packages.microsoft.com/keys/microsoft.asc | apt-key add - >/dev/null 2>&1
     curl --silent "https://packages.microsoft.com/config/${distro}/${version}/prod.list" > \
         /etc/apt/sources.list.d/mssql-release.list
diff --git a/scripts/docker/install_os_dependencies.sh b/scripts/docker/install_os_dependencies.sh
index 5a32387ab1..cb6cb692fb 100644
--- a/scripts/docker/install_os_dependencies.sh
+++ b/scripts/docker/install_os_dependencies.sh
@@ -46,11 +46,27 @@ software-properties-common sqlite3 sudo unixodbc unixodbc-dev"
 }
 
 function get_runtime_apt_deps() {
+    local debian_version
+    local debian_version_apt_deps
+    # Get debian version without installing lsb_release
+    # shellcheck disable=SC1091
+    debian_version=$(. /etc/os-release;   printf '%s\n' "$VERSION_CODENAME";)
+    echo
+    echo "DEBIAN CODENAME: ${debian_version}"
+    echo
+    if [[ "${debian_version}" == "bullseye" ]]; then
+        debian_version_apt_deps="libffi7 libldap-2.4-2 libssl1.1 netcat"
+    else
+        debian_version_apt_deps="libffi8 libldap-2.5-0 libssl3 netcat-openbsd"
+    fi
+    echo
+    echo "APPLIED INSTALLATION CONFIGURATION FOR DEBIAN VERSION: ${debian_version}"
+    echo
     if [[ "${RUNTIME_APT_DEPS=}" == "" ]]; then
         RUNTIME_APT_DEPS="apt-transport-https apt-utils ca-certificates \
 curl dumb-init freetds-bin gosu krb5-user libgeos-dev \
-ldap-utils libffi7 libldap-2.4-2 libsasl2-2 libsasl2-modules libssl1.1 locales \
-lsb-release netcat openssh-client python3-selinux rsync sasl2-bin sqlite3 sudo unixodbc"
+ldap-utils libsasl2-2 libsasl2-modules locales ${debian_version_apt_deps} \
+lsb-release openssh-client python3-selinux rsync sasl2-bin sqlite3 sudo unixodbc"
         export RUNTIME_APT_DEPS
     fi
 }
@@ -80,6 +96,27 @@ function install_debian_dev_dependencies() {
         bash -o pipefail -o errexit -o nounset -o nolog -c "${ADDITIONAL_DEV_APT_COMMAND}"
     fi
     apt-get update
+    local debian_version
+    local debian_version_apt_deps
+    # Get debian version without installing lsb_release
+    # shellcheck disable=SC1091
+    debian_version=$(. /etc/os-release;   printf '%s\n' "$VERSION_CODENAME";)
+    echo
+    echo "DEBIAN CODENAME: ${debian_version}"
+    echo
+    if [[ "${debian_version}" == "bullseye" ]]; then
+        echo
+        echo "Bullseye detected - replacing dependencies in additional dev apt deps"
+        echo
+        # Replace dependencies in additional dev apt deps to be compatible with Bullseye
+        ADDITIONAL_DEV_APT_DEPS=${ADDITIONAL_DEV_APT_DEPS//libgcc-11-dev/libgcc-10-dev}
+        ADDITIONAL_DEV_APT_DEPS=${ADDITIONAL_DEV_APT_DEPS//netcat-openbsd/netcat}
+        echo
+        echo "Replaced bullseye dev apt dependencies"
+        echo "${ADDITIONAL_DEV_APT_COMMAND}"
+        echo
+    fi
+
     # shellcheck disable=SC2086
     apt-get install -y --no-install-recommends ${DEV_APT_DEPS} ${ADDITIONAL_DEV_APT_DEPS}
 }
diff --git a/tests/system/providers/docker/example_taskflow_api_docker_virtualenv.py b/tests/system/providers/docker/example_taskflow_api_docker_virtualenv.py
index bee2d05581..95c502a221 100644
--- a/tests/system/providers/docker/example_taskflow_api_docker_virtualenv.py
+++ b/tests/system/providers/docker/example_taskflow_api_docker_virtualenv.py
@@ -65,7 +65,7 @@ def tutorial_taskflow_api_docker_virtualenv():
     # [END extract_virtualenv]
 
     # [START transform_docker]
-    @task.docker(image="python:3.9-slim-bullseye", multiple_outputs=True)
+    @task.docker(image="python:3.9-slim-bookworm", multiple_outputs=True)
     def transform(order_data_dict: dict):
         """
         #### Transform task