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

potiuk pushed a commit to branch v2-8-test
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit aef7a8538fed969a5a3bfd1bff4acd69954a8c16
Author: Jarek Potiuk <[email protected]>
AuthorDate: Fri Dec 15 19:13:00 2023 +0100

    Change default MySQL client to MariaDB (#36243)
    
    This PR is a response to pretty catastrophic issue caused by expiring
    key on MySQL repository on 14th of December. Oracle does not follow the
    best practices for signing their packages (while all others do) and
    their packages and repositories are signed with a key with short
    expiry date. This basically puts an expiry on their repository, and
    anyone who releases images following best practices of installation,
    while keeping the repository after installing mysql libraries has to
    rebuild their past released images every 2 years or so.
    
    This is the last straw for our MySQL client installation problems (we
    had a few, especially for ARM images) and we decided that we will
    switch to MariaDB client libraries by default (while allowing our
    users to build custom images with MySQL libraries).
    
    The issue tracked in Airflow repository is: #36231
    
    The issues in Oracle's MySQL repo:
    
    * https://bugs.mysql.com/bug.php?id=113427
    * https://bugs.mysql.com/bug.php?id=113428
    * https://bugs.mysql.com/bug.php?id=113432
    
    This PR implements a number of changes:
    
    * MariaDB client is now default client used for both ARM and X86
    * both pre-2023 and 2023 keys for MySQL are now added to be trusted
      when custom image with MySQL client is built
    * MySQL repository is removed after installing MySQL (to avoid
      repeating similar fiasco for MySQL users in 2025
    * changelog added and instructions on how to build custom image
      with MySQL client
    * one of our test suites is converted to use "current" image not
      latest released image (that was bug in our CI).
    * test was added in `canary` and `release` builds in CI to also test
      build of custom image with MySQL client
    
    (cherry picked from commit 8a7bea2d8a4a059c6adea78039b0a2443d76afff)
---
 .github/workflows/ci.yml                           | 176 ++++++++++++++++++---
 CI_DIAGRAMS.md                                     |  12 +-
 Dockerfile                                         |  16 +-
 Dockerfile.ci                                      |  14 +-
 .../airflow_breeze/commands/ci_image_commands.py   |   4 +
 .../commands/ci_image_commands_config.py           |  13 +-
 .../commands/common_image_options.py               |   8 +
 .../commands/production_image_commands.py          |   4 +
 .../commands/production_image_commands_config.py   |   1 +
 dev/breeze/src/airflow_breeze/global_constants.py  |   2 +
 .../src/airflow_breeze/params/build_ci_params.py   |  11 +-
 .../src/airflow_breeze/params/build_prod_params.py |  11 +-
 .../airflow_breeze/params/common_build_params.py   |   2 +
 .../test_examples_of_prod_image_building.py        |  11 +-
 docs/docker-stack/build-arg-ref.rst                |   8 +-
 docs/docker-stack/build.rst                        |  17 ++
 docs/docker-stack/changelog.rst                    |  35 ++--
 .../docker-examples/customizing/mysql-client.sh    |  37 +++++
 .../extending/add-providers/Dockerfile             |   4 +-
 images/breeze/output_ci-image_build.svg            | 136 ++++++++--------
 images/breeze/output_ci-image_build.txt            |   2 +-
 images/breeze/output_prod-image_build.svg          |  64 ++++----
 images/breeze/output_prod-image_build.txt          |   2 +-
 scripts/docker/install_mysql.sh                    |  14 +-
 24 files changed, 430 insertions(+), 174 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1b500e4745..69be39ece8 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -395,32 +395,6 @@ jobs:
       - name: "Generate client codegen diff"
         run: ./scripts/ci/openapi/client_codegen_diff.sh
 
-  test-examples-of-prod-image-building:
-    timeout-minutes: 60
-    name: "Test examples of production image building"
-    runs-on: ${{fromJSON(needs.build-info.outputs.runs-on)}}
-    needs: [build-info]
-    if: needs.build-info.outputs.ci-image-build == 'true'
-    steps:
-      - name: Cleanup repo
-        run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm 
-rf /workspace/*"
-      - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
-        uses: actions/checkout@v4
-        with:
-          fetch-depth: 2
-          persist-credentials: false
-      - name: "Setup python"
-        uses: actions/setup-python@v4
-        with:
-          python-version: 
"${{needs.build-info.outputs.default-python-version}}"
-          cache: 'pip'
-          cache-dependency-path: ./dev/requirements.txt
-      - name: "Test examples of PROD image building"
-        run: >
-          cd ./docker_tests &&
-          python -m pip install -r requirements.txt &&
-          python -m pytest test_examples_of_prod_image_building.py -n auto 
--color=yes
-
   test-git-clone-on-windows:
     timeout-minutes: 5
     name: "Test git clone on Windows"
@@ -1721,6 +1695,63 @@ jobs:
           # TODO: improve caching for that build
           IMAGE_TAG: "bullseye-${{ github.event.pull_request.head.sha || 
github.sha }}"
 
+  build-prod-images-mysql-client:
+    timeout-minutes: 80
+    name: >
+      Build MysQL Client PROD images (main)
+      ${{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]
+    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
+      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/*"
+        if: >
+          needs.build-info.outputs.in-workflow-build == 'true' &&
+          needs.build-info.outputs.default-branch == 'main'
+      - uses: actions/checkout@v3
+        with:
+          ref: ${{ needs.build-info.outputs.targetCommitSha }}
+          persist-credentials: false
+          submodules: recursive
+        if: >
+          needs.build-info.outputs.in-workflow-build == 'true' &&
+          needs.build-info.outputs.default-branch == 'main'
+      - name: "Install Breeze"
+        uses: ./.github/actions/breeze
+        if: >
+          needs.build-info.outputs.in-workflow-build == 'true' &&
+          needs.build-info.outputs.default-branch == 'main'
+      - name: >
+          Build Bullseye PROD Images
+          
${{needs.build-info.outputs.all-python-versions-list-as-string}}:${{env.IMAGE_TAG}}
+        uses: ./.github/actions/build-prod-images
+        if: >
+          needs.build-info.outputs.in-workflow-build == 'true' &&
+          needs.build-info.outputs.default-branch == 'main'
+        with:
+          build-provider-packages: ${{ needs.build-info.outputs.default-branch 
== 'main' }}
+          chicken-egg-providers: ${{ 
needs.build-info.outputs.chicken-egg-providers }}
+        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 }}
+          INSTALL_MYSQL_CLIENT_TYPE: "mysql"
+          # Do not override the "mariadb" (original) image - just push a new 
mysql image
+          # TODO: improve caching for that build
+          IMAGE_TAG: "bullseye-${{ github.event.pull_request.head.sha || 
github.sha }}"
+
+
   build-prod-images-release-branch:
     timeout-minutes: 80
     name: >
@@ -1827,6 +1858,62 @@ jobs:
           # TODO: improve caching for that build
           IMAGE_TAG: "bullseye-${{ github.event.pull_request.head.sha || 
github.sha }}"
 
+  build-prod-images-mysql-release-branch:
+    timeout-minutes: 80
+    name: >
+      Build MySQL PROD images (v2_*_test)
+      ${{needs.build-info.outputs.all-python-versions-list-as-string}}
+    runs-on: ${{fromJSON(needs.build-info.outputs.runs-on)}}
+    needs: [build-info, 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
+      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/*"
+        if: >
+          needs.build-info.outputs.in-workflow-build == 'true' &&
+          needs.build-info.outputs.default-branch != 'main'
+      - uses: actions/checkout@v3
+        with:
+          ref: ${{ needs.build-info.outputs.targetCommitSha }}
+          persist-credentials: false
+          submodules: recursive
+        if: >
+          needs.build-info.outputs.in-workflow-build == 'true' &&
+          needs.build-info.outputs.default-branch != 'main'
+      - name: "Install Breeze"
+        uses: ./.github/actions/breeze
+        if: >
+          needs.build-info.outputs.in-workflow-build == 'true' &&
+          needs.build-info.outputs.default-branch != 'main'
+      - name: >
+          Build Bullseye PROD Images
+          
${{needs.build-info.outputs.all-python-versions-list-as-string}}:${{env.IMAGE_TAG}}
+        uses: ./.github/actions/build-prod-images
+        if: >
+          needs.build-info.outputs.in-workflow-build == 'true' &&
+          needs.build-info.outputs.default-branch != 'main'
+        with:
+          build-provider-packages: ${{ needs.build-info.outputs.default-branch 
== 'main' }}
+          chicken-egg-providers: ${{ 
needs.build-info.outputs.chicken-egg-providers }}
+        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 }}
+          INSTALL_MYSQL_CLIENT_TYPE: "mysql"
+          # Do not override the "mariadb" image - just push a new mysql image
+          # TODO: improve caching for that build
+          IMAGE_TAG: "mysql-${{ github.event.pull_request.head.sha || 
github.sha }}"
+
   wait-for-prod-images:
     timeout-minutes: 80
     name: "Wait for PROD images"
@@ -1862,6 +1949,43 @@ jobs:
           DEBUG_RESOURCES: ${{needs.build-info.outputs.debug-resources}}
         if: needs.build-info.outputs.in-workflow-build == 'false'
 
+  test-examples-of-prod-image-building:
+    timeout-minutes: 60
+    name: "Test examples of production image building"
+    runs-on: ${{fromJSON(needs.build-info.outputs.runs-on)}}
+    needs: [build-info, wait-for-prod-images]
+    if: needs.build-info.outputs.prod-image-build == 'true'
+    steps:
+      - name: Cleanup repo
+        run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm 
-rf /workspace/*"
+      - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
+        uses: actions/checkout@v4
+        with:
+          fetch-depth: 2
+          persist-credentials: false
+      - name: "Install Breeze"
+        uses: ./.github/actions/breeze
+      - name: Pull PROD image 
"${{needs.build-info.outputs.default-python-version}}":${{ env.IMAGE_TAG }}
+        run: breeze prod-image pull --tag-as-latest
+        env:
+          PYTHON_MAJOR_MINOR_VERSION: 
"${{needs.build-info.outputs.default-python-version}}"
+      - name: "Setup python"
+        uses: actions/setup-python@v4
+        with:
+          python-version: ${{needs.build-info.outputs.default-python-version}}
+          cache: 'pip'
+          cache-dependency-path: ./dev/requirements.txt
+      - name: "Test examples of PROD image building"
+        # yamllint disable-line rule:line-length
+        run: >
+          cd ./docker_tests &&
+          python -m pip install -r requirements.txt &&
+          
TEST_IMAGE="ghcr.io/${GITHUB_REPOSITORY}/main/prod/python${{env.PYTHON_MAJOR_MINOR_VERSION}}:${{env.IMAGE_TAG}}"
+          python -m pytest test_examples_of_prod_image_building.py -n auto 
--color=yes
+        env:
+          PYTHON_MAJOR_MINOR_VERSION: 
"${{needs.build-info.outputs.default-python-version}}"
+
+
   test-docker-compose-quick-start:
     timeout-minutes: 60
     name: "Verify PROD image and docker-compose quick start"
diff --git a/CI_DIAGRAMS.md b/CI_DIAGRAMS.md
index 612fafe34a..cbd1d54d88 100644
--- a/CI_DIAGRAMS.md
+++ b/CI_DIAGRAMS.md
@@ -60,8 +60,6 @@ sequenceDiagram
         Note over Tests: OpenAPI client gen
     and
         Note over Tests: React WWW tests
-    and
-        Note over Tests: Test examples<br>PROD image building
     and
         Note over Tests: Test git clone on Windows
     and
@@ -152,6 +150,11 @@ sequenceDiagram
         end
     end
     par
+        opt
+            GitHub Registry ->> Tests: Pull PROD Images<br>[COMMIT_SHA]
+            Note over Tests: Test examples<br>PROD image building
+        end
+    and
         opt
             GitHub Registry ->> Tests: Pull PROD Images<br>[COMMIT_SHA]
             Note over Tests: Run Kubernetes <br>tests
@@ -343,8 +346,6 @@ sequenceDiagram
         Note over Tests: OpenAPI client gen
     and
         Note over Tests: React WWW tests
-    and
-        Note over Tests: Test examples<br>PROD image building
     and
         Note over Tests: Test git clone on Windows
     end
@@ -400,6 +401,9 @@ sequenceDiagram
         Artifacts ->> Tests: Download source,pypi,no-providers constraints
         Note over Tests: Display constraints diff
         Tests ->> Airflow Repo: Push constraints if changed to 
'constraints-BRANCH'
+    and
+        GitHub Registry ->> Tests: Pull PROD Images<br>[COMMIT_SHA]
+        Note over Tests: Test examples<br>PROD image building
     and
         GitHub Registry ->> Tests: Pull PROD Image<br>[COMMIT_SHA]
         Note over Tests: Run Kubernetes <br>tests
diff --git a/Dockerfile b/Dockerfile
index ce845cef8b..30d867506a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -232,7 +232,7 @@ COLOR_RESET=$'\e[0m'
 readonly COLOR_RESET
 
 : "${INSTALL_MYSQL_CLIENT:?Should be true or false}"
-: "${INSTALL_MYSQL_CLIENT_TYPE:-mysql}"
+: "${INSTALL_MYSQL_CLIENT_TYPE:-mariadb}"
 
 export_key() {
     local key="${1}"
@@ -271,7 +271,7 @@ install_mysql_client() {
         exit 1
     fi
 
-    export_key "467B942D3A79BD29" "mysql"
+    export_key "B7B3B788A8D3785C" "mysql"
 
     echo
     echo "${COLOR_BLUE}Installing Oracle MySQL client version 
${MYSQL_LTS_VERSION}: ${1}${COLOR_RESET}"
@@ -283,6 +283,13 @@ install_mysql_client() {
     apt-get install --no-install-recommends -y "${packages[@]}"
     apt-get autoremove -yqq --purge
     apt-get clean && rm -rf /var/lib/apt/lists/*
+
+    # Remove mysql repository from sources.list.d as MySQL repos have a basic 
flaw that they put expiry
+    # date on their GPG signing keys and they sign their repo with those keys. 
This means that after a
+    # certain date, the GPG key becomes invalid and if you have the repository 
added in your sources.list
+    # then you will not be able to install anything from any other repository. 
This id unlike any other
+    # repository we have seen (for example Postgres, MariaDB, MsSQL - all have 
non-expiring signing keys)
+    rm /etc/apt/sources.list.d/mysql.list
 }
 
 install_mariadb_client() {
@@ -327,6 +334,9 @@ install_mariadb_client() {
 if [[ ${INSTALL_MYSQL_CLIENT:="true"} == "true" ]]; then
     if [[ $(uname -m) == "arm64" || $(uname -m) == "aarch64" ]]; then
         INSTALL_MYSQL_CLIENT_TYPE="mariadb"
+        echo
+        echo "${COLOR_YELLOW}Client forced to mariadb for ARM${COLOR_RESET}"
+        echo
     fi
 
     if [[ "${INSTALL_MYSQL_CLIENT_TYPE}" == "mysql" ]]; then
@@ -1229,7 +1239,7 @@ COPY --from=scripts install_os_dependencies.sh 
/scripts/docker/
 RUN bash /scripts/docker/install_os_dependencies.sh dev
 
 ARG INSTALL_MYSQL_CLIENT="true"
-ARG INSTALL_MYSQL_CLIENT_TYPE="mysql"
+ARG INSTALL_MYSQL_CLIENT_TYPE="mariadb"
 ARG INSTALL_MSSQL_CLIENT="true"
 ARG INSTALL_POSTGRES_CLIENT="true"
 ARG AIRFLOW_PIP_VERSION
diff --git a/Dockerfile.ci b/Dockerfile.ci
index 845a1c8f44..7991df99ac 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -192,7 +192,7 @@ COLOR_RESET=$'\e[0m'
 readonly COLOR_RESET
 
 : "${INSTALL_MYSQL_CLIENT:?Should be true or false}"
-: "${INSTALL_MYSQL_CLIENT_TYPE:-mysql}"
+: "${INSTALL_MYSQL_CLIENT_TYPE:-mariadb}"
 
 export_key() {
     local key="${1}"
@@ -231,7 +231,7 @@ install_mysql_client() {
         exit 1
     fi
 
-    export_key "467B942D3A79BD29" "mysql"
+    export_key "B7B3B788A8D3785C" "mysql"
 
     echo
     echo "${COLOR_BLUE}Installing Oracle MySQL client version 
${MYSQL_LTS_VERSION}: ${1}${COLOR_RESET}"
@@ -243,6 +243,13 @@ install_mysql_client() {
     apt-get install --no-install-recommends -y "${packages[@]}"
     apt-get autoremove -yqq --purge
     apt-get clean && rm -rf /var/lib/apt/lists/*
+
+    # Remove mysql repository from sources.list.d as MySQL repos have a basic 
flaw that they put expiry
+    # date on their GPG signing keys and they sign their repo with those keys. 
This means that after a
+    # certain date, the GPG key becomes invalid and if you have the repository 
added in your sources.list
+    # then you will not be able to install anything from any other repository. 
This id unlike any other
+    # repository we have seen (for example Postgres, MariaDB, MsSQL - all have 
non-expiring signing keys)
+    rm /etc/apt/sources.list.d/mysql.list
 }
 
 install_mariadb_client() {
@@ -287,6 +294,9 @@ install_mariadb_client() {
 if [[ ${INSTALL_MYSQL_CLIENT:="true"} == "true" ]]; then
     if [[ $(uname -m) == "arm64" || $(uname -m) == "aarch64" ]]; then
         INSTALL_MYSQL_CLIENT_TYPE="mariadb"
+        echo
+        echo "${COLOR_YELLOW}Client forced to mariadb for ARM${COLOR_RESET}"
+        echo
     fi
 
     if [[ "${INSTALL_MYSQL_CLIENT_TYPE}" == "mysql" ]]; then
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 b0a6d12447..981124540f 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
@@ -45,6 +45,7 @@ from airflow_breeze.commands.common_image_options import (
     option_image_tag_for_building,
     option_image_tag_for_pulling,
     option_image_tag_for_verifying,
+    option_install_mysql_client_type,
     option_install_providers_from_sources,
     option_platform_multiple,
     option_prepare_buildx_cache,
@@ -300,6 +301,7 @@ option_version_suffix_for_pypi_ci = click.option(
 @option_eager_upgrade_additional_requirements
 @option_github_repository
 @option_github_token
+@option_install_mysql_client_type
 @option_image_tag_for_building
 @option_include_success_outputs
 @option_install_providers_from_sources
@@ -342,6 +344,7 @@ def build(
     github_token: str | None,
     image_tag: str,
     include_success_outputs,
+    install_mysql_client_type: str,
     install_providers_from_sources: bool,
     parallelism: int,
     platform: str | None,
@@ -413,6 +416,7 @@ def build(
         github_repository=github_repository,
         github_token=github_token,
         image_tag=image_tag,
+        install_mysql_client_type=install_mysql_client_type,
         install_providers_from_sources=install_providers_from_sources,
         prepare_buildx_cache=prepare_buildx_cache,
         push=push,
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 6f6feb900a..d790ae33a1 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
@@ -43,22 +43,23 @@ CI_IMAGE_TOOLS_PARAMETERS: dict[str, list[dict[str, str | 
list[str]]]] = {
         {
             "name": "Building images in parallel",
             "options": [
-                "--run-in-parallel",
+                "--debug-resources",
+                "--include-success-outputs",
                 "--parallelism",
                 "--python-versions",
+                "--run-in-parallel",
                 "--skip-cleanup",
-                "--debug-resources",
-                "--include-success-outputs",
             ],
         },
         {
             "name": "Advanced build options (for power users)",
             "options": [
-                "--debian-version",
-                "--python-image",
-                "--commit-sha",
                 "--additional-pip-install-flags",
+                "--commit-sha",
+                "--debian-version",
+                "--install-mysql-client-type",
                 "--install-providers-from-sources",
+                "--python-image",
             ],
         },
         {
diff --git a/dev/breeze/src/airflow_breeze/commands/common_image_options.py 
b/dev/breeze/src/airflow_breeze/commands/common_image_options.py
index a86e2a4431..dd94ffd499 100644
--- a/dev/breeze/src/airflow_breeze/commands/common_image_options.py
+++ b/dev/breeze/src/airflow_breeze/commands/common_image_options.py
@@ -24,6 +24,7 @@ from airflow_breeze.global_constants import (
     ALLOWED_BUILD_CACHE,
     ALLOWED_BUILD_PROGRESS,
     ALLOWED_DEBIAN_VERSIONS,
+    ALLOWED_INSTALL_MYSQL_CLIENT_TYPES,
     ALLOWED_PLATFORMS,
     DOCKER_DEFAULT_PLATFORM,
 )
@@ -138,6 +139,13 @@ option_image_tag_for_verifying = click.option(
     default="latest",
     envvar="IMAGE_TAG",
 )
+option_install_mysql_client_type = click.option(
+    "--install-mysql-client-type",
+    help="Which client to choose when installing.",
+    type=BetterChoice(ALLOWED_INSTALL_MYSQL_CLIENT_TYPES),
+    default=ALLOWED_INSTALL_MYSQL_CLIENT_TYPES[0],
+    envvar="INSTALL_MYSQL_CLIENT_TYPE",
+)
 option_install_providers_from_sources = click.option(
     "--install-providers-from-sources",
     help="Install providers from sources when installing.",
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 b9bb0f8de8..9c2cb3a57c 100644
--- a/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
@@ -40,6 +40,7 @@ from airflow_breeze.commands.common_image_options import (
     option_image_tag_for_building,
     option_image_tag_for_pulling,
     option_image_tag_for_verifying,
+    option_install_mysql_client_type,
     option_install_providers_from_sources,
     option_platform_multiple,
     option_prepare_buildx_cache,
@@ -231,6 +232,7 @@ def prod_image():
 @option_github_token
 @option_image_tag_for_building
 @option_include_success_outputs
+@option_install_mysql_client_type
 @option_install_providers_from_sources
 @option_parallelism
 @option_platform_multiple
@@ -280,6 +282,7 @@ def build(
     include_success_outputs,
     install_airflow_reference: str | None,
     install_airflow_version: str | None,
+    install_mysql_client_type: str,
     install_packages_from_context: bool,
     install_providers_from_sources: bool,
     installation_method: str,
@@ -343,6 +346,7 @@ def build(
         image_tag=image_tag,
         install_airflow_reference=install_airflow_reference,
         install_airflow_version=install_airflow_version,
+        install_mysql_client_type=install_mysql_client_type,
         install_packages_from_context=install_packages_from_context,
         install_providers_from_sources=install_providers_from_sources,
         installation_method=installation_method,
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 2115a05183..69c7d23c96 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
@@ -92,6 +92,7 @@ PRODUCTION_IMAGE_TOOLS_PARAMETERS: dict[str, list[dict[str, 
str | list[str]]]] =
                 "--installation-method",
                 "--install-airflow-reference",
                 "--install-packages-from-context",
+                "--install-mysql-client-type",
                 "--cleanup-context",
                 "--use-constraints-for-context-packages",
                 "--disable-airflow-repo-cache",
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py 
b/dev/breeze/src/airflow_breeze/global_constants.py
index f336900d04..35a8237f25 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -116,6 +116,8 @@ ALLOWED_MYSQL_VERSIONS = [*MYSQL_OLD_RELEASES, 
*MYSQL_LTS_RELEASES]
 if MYSQL_INNOVATION_RELEASE:
     ALLOWED_MYSQL_VERSIONS.append(MYSQL_INNOVATION_RELEASE)
 
+ALLOWED_INSTALL_MYSQL_CLIENT_TYPES = ["mariadb", "mysql"]
+
 ALLOWED_MSSQL_VERSIONS = ["2017-latest", "2019-latest"]
 
 PIP_VERSION = "23.3.1"
diff --git a/dev/breeze/src/airflow_breeze/params/build_ci_params.py 
b/dev/breeze/src/airflow_breeze/params/build_ci_params.py
index 1b94f1ec16..e5322309c5 100644
--- a/dev/breeze/src/airflow_breeze/params/build_ci_params.py
+++ b/dev/breeze/src/airflow_breeze/params/build_ci_params.py
@@ -86,18 +86,19 @@ class BuildCiParams(CommonBuildParams):
         self._opt_arg("ADDITIONAL_DEV_APT_ENV", self.additional_dev_apt_env)
         self._opt_arg("ADDITIONAL_PIP_INSTALL_FLAGS", 
self.additional_pip_install_flags)
         self._opt_arg("ADDITIONAL_PYTHON_DEPS", self.additional_python_deps)
-        self._opt_arg("DEV_APT_COMMAND", self.dev_apt_command)
-        self._opt_arg("DEV_APT_DEPS", self.dev_apt_deps)
-        self._opt_arg("DOCKER_HOST", self.docker_host)
         self._opt_arg("ADDITIONAL_DEV_APT_COMMAND", 
self.additional_dev_apt_command)
         self._opt_arg("ADDITIONAL_DEV_APT_DEPS", self.additional_dev_apt_deps)
         self._opt_arg("ADDITIONAL_DEV_APT_ENV", self.additional_dev_apt_env)
         self._opt_arg("ADDITIONAL_AIRFLOW_EXTRAS", 
self.additional_airflow_extras)
         self._opt_arg("ADDITIONAL_PIP_INSTALL_FLAGS", 
self.additional_pip_install_flags)
         self._opt_arg("ADDITIONAL_PYTHON_DEPS", self.additional_python_deps)
-        self._opt_arg("VERSION_SUFFIX_FOR_PYPI", self.version_suffix_for_pypi)
-        self._opt_arg("COMMIT_SHA", self.commit_sha)
         self._opt_arg("BUILD_PROGRESS", self.build_progress)
+        self._opt_arg("COMMIT_SHA", self.commit_sha)
+        self._opt_arg("DEV_APT_COMMAND", self.dev_apt_command)
+        self._opt_arg("DEV_APT_DEPS", self.dev_apt_deps)
+        self._opt_arg("DOCKER_HOST", self.docker_host)
+        self._opt_arg("INSTALL_MYSQL_CLIENT_TYPE", 
self.install_mysql_client_type)
+        self._opt_arg("VERSION_SUFFIX_FOR_PYPI", self.version_suffix_for_pypi)
         # Convert to build args
         build_args = self._to_build_args()
         # Add cache directive
diff --git a/dev/breeze/src/airflow_breeze/params/build_prod_params.py 
b/dev/breeze/src/airflow_breeze/params/build_prod_params.py
index abd4498881..8a534cc425 100644
--- a/dev/breeze/src/airflow_breeze/params/build_prod_params.py
+++ b/dev/breeze/src/airflow_breeze/params/build_prod_params.py
@@ -211,8 +211,6 @@ class BuildProdParams(CommonBuildParams):
         self._req_arg("BUILD_ID", self.build_id)
         self._req_arg("CONSTRAINTS_GITHUB_REPOSITORY", 
self.constraints_github_repository)
         self._req_arg("DOCKER_CONTEXT_FILES", self.docker_context_files)
-        self._req_arg("INSTALL_MSSQL_CLIENT", self.install_mssql_client)
-        self._req_arg("INSTALL_MYSQL_CLIENT", self.install_mysql_client)
         self._req_arg("INSTALL_PACKAGES_FROM_CONTEXT", 
self.install_packages_from_context)
         self._req_arg("INSTALL_POSTGRES_CLIENT", self.install_postgres_client)
         self._req_arg("INSTALL_PROVIDERS_FROM_SOURCES", 
self.install_providers_from_sources)
@@ -228,15 +226,18 @@ class BuildProdParams(CommonBuildParams):
         self._opt_arg("ADDITIONAL_RUNTIME_APT_COMMAND", 
self.additional_runtime_apt_command)
         self._opt_arg("ADDITIONAL_RUNTIME_APT_DEPS", 
self.additional_runtime_apt_deps)
         self._opt_arg("ADDITIONAL_RUNTIME_APT_ENV", 
self.additional_runtime_apt_env)
+        self._opt_arg("BUILD_PROGRESS", self.build_progress)
+        self._opt_arg("COMMIT_SHA", self.commit_sha)
         self._opt_arg("DEV_APT_COMMAND", self.dev_apt_command)
         self._opt_arg("DEV_APT_DEPS", self.dev_apt_deps)
         self._opt_arg("DOCKER_HOST", self.docker_host)
+        self._req_arg("INSTALL_MSSQL_CLIENT", self.install_mssql_client)
+        self._opt_arg("INSTALL_MYSQL_CLIENT", self.install_mysql_client)
+        self._req_arg("INSTALL_MYSQL_CLIENT_TYPE", 
self.install_mysql_client_type)
         self._opt_arg("RUNTIME_APT_COMMAND", self.runtime_apt_command)
         self._opt_arg("RUNTIME_APT_DEPS", self.runtime_apt_deps)
-        self._opt_arg("VERSION_SUFFIX_FOR_PYPI", self.version_suffix_for_pypi)
-        self._opt_arg("COMMIT_SHA", self.commit_sha)
-        self._opt_arg("BUILD_PROGRESS", self.build_progress)
         self._opt_arg("USE_CONSTRAINTS_FOR_CONTEXT_PACKAGES", 
self.use_constraints_for_context_packages)
+        self._opt_arg("VERSION_SUFFIX_FOR_PYPI", self.version_suffix_for_pypi)
         build_args = self._to_build_args()
         build_args.extend(self._extra_prod_docker_build_flags())
         return build_args
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 4f01345fc8..d9bd3d3a1f 100644
--- a/dev/breeze/src/airflow_breeze/params/common_build_params.py
+++ b/dev/breeze/src/airflow_breeze/params/common_build_params.py
@@ -25,6 +25,7 @@ from typing import Any
 from airflow_breeze.branch_defaults import AIRFLOW_BRANCH, 
DEFAULT_AIRFLOW_CONSTRAINTS_BRANCH
 from airflow_breeze.global_constants import (
     ALLOWED_BUILD_PROGRESS,
+    ALLOWED_INSTALL_MYSQL_CLIENT_TYPES,
     APACHE_AIRFLOW_GITHUB_REPOSITORY,
     DOCKER_DEFAULT_PLATFORM,
 )
@@ -62,6 +63,7 @@ class CommonBuildParams:
     github_token: str = os.environ.get("GITHUB_TOKEN", "")
     image_tag: str | None = None
     install_providers_from_sources: bool = False
+    install_mysql_client_type: str = ALLOWED_INSTALL_MYSQL_CLIENT_TYPES[0]
     platform: str = DOCKER_DEFAULT_PLATFORM
     prepare_buildx_cache: bool = False
     python_image: str | None = None
diff --git a/docker_tests/test_examples_of_prod_image_building.py 
b/docker_tests/test_examples_of_prod_image_building.py
index f67efcd067..991f9c8e2b 100644
--- a/docker_tests/test_examples_of_prod_image_building.py
+++ b/docker_tests/test_examples_of_prod_image_building.py
@@ -35,10 +35,11 @@ DOCKER_EXAMPLES_DIR = SOURCE_ROOT / "docs" / "docker-stack" 
/ "docker-examples"
 
 
 @lru_cache(maxsize=None)
-def get_latest_airflow_version_released():
+def get_latest_airflow_image():
     response = requests.get("https://pypi.org/pypi/apache-airflow/json";)
     response.raise_for_status()
-    return response.json()["info"]["version"]
+    latest_released_version = response.json()["info"]["version"]
+    return f"apache/airflow:{latest_released_version}"
 
 
 @pytest.mark.skipif(
@@ -55,10 +56,8 @@ def test_dockerfile_example(dockerfile):
     rel_dockerfile_path = Path(dockerfile).relative_to(DOCKER_EXAMPLES_DIR)
     image_name = str(rel_dockerfile_path).lower().replace("/", "-")
     content = Path(dockerfile).read_text()
-    latest_released_version: str = get_latest_airflow_version_released()
-    new_content = re.sub(
-        r"FROM apache/airflow:.*", rf"FROM 
apache/airflow:{latest_released_version}", content
-    )
+    test_image = os.environ.get("TEST_IMAGE", get_latest_airflow_image())
+    new_content = re.sub(r"FROM apache/airflow:.*", rf"FROM {test_image}", 
content)
     try:
         run_command(
             ["docker", "build", ".", "--tag", image_name, "-f", "-"],
diff --git a/docs/docker-stack/build-arg-ref.rst 
b/docs/docker-stack/build-arg-ref.rst
index 3e492e00f9..aae9772be8 100644
--- a/docs/docker-stack/build-arg-ref.rst
+++ b/docs/docker-stack/build-arg-ref.rst
@@ -170,10 +170,10 @@ for examples of using those arguments.
 |                                          |                                   
       | The mysql extra is removed from extras   |
 |                                          |                                   
       | if the client is not installed.          |
 
+------------------------------------------+------------------------------------------+------------------------------------------+
-| ``INSTALL_MYSQL_CLIENT_TYPE``            | ``mysql``                         
       | (*Experimental*) Type of MySQL client    |
-|                                          |                                   
       | library. This can be ``mysql`` or        |
-|                                          |                                   
       | ``mariadb``. Regardless of the parameter |
-|                                          |                                   
       | will always be used ``mariadb`` on ARM.  |
+| ``INSTALL_MYSQL_CLIENT_TYPE``            | ``mariadb``                       
       | Type of MySQL client library. This       |
+|                                          |                                   
       | can be ``mariadb`` or ``mysql``          |
+|                                          |                                   
       | Regardless of the parameter, ``mariadb`` |
+|                                          |                                   
       | will always be used on ARM.              |
 
+------------------------------------------+------------------------------------------+------------------------------------------+
 | ``INSTALL_MSSQL_CLIENT``                 | ``true``                          
       | Whether MsSQL client should be installed |
 
+------------------------------------------+------------------------------------------+------------------------------------------+
diff --git a/docs/docker-stack/build.rst b/docs/docker-stack/build.rst
index 8cfd948979..eac84cbd57 100644
--- a/docs/docker-stack/build.rst
+++ b/docs/docker-stack/build.rst
@@ -775,6 +775,23 @@ The following example builds the production image in 
version ``3.8`` based on ``
     :end-before: [END build]
 
 
+.. _image-build-mysql:
+
+Building images with MySQL client
+.................................
+
+.. warning::
+
+  By default Airflow images as of Airflow 2.8.0 use "MariaDB" client by 
default on both "X86_64" and "ARM64"
+  platforms. However, you can also build images with MySQL client. The 
following example builds the
+  production image in default Python version with "MySQL" client.
+
+.. exampleinclude:: docker-examples/customizing/mysql-client.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 6e77799779..509f7b64c0 100644
--- a/docs/docker-stack/changelog.rst
+++ b/docs/docker-stack/changelog.rst
@@ -55,6 +55,15 @@ Airflow 2.8
      ``apache/airflow:slim-2.8.0-python-3.8`` images respectively so while the 
change is potentially
      breaking, it is very easy to switch to the previous behaviour.
 
+   * By default the images now have "MariaDB" client installed. Previous 
images had "MySQL" client installed.
+     The MariaDB client is a drop-in replacement for "MySQL" one and is 
compatible with MySQL. This might
+     be a breaking change for users who used MySQL client in their images, 
however those should be very
+     specific cases and vast majority of users should not see any difference. 
Users can still use
+     MySQL client by setting ``INSTALL_MYSQL_CLIENT_TYPE=mysql`` build arg and 
build the custom X86 image.
+     The ARM image always uses MariaDB client, this argument is ignored. The 
"mysql" apt repository is
+     removed from the /etc/apt/sources.list.d/ and if you want to install 
anything from this repository when
+     extending the images, you need to manually add the right key and 
repository in your Dockerfile,
+     following the instructions in `A Quick Guide to Using the MySQL APT 
repository <https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/>`_.
 
 Airflow 2.7
 ~~~~~~~~~~~
@@ -260,14 +269,18 @@ that invalidates the already released image, and 
regenerating the image makes it
 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         |                                              |
-+--------------+---------------------+-----------------------------------------+------------------------+----------------------------------------------+
++--------------+---------------------+-----------------------------------------+------------------------+------------------------------------------------+
+| Date         | Affected images     | Potentially breaking change             
| Reason                 | Link to Pull Request / Issue                   |
++==============+=====================+=========================================+========================+================================================+
+| 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         |                                                |
++--------------+---------------------+-----------------------------------------+------------------------+------------------------------------------------+
+| 16 Dec 2023  | All 2..\*           | * The AIRFLOW_GID 500 was removed       
| MySQL repository is    | https://github.com/apache/airflow/issues/36231 |
+|              |                     | * MySQL ``apt`` repository key changed. 
| removed after the      |                                                |
+|              |                     |                                         
| key expiry fiasco      |                                                |
++--------------+---------------------+-----------------------------------------+------------------------+------------------------------------------------+
diff --git a/docs/docker-stack/docker-examples/customizing/mysql-client.sh 
b/docs/docker-stack/docker-examples/customizing/mysql-client.sh
new file mode 100755
index 0000000000..1835e7688d
--- /dev/null
+++ b/docs/docker-stack/docker-examples/customizing/mysql-client.sh
@@ -0,0 +1,37 @@
+#!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# This is an example docker build script. It is not intended for PRODUCTION use
+set -euo pipefail
+AIRFLOW_SOURCES="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../../" && pwd)"
+
+TEMP_DOCKER_DIR=$(mktemp -d)
+pushd "${TEMP_DOCKER_DIR}"
+
+cp "${AIRFLOW_SOURCES}/Dockerfile" "${TEMP_DOCKER_DIR}"
+
+# [START build]
+export DOCKER_BUILDKIT=1
+
+docker build . \
+    --build-arg INSTALL_MYSQL_CLIENT_TYPE="mysql" \
+    --tag "my-mysql-airflow:0.0.1"
+# [END build]
+docker rmi --force "my-mysql-airflow:0.0.1"
+popd
+rm -rf "${TEMP_DOCKER_DIR}"
diff --git 
a/docs/docker-stack/docker-examples/extending/add-providers/Dockerfile 
b/docs/docker-stack/docker-examples/extending/add-providers/Dockerfile
index f1496652f3..69dc96f7cf 100644
--- a/docs/docker-stack/docker-examples/extending/add-providers/Dockerfile
+++ b/docs/docker-stack/docker-examples/extending/add-providers/Dockerfile
@@ -19,11 +19,11 @@ FROM apache/airflow:2.8.0
 USER root
 RUN apt-get update \
   && apt-get install -y --no-install-recommends \
-         openjdk-11-jre-headless \
+         openjdk-17-jre-headless \
   && apt-get autoremove -yqq --purge \
   && apt-get clean \
   && rm -rf /var/lib/apt/lists/*
 USER airflow
-ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
+ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
 RUN pip install --no-cache-dir "apache-airflow==${AIRFLOW_VERSION}" 
apache-airflow-providers-apache-spark==2.1.3
 # [END Dockerfile]
diff --git a/images/breeze/output_ci-image_build.svg 
b/images/breeze/output_ci-image_build.svg
index c76c91005e..70960aa673 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 2246.0" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 2270.4" 
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="2195.0" />
+      <rect x="0" y="0" width="1463.0" height="2219.4" />
     </clipPath>
     <clipPath id="breeze-ci-image-build-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -312,9 +312,12 @@
 <clipPath id="breeze-ci-image-build-line-88">
     <rect x="0" y="2148.7" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-ci-image-build-line-89">
+    <rect x="0" y="2173.1" 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="2244" 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="2268.4" 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"/>
@@ -349,71 +352,72 @@
 </text><text class="breeze-ci-image-build-r5" x="0" y="556.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-22)">│</text><text 
class="breeze-ci-image-build-r7" x="475.8" y="556.8" textLength="963.8" 
clip-path="url(#breeze-ci-image-build-line-22)">(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="581.2" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="581.2" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-23)">
 </text><text class="breeze-ci-image-build-r5" x="0" y="605.6" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-24)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="605.6" textLength="353.8" 
clip-path="url(#breeze-ci-image-build-line-24)">&#160;Building&#160;images&#160;in&#160;parallel&#160;</text><text
 class="breeze-ci-image-build-r5" x="378.2" y="605.6" textLength="1061.4" 
clip-path="url(#breeze-ci-image-build-line-24)">──────────────────────────────────────────
 [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="630" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-25)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="630" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-25)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="630" textLength="48.8" 
clip-path="url(#breeze-ci-image-build-line-25)">-run</text><text 
class="breeze-ci-image-build-r4" x="85.4" y="630" textLength="146.4" 
clip-path="url(#bree [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="654.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-26)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="654.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-26)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="654.4" textLength="146.4" 
clip-path="url(#breeze-ci-image-build-line-26)">-parallelism</text><text 
class="breeze-ci-image-build-r1" x="378.2" y="654.4" textLength="915" clip [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="678.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-27)">│</text><text 
class="breeze-ci-image-build-r7" x="378.2" y="678.8" textLength="915" 
clip-path="url(#breeze-ci-image-build-line-27)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="703.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-28)">│</text><text 
class="breeze-ci-image-build-r5" x="378.2" y="703.2" textLength="915" 
clip-path="url(#breeze-ci-image-build-line-28)">[default:&#160;4;&#160;1&lt;=x&lt;=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;&#1
 [...]
-</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="85.4" 
clip-path="url(#breeze-ci-image-build-line-29)">-python</text><text 
class="breeze-ci-image-build-r4" x="122" y="727.6" textLength="109.8" 
clip-path= [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="752" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-30)">│</text><text 
class="breeze-ci-image-build-r5" x="378.2" y="752" textLength="951.6" 
clip-path="url(#breeze-ci-image-build-line-30)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="776.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-31)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="776.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-31)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="776.4" textLength="61" 
clip-path="url(#breeze-ci-image-build-line-31)">-skip</text><text 
class="breeze-ci-image-build-r4" x="97.6" y="776.4" textLength="97.6" 
clip-path="url [...]
-</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="73.2" 
clip-path="url(#breeze-ci-image-build-line-32)">-debug</text><text 
class="breeze-ci-image-build-r4" x="109.8" y="800.8" textLength="122" 
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-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)">-include</text><text 
class="breeze-ci-image-build-r4" x="134.2" y="825.2" textLength="195.2" clip-pa 
[...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="630" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-25)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="630" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-25)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="630" textLength="73.2" 
clip-path="url(#breeze-ci-image-build-line-25)">-debug</text><text 
class="breeze-ci-image-build-r4" x="109.8" y="630" textLength="122" 
clip-path="url(#bre [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="654.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-26)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="654.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-26)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="654.4" textLength="97.6" 
clip-path="url(#breeze-ci-image-build-line-26)">-include</text><text 
class="breeze-ci-image-build-r4" x="134.2" y="654.4" textLength="195.2" clip-pa 
[...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="678.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-27)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="678.8" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-27)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="678.8" textLength="146.4" 
clip-path="url(#breeze-ci-image-build-line-27)">-parallelism</text><text 
class="breeze-ci-image-build-r1" x="378.2" y="678.8" textLength="915" clip [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="703.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-28)">│</text><text 
class="breeze-ci-image-build-r7" x="378.2" y="703.2" textLength="915" 
clip-path="url(#breeze-ci-image-build-line-28)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="727.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-29)">│</text><text 
class="breeze-ci-image-build-r5" x="378.2" y="727.6" textLength="915" 
clip-path="url(#breeze-ci-image-build-line-29)">[default:&#160;4;&#160;1&lt;=x&lt;=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;&#1
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="752" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-30)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="752" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-30)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="752" textLength="85.4" 
clip-path="url(#breeze-ci-image-build-line-30)">-python</text><text 
class="breeze-ci-image-build-r4" x="122" y="752" textLength="109.8" 
clip-path="url(#br [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="776.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-31)">│</text><text 
class="breeze-ci-image-build-r5" x="378.2" y="776.4" textLength="951.6" 
clip-path="url(#breeze-ci-image-build-line-31)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11]&#160;&#160;&#160;&#160;&#160;&#160;&#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="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="48.8" 
clip-path="url(#breeze-ci-image-build-line-32)">-run</text><text 
class="breeze-ci-image-build-r4" x="85.4" y="800.8" textLength="146.4" 
clip-path="u [...]
+</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="61" 
clip-path="url(#breeze-ci-image-build-line-33)">-skip</text><text 
class="breeze-ci-image-build-r4" x="97.6" y="825.2" textLength="97.6" 
clip-path="url [...]
 </text><text class="breeze-ci-image-build-r5" x="0" y="849.6" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-34)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="849.6" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-34)">
 </text><text class="breeze-ci-image-build-r5" x="0" y="874" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-35)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="874" textLength="512.4" 
clip-path="url(#breeze-ci-image-build-line-35)">&#160;Advanced&#160;build&#160;options&#160;(for&#160;power&#160;users)&#160;</text><text
 class="breeze-ci-image-build-r5" x="536.8" y="874" textLength="902.8" 
clip-path="url(#breeze-ci-image-build-line-35)">────────────────────────── [...]
-</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="85.4" 
clip-path="url(#breeze-ci-image-build-line-36)">-debian</text><text 
class="breeze-ci-image-build-r4" x="122" y="898.4" textLength="97.6" 
clip-path=" [...]
-</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="793" 
clip-path="url(#breeze-ci-image-build-line-37)">(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="947.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-38)">│</text><text 
class="breeze-ci-image-build-r5" x="463.6" y="947.2" textLength="793" 
clip-path="url(#breeze-ci-image-build-line-38)">[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="971.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-39)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="971.6" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-39)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="971.6" textLength="85.4" 
clip-path="url(#breeze-ci-image-build-line-39)">-python</text><text 
class="breeze-ci-image-build-r4" x="122" y="971.6" textLength="73.2" 
clip-path=" [...]
-</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-r1" x="463.6" y="996" textLength="976" 
clip-path="url(#breeze-ci-image-build-line-40)">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;&#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-r7" x="463.6" y="1020.4" textLength="976" 
clip-path="url(#breeze-ci-image-build-line-41)">(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="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)">-commit</text><text 
class="breeze-ci-image-build-r4" x="122" y="1044.8" textLength="48.8" 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-r4" x="24.4" y="1069.2" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-43)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="1069.2" textLength="134.2" 
clip-path="url(#breeze-ci-image-build-line-43)">-additional</text><text 
class="breeze-ci-image-build-r4" x="170.8" y="1069.2" textLength="219.6" [...]
-</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-r1" x="463.6" y="1093.6" textLength="976" 
clip-path="url(#breeze-ci-image-build-line-44)">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="1118" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-45)">│</text><text 
class="breeze-ci-image-build-r7" x="463.6" y="1118" textLength="976" 
clip-path="url(#breeze-ci-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;&#160;&#160;
 [...]
-</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="97.6" 
clip-path="url(#breeze-ci-image-build-line-46)">-install</text><text 
class="breeze-ci-image-build-r4" x="134.2" y="1142.4" textLength="280.6" cli 
[...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1166.8" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-47)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1166.8" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-47)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="1191.2" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-48)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1191.2" textLength="597.8" 
clip-path="url(#breeze-ci-image-build-line-48)">&#160;Selecting&#160;constraint&#160;location&#160;(for&#160;power&#160;users)&#160;</text><text
 class="breeze-ci-image-build-r5" x="622.2" y="1191.2" textLength="817.4" 
clip-path="url(#breeze-ci-image-build-line-48)">────────── [...]
-</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="97.6" 
clip-path="url(#breeze-ci-image-build-line-49)">-airflow</text><text 
class="breeze-ci-image-build-r4" x="134.2" y="1215.6" textLength="256.2" cli 
[...]
-</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="97.6" 
clip-path="url(#breeze-ci-image-build-line-50)">-airflow</text><text 
class="breeze-ci-image-build-r4" x="134.2" y="1240" textLength="207.4" 
clip-path=" [...]
-</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-r7" x="451.4" y="1264.4" textLength="866.2" 
clip-path="url(#breeze-ci-image-build-line-51)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text
 class="breeze-ci-image-build-r5" x="1451.8" y="1264.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-51)">│</ [...]
-</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-r5" x="451.4" y="1288.8" textLength="866.2" 
clip-path="url(#breeze-ci-image-build-line-52)">[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="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="97.6" 
clip-path="url(#breeze-ci-image-build-line-53)">-airflow</text><text 
class="breeze-ci-image-build-r4" x="134.2" y="1313.2" textLength="268.4" cli 
[...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1337.6" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-54)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1337.6" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-54)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="1362" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-55)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1362" textLength="634.4" 
clip-path="url(#breeze-ci-image-build-line-55)">&#160;Choosing&#160;dependencies&#160;and&#160;extras&#160;(for&#160;power&#160;users)&#160;</text><text
 class="breeze-ci-image-build-r5" x="658.8" y="1362" textLength="780.8" 
clip-path="url(#breeze-ci-image-build-line-55)">──────── [...]
-</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="134.2" 
clip-path="url(#breeze-ci-image-build-line-56)">-additional</text><text 
class="breeze-ci-image-build-r4" x="170.8" y="1386.4" textLength="183" c [...]
-</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="134.2" 
clip-path="url(#breeze-ci-image-build-line-57)">-additional</text><text 
class="breeze-ci-image-build-r4" x="170.8" y="1410.8" textLength="146.4" [...]
-</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="48.8" 
clip-path="url(#breeze-ci-image-build-line-58)">-dev</text><text 
class="breeze-ci-image-build-r4" x="85.4" y="1435.2" textLength="109.8" 
clip-pat [...]
-</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="134.2" 
clip-path="url(#breeze-ci-image-build-line-59)">-additional</text><text 
class="breeze-ci-image-build-r4" x="170.8" y="1459.6" textLength="158.6" [...]
-</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-r4" x="24.4" y="1484" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-60)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="1484" textLength="48.8" 
clip-path="url(#breeze-ci-image-build-line-60)">-dev</text><text 
class="breeze-ci-image-build-r4" x="85.4" y="1484" textLength="146.4" 
clip-path="url(# [...]
-</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-r4" x="24.4" y="1508.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-61)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="1508.4" textLength="134.2" 
clip-path="url(#breeze-ci-image-build-line-61)">-additional</text><text 
class="breeze-ci-image-build-r4" x="170.8" y="1508.4" textLength="195.2" [...]
-</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="134.2" 
clip-path="url(#breeze-ci-image-build-line-62)">-additional</text><text 
class="breeze-ci-image-build-r4" x="170.8" y="1532.8" textLength="146.4" [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1557.2" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-63)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1557.2" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-63)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="1581.6" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-64)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1581.6" textLength="268.4" 
clip-path="url(#breeze-ci-image-build-line-64)">&#160;Backtracking&#160;options&#160;</text><text
 class="breeze-ci-image-build-r5" x="292.8" y="1581.6" textLength="1146.8" 
clip-path="url(#breeze-ci-image-build-line-64)">────────────────────────────────────────────────────────
 [...]
-</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)">-build</text><text 
class="breeze-ci-image-build-r4" x="109.8" y="1606" textLength="195.2" 
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)">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="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)">(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="1679.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-68)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1679.2" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-68)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="1679.2" textLength="73.2" 
clip-path="url(#breeze-ci-image-build-line-68)">-eager</text><text 
class="breeze-ci-image-build-r4" x="109.8" y="1679.2" textLength="390.4" clip- 
[...]
-</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-r1" x="549" y="1703.6" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-69)">(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="1728" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-70)">│</text><text 
class="breeze-ci-image-build-r7" x="549" y="1728" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-70)">(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="1752.4" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-71)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1752.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-71)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="1776.8" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-72)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1776.8" textLength="622.2" 
clip-path="url(#breeze-ci-image-build-line-72)">&#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="1776.8" textLength="793" 
clip-path="url(#breeze-ci-image-build-line-72)"> [...]
-</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="97.6" 
clip-path="url(#breeze-ci-image-build-line-73)">-builder</text><text 
class="breeze-ci-image-build-r1" x="341.6" y="1801.2" textLength="756.4" cli 
[...]
-</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-r5" x="341.6" y="1825.6" textLength="756.4" 
clip-path="url(#breeze-ci-image-build-line-74)">[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="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="109.8" 
clip-path="url(#breeze-ci-image-build-line-75)">-platform</text><text 
class="breeze-ci-image-build-r1" x="341.6" y="1850" textLength="329.4" 
clip-path [...]
-</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="61" 
clip-path="url(#breeze-ci-image-build-line-76)">-push</text><text 
class="breeze-ci-image-build-r1" x="341.6" y="1874.4" textLength="353.8" 
clip-pat [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="1898.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-77)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1898.8" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-77)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="1898.8" textLength="97.6" 
clip-path="url(#breeze-ci-image-build-line-77)">-prepare</text><text 
class="breeze-ci-image-build-r4" x="134.2" y="1898.8" textLength="158.6" cli 
[...]
-</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-r1" x="341.6" y="1923.2" textLength="1098" 
clip-path="url(#breeze-ci-image-build-line-78)">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="1947.6" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-79)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1947.6" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-79)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="1972" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-80)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1972" textLength="280.6" 
clip-path="url(#breeze-ci-image-build-line-80)">&#160;Github&#160;authentication&#160;</text><text
 class="breeze-ci-image-build-r5" x="305" y="1972" textLength="1134.6" 
clip-path="url(#breeze-ci-image-build-line-80)">───────────────────────────────────────────────────────────────
 [...]
-</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)">-github</text><text 
class="breeze-ci-image-build-r4" x="122" y="1996.4" textLength="134.2" clip-p 
[...]
-</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="85.4" 
clip-path="url(#breeze-ci-image-build-line-82)">-github</text><text 
class="breeze-ci-image-build-r4" x="122" y="2020.8" textLength="73.2" clip-pa 
[...]
-</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="2069.6" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-84)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="2069.6" textLength="195.2" 
clip-path="url(#breeze-ci-image-build-line-84)">&#160;Common&#160;options&#160;</text><text
 class="breeze-ci-image-build-r5" x="219.6" y="2069.6" textLength="1220" 
clip-path="url(#breeze-ci-image-build-line-84)">────────────────────────────────────────────────────────────────
 [...]
-</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="85.4" 
clip-path="url(#breeze-ci-image-build-line-85)">-answer</text><text 
class="breeze-ci-image-build-r6" x="158.6" y="2094" textLength="24.4" 
clip-path="ur [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2118.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-86)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2118.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-86)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="2118.4" textLength="48.8" 
clip-path="url(#breeze-ci-image-build-line-86)">-dry</text><text 
class="breeze-ci-image-build-r4" x="85.4" y="2118.4" textLength="48.8" 
clip-path [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2142.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-87)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2142.8" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-87)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="2142.8" textLength="97.6" 
clip-path="url(#breeze-ci-image-build-line-87)">-verbose</text><text 
class="breeze-ci-image-build-r6" x="158.6" y="2142.8" textLength="24.4" clip 
[...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2167.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-88)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2167.2" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-88)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="2167.2" textLength="61" 
clip-path="url(#breeze-ci-image-build-line-88)">-help</text><text 
class="breeze-ci-image-build-r6" x="158.6" y="2167.2" textLength="24.4" 
clip-path [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="2191.6" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-89)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="2191.6" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-89)">
+</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="134.2" 
clip-path="url(#breeze-ci-image-build-line-36)">-additional</text><text 
class="breeze-ci-image-build-r4" x="170.8" y="898.4" textLength="219.6" cli 
[...]
+</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)">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="947.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-38)">│</text><text 
class="breeze-ci-image-build-r7" x="463.6" y="947.2" textLength="976" 
clip-path="url(#breeze-ci-image-build-line-38)">(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="971.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-39)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="971.6" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-39)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="971.6" textLength="85.4" 
clip-path="url(#breeze-ci-image-build-line-39)">-commit</text><text 
class="breeze-ci-image-build-r4" x="122" y="971.6" textLength="48.8" 
clip-path=" [...]
+</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-r4" x="24.4" y="996" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-40)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="996" textLength="85.4" 
clip-path="url(#breeze-ci-image-build-line-40)">-debian</text><text 
class="breeze-ci-image-build-r4" x="122" y="996" textLength="97.6" 
clip-path="url(#bre [...]
+</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-r7" x="463.6" y="1020.4" textLength="793" 
clip-path="url(#breeze-ci-image-build-line-41)">(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;&
 [...]
+</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-r5" x="463.6" y="1044.8" textLength="793" 
clip-path="url(#breeze-ci-image-build-line-42)">[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;&#
 [...]
+</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-r4" x="24.4" y="1069.2" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-43)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="1069.2" textLength="97.6" 
clip-path="url(#breeze-ci-image-build-line-43)">-install</text><text 
class="breeze-ci-image-build-r4" x="134.2" y="1069.2" textLength="219.6" cli 
[...]
+</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)">-install</text><text 
class="breeze-ci-image-build-r4" x="134.2" y="1093.6" textLength="280.6" 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="1464" 
clip-path="url(#breeze-ci-image-build-line-48)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1191.2" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-48)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="1215.6" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-49)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1215.6" textLength="597.8" 
clip-path="url(#breeze-ci-image-build-line-49)">&#160;Selecting&#160;constraint&#160;location&#160;(for&#160;power&#160;users)&#160;</text><text
 class="breeze-ci-image-build-r5" x="622.2" y="1215.6" textLength="817.4" 
clip-path="url(#breeze-ci-image-build-line-49)">────────── [...]
+</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="97.6" 
clip-path="url(#breeze-ci-image-build-line-50)">-airflow</text><text 
class="breeze-ci-image-build-r4" x="134.2" y="1240" textLength="256.2" 
clip-path=" [...]
+</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="97.6" 
clip-path="url(#breeze-ci-image-build-line-51)">-airflow</text><text 
class="breeze-ci-image-build-r4" x="134.2" y="1264.4" textLength="207.4" cli 
[...]
+</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="451.4" y="1288.8" textLength="866.2" 
clip-path="url(#breeze-ci-image-build-line-52)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text
 class="breeze-ci-image-build-r5" x="1451.8" y="1288.8" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-52)">│</ [...]
+</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-r5" x="451.4" y="1313.2" textLength="866.2" 
clip-path="url(#breeze-ci-image-build-line-53)">[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="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="97.6" 
clip-path="url(#breeze-ci-image-build-line-54)">-airflow</text><text 
class="breeze-ci-image-build-r4" x="134.2" y="1337.6" textLength="268.4" cli 
[...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1362" textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-55)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1362" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-55)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="1386.4" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-56)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1386.4" textLength="634.4" 
clip-path="url(#breeze-ci-image-build-line-56)">&#160;Choosing&#160;dependencies&#160;and&#160;extras&#160;(for&#160;power&#160;users)&#160;</text><text
 class="breeze-ci-image-build-r5" x="658.8" y="1386.4" textLength="780.8" 
clip-path="url(#breeze-ci-image-build-line-56)">── [...]
+</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="134.2" 
clip-path="url(#breeze-ci-image-build-line-57)">-additional</text><text 
class="breeze-ci-image-build-r4" x="170.8" y="1410.8" textLength="183" c [...]
+</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="134.2" 
clip-path="url(#breeze-ci-image-build-line-58)">-additional</text><text 
class="breeze-ci-image-build-r4" x="170.8" y="1435.2" textLength="146.4" [...]
+</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="48.8" 
clip-path="url(#breeze-ci-image-build-line-59)">-dev</text><text 
class="breeze-ci-image-build-r4" x="85.4" y="1459.6" textLength="109.8" 
clip-pat [...]
+</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-r4" x="24.4" y="1484" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-60)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="1484" textLength="134.2" 
clip-path="url(#breeze-ci-image-build-line-60)">-additional</text><text 
class="breeze-ci-image-build-r4" x="170.8" y="1484" textLength="158.6" clip-pa 
[...]
+</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-r4" x="24.4" y="1508.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-61)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="1508.4" textLength="48.8" 
clip-path="url(#breeze-ci-image-build-line-61)">-dev</text><text 
class="breeze-ci-image-build-r4" x="85.4" y="1508.4" textLength="146.4" 
clip-pat [...]
+</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="134.2" 
clip-path="url(#breeze-ci-image-build-line-62)">-additional</text><text 
class="breeze-ci-image-build-r4" x="170.8" y="1532.8" textLength="195.2" [...]
+</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-r4" x="24.4" y="1557.2" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-63)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="1557.2" textLength="134.2" 
clip-path="url(#breeze-ci-image-build-line-63)">-additional</text><text 
class="breeze-ci-image-build-r4" x="170.8" y="1557.2" textLength="146.4" [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1581.6" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-64)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1581.6" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-64)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="1606" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-65)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1606" textLength="268.4" 
clip-path="url(#breeze-ci-image-build-line-65)">&#160;Backtracking&#160;options&#160;</text><text
 class="breeze-ci-image-build-r5" x="292.8" y="1606" textLength="1146.8" 
clip-path="url(#breeze-ci-image-build-line-65)">──────────────────────────────────────────────────────────────
 [...]
+</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-r4" x="24.4" y="1630.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-66)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="1630.4" textLength="73.2" 
clip-path="url(#breeze-ci-image-build-line-66)">-build</text><text 
class="breeze-ci-image-build-r4" x="109.8" y="1630.4" textLength="195.2" clip- 
[...]
+</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-r1" x="549" y="1654.8" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-67)">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="1679.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-68)">│</text><text 
class="breeze-ci-image-build-r7" x="549" y="1679.2" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-68)">(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="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="73.2" 
clip-path="url(#breeze-ci-image-build-line-69)">-eager</text><text 
class="breeze-ci-image-build-r4" x="109.8" y="1703.6" textLength="390.4" clip- 
[...]
+</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-r1" x="549" y="1728" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-70)">(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
 cla [...]
+</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-r7" x="549" y="1752.4" textLength="890.6" 
clip-path="url(#breeze-ci-image-build-line-71)">(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="1776.8" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-72)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="1776.8" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-72)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="1801.2" 
textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-73)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="1801.2" textLength="622.2" 
clip-path="url(#breeze-ci-image-build-line-73)">&#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="1801.2" textLength="793" 
clip-path="url(#breeze-ci-image-build-line-73)"> [...]
+</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)">-builder</text><text 
class="breeze-ci-image-build-r1" x="341.6" y="1825.6" textLength="756.4" 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-r5" x="341.6" y="1850" textLength="756.4" 
clip-path="url(#breeze-ci-image-build-line-75)">[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;&#160;&#
 [...]
+</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="109.8" 
clip-path="url(#breeze-ci-image-build-line-76)">-platform</text><text 
class="breeze-ci-image-build-r1" x="341.6" y="1874.4" textLength="329.4" c [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1898.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-77)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="1898.8" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-77)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="1898.8" textLength="61" 
clip-path="url(#breeze-ci-image-build-line-77)">-push</text><text 
class="breeze-ci-image-build-r1" x="341.6" y="1898.8" textLength="353.8" 
clip-pat [...]
+</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="97.6" 
clip-path="url(#breeze-ci-image-build-line-78)">-prepare</text><text 
class="breeze-ci-image-build-r4" x="134.2" y="1923.2" textLength="158.6" cli 
[...]
+</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-r1" x="341.6" y="1947.6" textLength="1098" 
clip-path="url(#breeze-ci-image-build-line-79)">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="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="280.6" 
clip-path="url(#breeze-ci-image-build-line-81)">&#160;Github&#160;authentication&#160;</text><text
 class="breeze-ci-image-build-r5" x="305" y="1996.4" textLength="1134.6" 
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="85.4" 
clip-path="url(#breeze-ci-image-build-line-82)">-github</text><text 
class="breeze-ci-image-build-r4" x="122" y="2020.8" textLength="134.2" clip-p 
[...]
+</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="85.4" 
clip-path="url(#breeze-ci-image-build-line-83)">-github</text><text 
class="breeze-ci-image-build-r4" x="122" y="2045.2" textLength="73.2" clip-pa 
[...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2069.6" 
textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-84)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="2069.6" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-84)">
+</text><text class="breeze-ci-image-build-r5" x="0" y="2094" textLength="24.4" 
clip-path="url(#breeze-ci-image-build-line-85)">╭─</text><text 
class="breeze-ci-image-build-r5" x="24.4" y="2094" textLength="195.2" 
clip-path="url(#breeze-ci-image-build-line-85)">&#160;Common&#160;options&#160;</text><text
 class="breeze-ci-image-build-r5" x="219.6" y="2094" textLength="1220" 
clip-path="url(#breeze-ci-image-build-line-85)">──────────────────────────────────────────────────────────────────────
 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2118.4" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-86)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2118.4" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-86)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="2118.4" textLength="85.4" 
clip-path="url(#breeze-ci-image-build-line-86)">-answer</text><text 
class="breeze-ci-image-build-r6" x="158.6" y="2118.4" textLength="24.4" clip- 
[...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2142.8" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-87)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2142.8" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-87)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="2142.8" textLength="48.8" 
clip-path="url(#breeze-ci-image-build-line-87)">-dry</text><text 
class="breeze-ci-image-build-r4" x="85.4" y="2142.8" textLength="48.8" 
clip-path [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2167.2" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-88)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2167.2" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-88)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="2167.2" textLength="97.6" 
clip-path="url(#breeze-ci-image-build-line-88)">-verbose</text><text 
class="breeze-ci-image-build-r6" x="158.6" y="2167.2" textLength="24.4" clip 
[...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2191.6" 
textLength="12.2" clip-path="url(#breeze-ci-image-build-line-89)">│</text><text 
class="breeze-ci-image-build-r4" x="24.4" y="2191.6" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-89)">-</text><text 
class="breeze-ci-image-build-r4" x="36.6" y="2191.6" textLength="61" 
clip-path="url(#breeze-ci-image-build-line-89)">-help</text><text 
class="breeze-ci-image-build-r6" x="158.6" y="2191.6" textLength="24.4" 
clip-path [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="2216" textLength="1464" 
clip-path="url(#breeze-ci-image-build-line-90)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-ci-image-build-r1" x="1464" y="2216" textLength="12.2" 
clip-path="url(#breeze-ci-image-build-line-90)">
 </text>
     </g>
     </g>
diff --git a/images/breeze/output_ci-image_build.txt 
b/images/breeze/output_ci-image_build.txt
index e3df365cb4..efab651ef7 100644
--- a/images/breeze/output_ci-image_build.txt
+++ b/images/breeze/output_ci-image_build.txt
@@ -1 +1 @@
-fd70dd26b3009e8c5d2afa843084ecc1
+9bc9d889340bf7fc3b30ccad2c231257
diff --git a/images/breeze/output_prod-image_build.svg 
b/images/breeze/output_prod-image_build.svg
index 213e56bd2e..be1e4a9a93 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 2538.7999999999997" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 2563.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="2487.7999999999997" />
+      <rect x="0" y="0" width="1463.0" height="2512.2" />
     </clipPath>
     <clipPath id="breeze-prod-image-build-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -348,9 +348,12 @@
 <clipPath id="breeze-prod-image-build-line-100">
     <rect x="0" y="2441.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-prod-image-build-line-101">
+    <rect x="0" y="2465.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="2536.8" 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="2561.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"/>
@@ -435,33 +438,34 @@
 </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)">-install</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)">-install</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-r1" x="536.8" y="1825.6" textLength="97.6" 
clip-path="url(#breeze-prod-image-build-line-74)">Implies&#160;</text><text 
class="breeze-prod-image-build-r4" x="634.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="646.6" y="1825.6" t [...]
-</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)">-cleanup</text><text 
class="breeze-prod-image-build-r4" x="134.2" y="1850" textLength="97.6 [...]
-</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-r1" x="536.8" y="1874.4" textLength="170.8" 
clip-path="url(#breeze-prod-image-build-line-76)">together&#160;with&#160;</text><text
 class="breeze-prod-image-build-r4" x="707.6" y="1874.4" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-76)">-</text><text 
class="breeze-prod-image-build-r4" x="719.8"  [...]
-</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="48.8" 
clip-path="url(#breeze-prod-image-build-line-77)">-use</text><text 
class="breeze-prod-image-build-r4" x="85.4" y="1898.8" textLength="4 [...]
-</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-r1" x="536.8" y="1923.2" textLength="902.8" 
clip-path="url(#breeze-prod-image-build-line-78)">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="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)">-disable</text><text 
class="breeze-prod-image-build-r4" x="134.2" 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-r4" x="24.4" y="1972" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-80)">-</text><text 
class="breeze-prod-image-build-r4" x="36.6" y="1972" textLength="97.6" 
clip-path="url(#breeze-prod-image-build-line-80)">-disable</text><text 
class="breeze-prod-image-build-r4" x="134.2" y="1972" textLength="317. [...]
-</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="97.6" 
clip-path="url(#breeze-prod-image-build-line-81)">-disable</text><text 
class="breeze-prod-image-build-r4" x="134.2" y="1996.4" textLeng [...]
-</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)">-disable</text><text 
class="breeze-prod-image-build-r4" x="134.2" y="2020.8" textLeng [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2045.2" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-83)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="2045.2" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-83)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2069.6" 
textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-84)">╭─</text><text 
class="breeze-prod-image-build-r5" x="24.4" y="2069.6" textLength="622.2" 
clip-path="url(#breeze-prod-image-build-line-84)">&#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="2069.6" textLength="793" 
clip-path="url(#breeze-prod-image-buil [...]
-</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="97.6" 
clip-path="url(#breeze-prod-image-build-line-85)">-builder</text><text 
class="breeze-prod-image-build-r1" x="341.6" y="2094" textLength="756. [...]
-</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-r5" x="341.6" y="2118.4" textLength="756.4" 
clip-path="url(#breeze-prod-image-build-line-86)">[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="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="109.8" 
clip-path="url(#breeze-prod-image-build-line-87)">-platform</text><text 
class="breeze-prod-image-build-r1" x="341.6" y="2142.8" textLe [...]
-</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="61" 
clip-path="url(#breeze-prod-image-build-line-88)">-push</text><text 
class="breeze-prod-image-build-r1" x="341.6" y="2167.2" textLength="3 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2191.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-89)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2191.6" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-89)">-</text><text 
class="breeze-prod-image-build-r4" x="36.6" y="2191.6" textLength="97.6" 
clip-path="url(#breeze-prod-image-build-line-89)">-prepare</text><text 
class="breeze-prod-image-build-r4" x="134.2" y="2191.6" textLeng [...]
-</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-r1" x="341.6" y="2216" textLength="1098" 
clip-path="url(#breeze-prod-image-build-line-90)">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;&#
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2240.4" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-91)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="2240.4" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-91)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2264.8" 
textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-92)">╭─</text><text 
class="breeze-prod-image-build-r5" x="24.4" y="2264.8" textLength="280.6" 
clip-path="url(#breeze-prod-image-build-line-92)">&#160;Github&#160;authentication&#160;</text><text
 class="breeze-prod-image-build-r5" x="305" y="2264.8" textLength="1134.6" 
clip-path="url(#breeze-prod-image-build-line-92)">─────────────────────────────────────────────
 [...]
-</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="85.4" 
clip-path="url(#breeze-prod-image-build-line-93)">-github</text><text 
class="breeze-prod-image-build-r4" x="122" y="2289.2" textLength= [...]
-</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="85.4" 
clip-path="url(#breeze-prod-image-build-line-94)">-github</text><text 
class="breeze-prod-image-build-r4" x="122" y="2313.6" textLength= [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2338" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-95)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="2338" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-95)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2362.4" 
textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-96)">╭─</text><text 
class="breeze-prod-image-build-r5" x="24.4" y="2362.4" textLength="195.2" 
clip-path="url(#breeze-prod-image-build-line-96)">&#160;Common&#160;options&#160;</text><text
 class="breeze-prod-image-build-r5" x="219.6" y="2362.4" textLength="1220" 
clip-path="url(#breeze-prod-image-build-line-96)">────────────────────────────────────────────────────
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2386.8" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-97)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2386.8" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-97)">-</text><text 
class="breeze-prod-image-build-r4" x="36.6" y="2386.8" textLength="85.4" 
clip-path="url(#breeze-prod-image-build-line-97)">-answer</text><text 
class="breeze-prod-image-build-r6" x="158.6" y="2386.8" textLengt [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2411.2" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-98)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2411.2" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-98)">-</text><text 
class="breeze-prod-image-build-r4" x="36.6" y="2411.2" textLength="48.8" 
clip-path="url(#breeze-prod-image-build-line-98)">-dry</text><text 
class="breeze-prod-image-build-r4" x="85.4" y="2411.2" textLength="4 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2435.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-99)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2435.6" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-99)">-</text><text 
class="breeze-prod-image-build-r4" x="36.6" y="2435.6" textLength="97.6" 
clip-path="url(#breeze-prod-image-build-line-99)">-verbose</text><text 
class="breeze-prod-image-build-r6" x="158.6" y="2435.6" textLeng [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2460" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-100)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2460" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-100)">-</text><text 
class="breeze-prod-image-build-r4" x="36.6" y="2460" textLength="61" 
clip-path="url(#breeze-prod-image-build-line-100)">-help</text><text 
class="breeze-prod-image-build-r6" x="158.6" y="2460" textLength="24.4"  [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2484.4" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-101)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="2484.4" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-101)">
+</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="97.6" 
clip-path="url(#breeze-prod-image-build-line-76)">-cleanup</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-r1" x="536.8" y="1898.8" textLength="170.8" 
clip-path="url(#breeze-prod-image-build-line-77)">together&#160;with&#160;</text><text
 class="breeze-prod-image-build-r4" x="707.6" y="1898.8" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-77)">-</text><text 
class="breeze-prod-image-build-r4" x="719.8"  [...]
+</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="48.8" 
clip-path="url(#breeze-prod-image-build-line-78)">-use</text><text 
class="breeze-prod-image-build-r4" x="85.4" y="1923.2" textLength="4 [...]
+</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-r1" x="536.8" y="1947.6" textLength="902.8" 
clip-path="url(#breeze-prod-image-build-line-79)">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="1972" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-80)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1972" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-80)">-</text><text 
class="breeze-prod-image-build-r4" x="36.6" y="1972" textLength="97.6" 
clip-path="url(#breeze-prod-image-build-line-80)">-disable</text><text 
class="breeze-prod-image-build-r4" x="134.2" y="1972" textLength="231. [...]
+</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="97.6" 
clip-path="url(#breeze-prod-image-build-line-81)">-disable</text><text 
class="breeze-prod-image-build-r4" x="134.2" y="1996.4" textLeng [...]
+</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)">-disable</text><text 
class="breeze-prod-image-build-r4" x="134.2" 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-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)">-disable</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="1464" 
clip-path="url(#breeze-prod-image-build-line-84)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="2069.6" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-84)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2094" 
textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-85)">╭─</text><text 
class="breeze-prod-image-build-r5" x="24.4" y="2094" textLength="622.2" 
clip-path="url(#breeze-prod-image-build-line-85)">&#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="2094" textLength="793" 
clip-path="url(#breeze-prod-image-build-line [...]
+</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)">-builder</text><text 
class="breeze-prod-image-build-r1" x="341.6" 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-r5" x="341.6" y="2142.8" textLength="756.4" 
clip-path="url(#breeze-prod-image-build-line-87)">[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="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="109.8" 
clip-path="url(#breeze-prod-image-build-line-88)">-platform</text><text 
class="breeze-prod-image-build-r1" x="341.6" y="2167.2" textLe [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2191.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-89)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2191.6" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-89)">-</text><text 
class="breeze-prod-image-build-r4" x="36.6" y="2191.6" textLength="61" 
clip-path="url(#breeze-prod-image-build-line-89)">-push</text><text 
class="breeze-prod-image-build-r1" x="341.6" y="2191.6" textLength="3 [...]
+</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="97.6" 
clip-path="url(#breeze-prod-image-build-line-90)">-prepare</text><text 
class="breeze-prod-image-build-r4" x="134.2" y="2216" textLength="158. [...]
+</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-r1" x="341.6" y="2240.4" textLength="1098" 
clip-path="url(#breeze-prod-image-build-line-91)">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="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="280.6" 
clip-path="url(#breeze-prod-image-build-line-93)">&#160;Github&#160;authentication&#160;</text><text
 class="breeze-prod-image-build-r5" x="305" y="2289.2" textLength="1134.6" 
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="85.4" 
clip-path="url(#breeze-prod-image-build-line-94)">-github</text><text 
class="breeze-prod-image-build-r4" x="122" y="2313.6" textLength= [...]
+</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="85.4" 
clip-path="url(#breeze-prod-image-build-line-95)">-github</text><text 
class="breeze-prod-image-build-r4" x="122" y="2338" textLength="73.2" c [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2362.4" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-96)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="2362.4" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-96)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2386.8" 
textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-97)">╭─</text><text 
class="breeze-prod-image-build-r5" x="24.4" y="2386.8" textLength="195.2" 
clip-path="url(#breeze-prod-image-build-line-97)">&#160;Common&#160;options&#160;</text><text
 class="breeze-prod-image-build-r5" x="219.6" y="2386.8" textLength="1220" 
clip-path="url(#breeze-prod-image-build-line-97)">────────────────────────────────────────────────────
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2411.2" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-98)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2411.2" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-98)">-</text><text 
class="breeze-prod-image-build-r4" x="36.6" y="2411.2" textLength="85.4" 
clip-path="url(#breeze-prod-image-build-line-98)">-answer</text><text 
class="breeze-prod-image-build-r6" x="158.6" y="2411.2" textLengt [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2435.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-99)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2435.6" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-99)">-</text><text 
class="breeze-prod-image-build-r4" x="36.6" y="2435.6" textLength="48.8" 
clip-path="url(#breeze-prod-image-build-line-99)">-dry</text><text 
class="breeze-prod-image-build-r4" x="85.4" y="2435.6" textLength="4 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2460" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-100)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2460" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-100)">-</text><text 
class="breeze-prod-image-build-r4" x="36.6" y="2460" textLength="97.6" 
clip-path="url(#breeze-prod-image-build-line-100)">-verbose</text><text 
class="breeze-prod-image-build-r6" x="158.6" y="2460" textLength="2 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2484.4" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-101)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2484.4" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-101)">-</text><text 
class="breeze-prod-image-build-r4" x="36.6" y="2484.4" textLength="61" 
clip-path="url(#breeze-prod-image-build-line-101)">-help</text><text 
class="breeze-prod-image-build-r6" x="158.6" y="2484.4" textLength [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2508.8" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-102)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="2508.8" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-102)">
 </text>
     </g>
     </g>
diff --git a/images/breeze/output_prod-image_build.txt 
b/images/breeze/output_prod-image_build.txt
index 726e3487a8..31e337c7a4 100644
--- a/images/breeze/output_prod-image_build.txt
+++ b/images/breeze/output_prod-image_build.txt
@@ -1 +1 @@
-43490a03007cb452ee5780d39149bbfb
+7702f83f3baddede5ba32efa1bef86ac
diff --git a/scripts/docker/install_mysql.sh b/scripts/docker/install_mysql.sh
index 3dbb2280c9..8721a4263c 100644
--- a/scripts/docker/install_mysql.sh
+++ b/scripts/docker/install_mysql.sh
@@ -36,7 +36,7 @@ COLOR_RESET=$'\e[0m'
 readonly COLOR_RESET
 
 : "${INSTALL_MYSQL_CLIENT:?Should be true or false}"
-: "${INSTALL_MYSQL_CLIENT_TYPE:-mysql}"
+: "${INSTALL_MYSQL_CLIENT_TYPE:-mariadb}"
 
 export_key() {
     local key="${1}"
@@ -75,7 +75,7 @@ install_mysql_client() {
         exit 1
     fi
 
-    export_key "467B942D3A79BD29" "mysql"
+    export_key "B7B3B788A8D3785C" "mysql"
 
     echo
     echo "${COLOR_BLUE}Installing Oracle MySQL client version 
${MYSQL_LTS_VERSION}: ${1}${COLOR_RESET}"
@@ -87,6 +87,13 @@ install_mysql_client() {
     apt-get install --no-install-recommends -y "${packages[@]}"
     apt-get autoremove -yqq --purge
     apt-get clean && rm -rf /var/lib/apt/lists/*
+
+    # Remove mysql repository from sources.list.d as MySQL repos have a basic 
flaw that they put expiry
+    # date on their GPG signing keys and they sign their repo with those keys. 
This means that after a
+    # certain date, the GPG key becomes invalid and if you have the repository 
added in your sources.list
+    # then you will not be able to install anything from any other repository. 
This id unlike any other
+    # repository we have seen (for example Postgres, MariaDB, MsSQL - all have 
non-expiring signing keys)
+    rm /etc/apt/sources.list.d/mysql.list
 }
 
 install_mariadb_client() {
@@ -136,6 +143,9 @@ install_mariadb_client() {
 if [[ ${INSTALL_MYSQL_CLIENT:="true"} == "true" ]]; then
     if [[ $(uname -m) == "arm64" || $(uname -m) == "aarch64" ]]; then
         INSTALL_MYSQL_CLIENT_TYPE="mariadb"
+        echo
+        echo "${COLOR_YELLOW}Client forced to mariadb for ARM${COLOR_RESET}"
+        echo
     fi
 
     if [[ "${INSTALL_MYSQL_CLIENT_TYPE}" == "mysql" ]]; then

Reply via email to