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

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


The following commit(s) were added to refs/heads/v3-1-test by this push:
     new 062a00e3a8a [v3-1-test] Fail prod image release when constraint build 
fails (#62387) (#62833)
062a00e3a8a is described below

commit 062a00e3a8a6f3705a2ec2cab0290155cedf281b
Author: Jarek Potiuk <[email protected]>
AuthorDate: Wed Mar 4 01:08:12 2026 +0100

    [v3-1-test] Fail prod image release when constraint build fails (#62387) 
(#62833)
    
    When constraint build fails, building prod and ci image by default
    fall back to "no-constraints" build in order to account for
    newly added or modified dependencies that conflict with constraints,
    however in case of release build, such fallback should not happen -
    simply the build should fail if constraints are conflicting.
    
    This avoids the case that we had with virtualenv being removed
    from PyPI https://github.com/pypa/virtualenv/issues/3061
    (cherry picked from commit 62121a098c0af6b1b454645d8b1262f92cc0c88b)
    
    
    Closes: #62349
---
 Dockerfile                                         |  17 ++-
 Dockerfile.ci                                      |  17 +++
 dev/breeze/doc/images/output_prod-image_build.svg  | 152 ++++++++++++---------
 dev/breeze/doc/images/output_prod-image_build.txt  |   2 +-
 .../commands/common_image_options.py               |   8 ++
 .../commands/production_image_commands.py          |   4 +
 .../commands/production_image_commands_config.py   |   1 +
 .../commands/release_management_commands.py        |   1 +
 .../src/airflow_breeze/params/build_prod_params.py |   4 +
 .../airflow_breeze/utils/docker_command_utils.py   |   3 +-
 .../docker/install_airflow_when_building_images.sh |  12 ++
 11 files changed, 156 insertions(+), 65 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index 320a2c218f6..e4fd516b5dc 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -48,7 +48,7 @@ ARG AIRFLOW_UID="50000"
 ARG AIRFLOW_USER_HOME_DIR=/home/airflow
 
 # latest released version here
-ARG AIRFLOW_VERSION="3.1.3"
+ARG AIRFLOW_VERSION="3.1.7"
 
 ARG BASE_IMAGE="debian:bookworm-slim"
 ARG AIRFLOW_PYTHON_VERSION="3.12.13"
@@ -1155,6 +1155,12 @@ function install_from_sources() {
         fi
         set +x
         if [[ ${fallback_no_constraints_installation} == "true" ]]; then
+            if [[ ${AIRFLOW_FALLBACK_NO_CONSTRAINTS_INSTALLATION} != "true" 
]]; then
+                echo
+                echo "${COLOR_RED}Failing because constraints installation 
failed and fallback is disabled.${COLOR_RESET}"
+                echo
+                exit 1
+            fi
             echo
             echo "${COLOR_YELLOW}Likely pyproject.toml has new dependencies 
conflicting with constraints.${COLOR_RESET}"
             echo
@@ -1204,6 +1210,12 @@ function install_from_external_spec() {
         set -x
         if ! ${PACKAGING_TOOL_CMD} install ${EXTRA_INSTALL_FLAGS} 
${ADDITIONAL_PIP_INSTALL_FLAGS} ${installation_command_flags} --constraint 
"${HOME}/constraints.txt"; then
             set +x
+            if [[ ${AIRFLOW_FALLBACK_NO_CONSTRAINTS_INSTALLATION} != "true" 
]]; then
+                echo
+                echo "${COLOR_RED}Failing because constraints installation 
failed and fallback is disabled.${COLOR_RESET}"
+                echo
+                exit 1
+            fi
             echo
             echo "${COLOR_YELLOW}Likely pyproject.toml has new dependencies 
conflicting with constraints.${COLOR_RESET}"
             echo
@@ -1796,6 +1808,8 @@ ARG AIRFLOW_CONSTRAINTS_MODE="constraints"
 ARG AIRFLOW_CONSTRAINTS_REFERENCE=""
 ARG AIRFLOW_CONSTRAINTS_LOCATION=""
 ARG DEFAULT_CONSTRAINTS_BRANCH="constraints-main"
+# By default do not fallback to installation without constraints because it 
can hide problems with constraints
+ARG AIRFLOW_FALLBACK_NO_CONSTRAINTS_INSTALLATION="false"
 
 # By default PIP has progress bar but you can disable it.
 ARG PIP_PROGRESS_BAR
@@ -1850,6 +1864,7 @@ ENV AIRFLOW_PIP_VERSION=${AIRFLOW_PIP_VERSION} \
     AIRFLOW_CONSTRAINTS_MODE=${AIRFLOW_CONSTRAINTS_MODE} \
     AIRFLOW_CONSTRAINTS_REFERENCE=${AIRFLOW_CONSTRAINTS_REFERENCE} \
     AIRFLOW_CONSTRAINTS_LOCATION=${AIRFLOW_CONSTRAINTS_LOCATION} \
+    
AIRFLOW_FALLBACK_NO_CONSTRAINTS_INSTALLATION=${AIRFLOW_FALLBACK_NO_CONSTRAINTS_INSTALLATION}
 \
     DEFAULT_CONSTRAINTS_BRANCH=${DEFAULT_CONSTRAINTS_BRANCH} \
     PATH=${AIRFLOW_USER_HOME_DIR}/.local/bin:${PATH} \
     PIP_PROGRESS_BAR=${PIP_PROGRESS_BAR} \
diff --git a/Dockerfile.ci b/Dockerfile.ci
index a800895c3a0..0795a68222d 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -908,6 +908,12 @@ function install_from_sources() {
         fi
         set +x
         if [[ ${fallback_no_constraints_installation} == "true" ]]; then
+            if [[ ${AIRFLOW_FALLBACK_NO_CONSTRAINTS_INSTALLATION} != "true" 
]]; then
+                echo
+                echo "${COLOR_RED}Failing because constraints installation 
failed and fallback is disabled.${COLOR_RESET}"
+                echo
+                exit 1
+            fi
             echo
             echo "${COLOR_YELLOW}Likely pyproject.toml has new dependencies 
conflicting with constraints.${COLOR_RESET}"
             echo
@@ -957,6 +963,12 @@ function install_from_external_spec() {
         set -x
         if ! ${PACKAGING_TOOL_CMD} install ${EXTRA_INSTALL_FLAGS} 
${ADDITIONAL_PIP_INSTALL_FLAGS} ${installation_command_flags} --constraint 
"${HOME}/constraints.txt"; then
             set +x
+            if [[ ${AIRFLOW_FALLBACK_NO_CONSTRAINTS_INSTALLATION} != "true" 
]]; then
+                echo
+                echo "${COLOR_RED}Failing because constraints installation 
failed and fallback is disabled.${COLOR_RESET}"
+                echo
+                exit 1
+            fi
             echo
             echo "${COLOR_YELLOW}Likely pyproject.toml has new dependencies 
conflicting with constraints.${COLOR_RESET}"
             echo
@@ -1564,6 +1576,7 @@ ENV DEV_APT_COMMAND=${DEV_APT_COMMAND} \
     ADDITIONAL_DEV_APT_DEPS=${ADDITIONAL_DEV_APT_DEPS} \
     ADDITIONAL_DEV_APT_COMMAND=${ADDITIONAL_DEV_APT_COMMAND}
 
+
 ARG AIRFLOW_PYTHON_VERSION="3.12.13"
 ENV AIRFLOW_PYTHON_VERSION=${AIRFLOW_PYTHON_VERSION}
 ENV GOLANG_MAJOR_MINOR_VERSION="1.25.5"
@@ -1646,6 +1659,9 @@ ARG 
AIRFLOW_CONSTRAINTS_MODE="constraints-source-providers"
 ARG AIRFLOW_CONSTRAINTS_REFERENCE=""
 ARG AIRFLOW_CONSTRAINTS_LOCATION=""
 ARG DEFAULT_CONSTRAINTS_BRANCH="constraints-main"
+# By default fallback to installation without constraints because in CI image 
it should always be tried
+ARG AIRFLOW_FALLBACK_NO_CONSTRAINTS_INSTALLATION="true"
+
 # By changing the epoch we can force reinstalling Airflow and pip all 
dependencies
 # It can also be overwritten manually by setting the AIRFLOW_CI_BUILD_EPOCH 
environment variable.
 ARG AIRFLOW_CI_BUILD_EPOCH="10"
@@ -1675,6 +1691,7 @@ ENV AIRFLOW_REPO=${AIRFLOW_REPO}\
     AIRFLOW_CONSTRAINTS_MODE=${AIRFLOW_CONSTRAINTS_MODE} \
     AIRFLOW_CONSTRAINTS_REFERENCE=${AIRFLOW_CONSTRAINTS_REFERENCE} \
     AIRFLOW_CONSTRAINTS_LOCATION=${AIRFLOW_CONSTRAINTS_LOCATION} \
+    
AIRFLOW_FALLBACK_NO_CONSTRAINTS_INSTALLATION=${AIRFLOW_FALLBACK_NO_CONSTRAINTS_INSTALLATION}
 \
     DEFAULT_CONSTRAINTS_BRANCH=${DEFAULT_CONSTRAINTS_BRANCH} \
     AIRFLOW_CI_BUILD_EPOCH=${AIRFLOW_CI_BUILD_EPOCH} \
     AIRFLOW_VERSION=${AIRFLOW_VERSION} \
diff --git a/dev/breeze/doc/images/output_prod-image_build.svg 
b/dev/breeze/doc/images/output_prod-image_build.svg
index e2da038343f..9920a16b945 100644
--- a/dev/breeze/doc/images/output_prod-image_build.svg
+++ b/dev/breeze/doc/images/output_prod-image_build.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2660.7999999999997" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 2831.6" 
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="2609.7999999999997" />
+      <rect x="0" y="0" width="1463.0" height="2780.6" />
     </clipPath>
     <clipPath id="breeze-prod-image-build-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -363,9 +363,30 @@
 <clipPath id="breeze-prod-image-build-line-105">
     <rect x="0" y="2563.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-prod-image-build-line-106">
+    <rect x="0" y="2587.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-prod-image-build-line-107">
+    <rect x="0" y="2612.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-prod-image-build-line-108">
+    <rect x="0" y="2636.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-prod-image-build-line-109">
+    <rect x="0" y="2661.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-prod-image-build-line-110">
+    <rect x="0" y="2685.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-prod-image-build-line-111">
+    <rect x="0" y="2709.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-prod-image-build-line-112">
+    <rect x="0" y="2734.3" 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="2658.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="2829.6" 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"/>
@@ -423,65 +444,72 @@
 </text><text class="breeze-prod-image-build-r5" x="0" y="1118" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-45)">│</text><text 
class="breeze-prod-image-build-r5" x="439.2" y="1118" textLength="829.6" 
clip-path="url(#breeze-prod-image-build-line-45)">[default:&#160;300;&#160;x&gt;=1]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="1142.4" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-46)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="1142.4" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-46)">
 </text><text class="breeze-prod-image-build-r5" x="0" y="1166.8" 
textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-47)">╭─</text><text 
class="breeze-prod-image-build-r5" x="24.4" y="1166.8" textLength="597.8" 
clip-path="url(#breeze-prod-image-build-line-47)">&#160;Selecting&#160;constraint&#160;location&#160;(for&#160;power&#160;users)&#160;</text><text
 class="breeze-prod-image-build-r5" x="622.2" y="1166.8" textLength="817.4" 
clip-path="url(#breeze-prod-image-build-line-47) [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1191.2" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-48)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1191.2" textLength="366" 
clip-path="url(#breeze-prod-image-build-line-48)">--airflow-constraints-location</text><text
 class="breeze-prod-image-build-r1" x="451.4" y="1191.2" textLength="902.8" 
clip-path="url(#breeze-prod-image-build-line-48)">Location&#160;of&#160;airflow&#160;constraints&#160;to&
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1215.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-49)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1215.6" textLength="317.2" 
clip-path="url(#breeze-prod-image-build-line-49)">--airflow-constraints-mode</text><text
 class="breeze-prod-image-build-r1" x="451.4" y="1215.6" textLength="866.2" 
clip-path="url(#breeze-prod-image-build-line-49)">Mode&#160;of&#160;constraints&#160;for&#160;Airflow&#160;
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1240" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-50)">│</text><text 
class="breeze-prod-image-build-r6" x="451.4" y="1240" textLength="866.2" 
clip-path="url(#breeze-prod-image-build-line-50)">(constraints&#160;|&#160;constraints-no-providers&#160;|&#160;constraints-source-providers)</text><text
 class="breeze-prod-image-build-r5" x="1451.8" y="1240" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-50 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1264.4" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-51)">│</text><text 
class="breeze-prod-image-build-r5" x="451.4" y="1264.4" textLength="866.2" 
clip-path="url(#breeze-prod-image-build-line-51)">[default:&#160;constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1288.8" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-52)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1288.8" textLength="378.2" 
clip-path="url(#breeze-prod-image-build-line-52)">--airflow-constraints-reference</text><text
 class="breeze-prod-image-build-r1" x="451.4" y="1288.8" textLength="634.4" 
clip-path="url(#breeze-prod-image-build-line-52)">Constraint&#160;reference&#160;to&#160;use&#160;when
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1313.2" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-53)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="1313.2" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-53)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1337.6" 
textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-54)">╭─</text><text 
class="breeze-prod-image-build-r5" x="24.4" y="1337.6" textLength="634.4" 
clip-path="url(#breeze-prod-image-build-line-54)">&#160;Choosing&#160;dependencies&#160;and&#160;extras&#160;(for&#160;power&#160;users)&#160;</text><text
 class="breeze-prod-image-build-r5" x="658.8" y="1337.6" textLength="780.8" 
clip-path="url(#breeze-prod-image-build- [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1362" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-55)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1362" textLength="195.2" 
clip-path="url(#breeze-prod-image-build-line-55)">--airflow-extras</text><text 
class="breeze-prod-image-build-r1" x="463.6" y="1362" textLength="976" 
clip-path="url(#breeze-prod-image-build-line-55)">Extras&#160;to&#160;install&#160;by&#160;default.&#160;&#160;&#160;&#160;&#
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1386.4" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-56)">│</text><text 
class="breeze-prod-image-build-r6" x="463.6" y="1386.4" textLength="976" 
clip-path="url(#breeze-prod-image-build-line-56)">(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;
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1410.8" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-57)">│</text><text 
class="breeze-prod-image-build-r5" x="463.6" y="1410.8" textLength="976" 
clip-path="url(#breeze-prod-image-build-line-57)">[default:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-prod-image-build-r5" x="0" y="1435.2" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-58)">│</text><text 
class="breeze-prod-image-build-r5" x="463.6" y="1435.2" textLength="976" 
clip-path="url(#breeze-prod-image-build-line-58)">aiobotocore,amazon,async,celery,cncf-kubernetes,common-io,common-messaging,dock…</text><text
 class="breeze-prod-image-build-r5" x="1451.8" y="1435.2" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-58)">│</t [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1459.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-59)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1459.6" textLength="329.4" 
clip-path="url(#breeze-prod-image-build-line-59)">--additional-airflow-extras</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1459.6" textLength="768.6" 
clip-path="url(#breeze-prod-image-build-line-59)">Additional&#160;extra&#160;package&#160;while&#160;insta
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1484" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-60)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1484" textLength="292.8" 
clip-path="url(#breeze-prod-image-build-line-60)">--additional-python-deps</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1484" textLength="768.6" 
clip-path="url(#breeze-prod-image-build-line-60)">Additional&#160;python&#160;dependencies&#160;to&#160;use&#160;wh
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1508.4" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-61)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1508.4" textLength="170.8" 
clip-path="url(#breeze-prod-image-build-line-61)">--dev-apt-deps</text><text 
class="breeze-prod-image-build-r1" x="463.6" y="1508.4" textLength="646.6" 
clip-path="url(#breeze-prod-image-build-line-61)">Apt&#160;dev&#160;dependencies&#160;to&#160;use&#160;when&#160;buildi
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1532.8" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-62)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1532.8" textLength="305" 
clip-path="url(#breeze-prod-image-build-line-62)">--additional-dev-apt-deps</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1532.8" textLength="780.8" 
clip-path="url(#breeze-prod-image-build-line-62)">Additional&#160;apt&#160;dev&#160;dependencies&#160;to&#160;
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1557.2" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-63)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1557.2" textLength="207.4" 
clip-path="url(#breeze-prod-image-build-line-63)">--dev-apt-command</text><text 
class="breeze-prod-image-build-r1" x="463.6" y="1557.2" textLength="622.2" 
clip-path="url(#breeze-prod-image-build-line-63)">Command&#160;executed&#160;before&#160;dev&#160;apt&#160;deps&#160
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1581.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-64)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1581.6" textLength="341.6" 
clip-path="url(#breeze-prod-image-build-line-64)">--additional-dev-apt-command</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1581.6" textLength="756.4" 
clip-path="url(#breeze-prod-image-build-line-64)">Additional&#160;command&#160;executed&#160;before&#160;
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1606" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-65)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1606" textLength="292.8" 
clip-path="url(#breeze-prod-image-build-line-65)">--additional-dev-apt-env</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1606" textLength="805.2" 
clip-path="url(#breeze-prod-image-build-line-65)">Additional&#160;environment&#160;variables&#160;set&#160;when&#16
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1630.4" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-66)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1630.4" textLength="219.6" 
clip-path="url(#breeze-prod-image-build-line-66)">--runtime-apt-deps</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1630.4" textLength="695.4" 
clip-path="url(#breeze-prod-image-build-line-66)">Apt&#160;runtime&#160;dependencies&#160;to&#160;use&#160;when&#16
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1654.8" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-67)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1654.8" textLength="353.8" 
clip-path="url(#breeze-prod-image-build-line-67)">--additional-runtime-apt-deps</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1654.8" textLength="829.6" 
clip-path="url(#breeze-prod-image-build-line-67)">Additional&#160;apt&#160;runtime&#160;dependencies&#16
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1679.2" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-68)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1679.2" textLength="256.2" 
clip-path="url(#breeze-prod-image-build-line-68)">--runtime-apt-command</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1679.2" textLength="671" 
clip-path="url(#breeze-prod-image-build-line-68)">Command&#160;executed&#160;before&#160;runtime&#160;apt&#160;dep
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1703.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-69)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1703.6" textLength="390.4" 
clip-path="url(#breeze-prod-image-build-line-69)">--additional-runtime-apt-command</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1703.6" textLength="805.2" 
clip-path="url(#breeze-prod-image-build-line-69)">Additional&#160;command&#160;executed&#160;before&#
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1728" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-70)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1728" textLength="341.6" 
clip-path="url(#breeze-prod-image-build-line-70)">--additional-runtime-apt-env</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1728" textLength="854" 
clip-path="url(#breeze-prod-image-build-line-70)">Additional&#160;environment&#160;variables&#160;set&#160;when&#
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="1752.4" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-71)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="1752.4" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-71)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="1776.8" 
textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-72)">╭─</text><text 
class="breeze-prod-image-build-r5" x="24.4" y="1776.8" textLength="817.4" 
clip-path="url(#breeze-prod-image-build-line-72)">&#160;Advanced&#160;customization&#160;options&#160;(for&#160;specific&#160;customization&#160;needs)&#160;</text><text
 class="breeze-prod-image-build-r5" x="841.8" y="1776.8" textLength="597.8" 
clip-path="url(#breeze-pr [...]
-</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="256.2" 
clip-path="url(#breeze-prod-image-build-line-73)">--installation-method</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="1801.2" textLength="463.6" 
clip-path="url(#breeze-prod-image-build-line-73)">Install&#160;Airflow&#160;from:&#160;sources&#160;or&#160;PyPI
 [...]
-</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-r5" x="597.8" y="1825.6" textLength="463.6" 
clip-path="url(#breeze-prod-image-build-line-74)">[default:&#160;.]&#160;&#160;&#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" [...]
-</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="329.4" 
clip-path="url(#breeze-prod-image-build-line-75)">--install-airflow-reference</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="1850" textLength="524.6" 
clip-path="url(#breeze-prod-image-build-line-75)">Install&#160;Airflow&#160;using&#160;GitHub&#160;tag&#160;or&#
 [...]
-</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="439.2" 
clip-path="url(#breeze-prod-image-build-line-76)">--install-distributions-from-context</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="1874.4" textLength="841.8" 
clip-path="url(#breeze-prod-image-build-line-76)">Install&#160;distributions&#160;from&#160;local
 [...]
-</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="597.8" y="1898.8" textLength="183" 
clip-path="url(#breeze-prod-image-build-line-77)">image.&#160;Implies&#160;</text><text
 class="breeze-prod-image-build-r4" x="780.8" y="1898.8" textLength="341.6" 
clip-path="url(#breeze-prod-image-build-line-77)">--disable-airflow-repo-cache</text><text
 class="breeze-prod [...]
-</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="329.4" 
clip-path="url(#breeze-prod-image-build-line-78)">--install-mysql-client-type</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="1923.2" textLength="475.8" 
clip-path="url(#breeze-prod-image-build-line-78)">Which&#160;client&#160;to&#160;choose&#160;when&#160;ins
 [...]
-</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="207.4" 
clip-path="url(#breeze-prod-image-build-line-79)">--cleanup-context</text><text 
class="breeze-prod-image-build-r1" x="597.8" y="1947.6" textLength="841.8" 
clip-path="url(#breeze-prod-image-build-line-79)">Clean&#160;up&#160;docker&#160;context&#160;files&#160;before&#160
 [...]
-</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-r1" x="597.8" y="1972" textLength="170.8" 
clip-path="url(#breeze-prod-image-build-line-80)">together&#160;with&#160;</text><text
 class="breeze-prod-image-build-r4" x="768.6" y="1972" textLength="439.2" 
clip-path="url(#breeze-prod-image-build-line-80)">--install-distributions-from-context</text><text
 class="breeze-p [...]
-</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="524.6" 
clip-path="url(#breeze-prod-image-build-line-81)">--use-constraints-for-context-distributions</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="1996.4" textLength="841.8" 
clip-path="url(#breeze-prod-image-build-line-81)">Uses&#160;constraints&#160;for&#160;cont
 [...]
-</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-r1" x="597.8" y="2020.8" textLength="841.8" 
clip-path="url(#breeze-prod-image-build-line-82)">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;</text><text
 class="breeze-prod-image-build-r5" x="1451.8" y= [...]
-</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="341.6" 
clip-path="url(#breeze-prod-image-build-line-83)">--disable-airflow-repo-cache</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="2045.2" textLength="658.8" 
clip-path="url(#breeze-prod-image-build-line-83)">Disable&#160;cache&#160;from&#160;Airflow&#160;reposito
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2069.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-84)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2069.6" textLength="427" 
clip-path="url(#breeze-prod-image-build-line-84)">--disable-mysql-client-installation</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="2069.6" textLength="341.6" 
clip-path="url(#breeze-prod-image-build-line-84)">Do&#160;not&#160;install&#160;MySQL&#160;client.</
 [...]
-</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="427" 
clip-path="url(#breeze-prod-image-build-line-85)">--disable-mssql-client-installation</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="2094" textLength="341.6" 
clip-path="url(#breeze-prod-image-build-line-85)">Do&#160;not&#160;install&#160;MsSQl&#160;client.</text><
 [...]
-</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="463.6" 
clip-path="url(#breeze-prod-image-build-line-86)">--disable-postgres-client-installation</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="2118.4" textLength="378.2" 
clip-path="url(#breeze-prod-image-build-line-86)">Do&#160;not&#160;install&#160;Postgres&#160;c
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2142.8" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-87)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="2142.8" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-87)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2167.2" 
textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-88)">╭─</text><text 
class="breeze-prod-image-build-r5" x="24.4" y="2167.2" textLength="622.2" 
clip-path="url(#breeze-prod-image-build-line-88)">&#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="2167.2" textLength="793" 
clip-path="url(#breeze-prod-image-buil [...]
-</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="109.8" 
clip-path="url(#breeze-prod-image-build-line-89)">--builder</text><text 
class="breeze-prod-image-build-r1" x="341.6" y="2191.6" textLength="756.4" 
clip-path="url(#breeze-prod-image-build-line-89)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;build
 [...]
-</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-r5" x="341.6" y="2216" textLength="756.4" 
clip-path="url(#breeze-prod-image-build-line-90)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2240.4" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-91)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2240.4" textLength="122" 
clip-path="url(#breeze-prod-image-build-line-91)">--platform</text><text 
class="breeze-prod-image-build-r1" x="341.6" y="2240.4" textLength="1024.8" 
clip-path="url(#breeze-prod-image-build-line-91)">Platform&#160;for&#160;Airflow&#160;image.&#160;&#160;&#160;&#160;&#160;&#
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2264.8" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-92)">│</text><text 
class="breeze-prod-image-build-r6" x="341.6" y="2264.8" textLength="1024.8" 
clip-path="url(#breeze-prod-image-build-line-92)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64&#160;|&#160;linux/amd64,linux/arm64)</text><text
 class="breeze-prod-image-build-r5" x="1451.8" y="2264.8" textLength="12.2" 
clip-pa [...]
-</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="73.2" 
clip-path="url(#breeze-prod-image-build-line-93)">--push</text><text 
class="breeze-prod-image-build-r1" x="341.6" y="2289.2" textLength="353.8" 
clip-path="url(#breeze-prod-image-build-line-93)">Push&#160;image&#160;after&#160;building&#160;it.</text><text
 class="breeze-pr [...]
-</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="268.4" 
clip-path="url(#breeze-prod-image-build-line-94)">--prepare-buildx-cache</text><text
 class="breeze-prod-image-build-r1" x="341.6" y="2313.6" textLength="1098" 
clip-path="url(#breeze-prod-image-build-line-94)">Prepares&#160;build&#160;cache&#160;(this&#160;is&#160;done&#1
 [...]
-</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-r1" x="341.6" y="2338" textLength="1098" 
clip-path="url(#breeze-prod-image-build-line-95)">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="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="280.6" 
clip-path="url(#breeze-prod-image-build-line-97)">&#160;GitHub&#160;authentication&#160;</text><text
 class="breeze-prod-image-build-r5" x="305" y="2386.8" textLength="1134.6" 
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="231.8" 
clip-path="url(#breeze-prod-image-build-line-98)">--github-repository</text><text
 class="breeze-prod-image-build-r7" x="280.6" y="2411.2" textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-98)">-g</text><text 
class="breeze-prod-image-build-r1" x="329.4" y="24 [...]
-</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="170.8" 
clip-path="url(#breeze-prod-image-build-line-99)">--github-token</text><text 
class="breeze-prod-image-build-r1" x="329.4" y="2435.6" textLength="500.2" 
clip-path="url(#breeze-prod-image-build-line-99)">The&#160;token&#160;used&#160;to&#160;authenticate&#160;to&#160;GitHu
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2460" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-100)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="2460" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-100)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2484.4" 
textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-101)">╭─</text><text 
class="breeze-prod-image-build-r5" x="24.4" y="2484.4" textLength="195.2" 
clip-path="url(#breeze-prod-image-build-line-101)">&#160;Common&#160;options&#160;</text><text
 class="breeze-prod-image-build-r5" x="219.6" y="2484.4" textLength="1220" 
clip-path="url(#breeze-prod-image-build-line-101)">─────────────────────────────────────────────────
 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2508.8" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-102)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2508.8" textLength="97.6" 
clip-path="url(#breeze-prod-image-build-line-102)">--answer</text><text 
class="breeze-prod-image-build-r7" x="158.6" y="2508.8" textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-102)">-a</text><text 
class="breeze-prod-image-build-r1" x="207.4" y="2508.8" tex [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2533.2" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-103)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2533.2" textLength="109.8" 
clip-path="url(#breeze-prod-image-build-line-103)">--dry-run</text><text 
class="breeze-prod-image-build-r7" x="158.6" y="2533.2" textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-103)">-D</text><text 
class="breeze-prod-image-build-r1" x="207.4" y="2533.2" t [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2557.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-104)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2557.6" textLength="109.8" 
clip-path="url(#breeze-prod-image-build-line-104)">--verbose</text><text 
class="breeze-prod-image-build-r7" x="158.6" y="2557.6" textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-104)">-v</text><text 
class="breeze-prod-image-build-r1" x="207.4" y="2557.6" t [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2582" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-105)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2582" textLength="73.2" 
clip-path="url(#breeze-prod-image-build-line-105)">--help</text><text 
class="breeze-prod-image-build-r7" x="158.6" y="2582" textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-105)">-h</text><text 
class="breeze-prod-image-build-r1" x="207.4" y="2582" textLength="3 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="2606.4" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-106)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="2606.4" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-106)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1191.2" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-48)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1191.2" textLength="366" 
clip-path="url(#breeze-prod-image-build-line-48)">--airflow-constraints-location</text><text
 class="breeze-prod-image-build-r1" x="756.4" y="1191.2" textLength="683.2" 
clip-path="url(#breeze-prod-image-build-line-48)">Location&#160;of&#160;airflow&#160;constraints&#160;to&
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1215.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-49)">│</text><text 
class="breeze-prod-image-build-r1" x="756.4" y="1215.6" textLength="683.2" 
clip-path="url(#breeze-prod-image-build-line-49)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="1240" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-50)">│</text><text 
class="breeze-prod-image-build-r6" x="756.4" y="1240" textLength="683.2" 
clip-path="url(#breeze-prod-image-build-line-50)">(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;&#
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1264.4" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-51)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1264.4" textLength="317.2" 
clip-path="url(#breeze-prod-image-build-line-51)">--airflow-constraints-mode</text><text
 class="breeze-prod-image-build-r1" x="756.4" y="1264.4" textLength="683.2" 
clip-path="url(#breeze-prod-image-build-line-51)">Mode&#160;of&#160;constraints&#160;for&#160;Airflow&#160;
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1288.8" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-52)">│</text><text 
class="breeze-prod-image-build-r6" x="756.4" y="1288.8" textLength="683.2" 
clip-path="url(#breeze-prod-image-build-line-52)">(constraints&#160;|&#160;constraints-no-providers&#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="1451.8" y="1288.8" text [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1313.2" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-53)">│</text><text 
class="breeze-prod-image-build-r6" x="756.4" y="1313.2" textLength="683.2" 
clip-path="url(#breeze-prod-image-build-line-53)">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;</text><text
 class="breeze-pr [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1337.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-54)">│</text><text 
class="breeze-prod-image-build-r5" x="756.4" y="1337.6" textLength="683.2" 
clip-path="url(#breeze-prod-image-build-line-54)">[default:&#160;constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1362" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-55)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1362" textLength="378.2" 
clip-path="url(#breeze-prod-image-build-line-55)">--airflow-constraints-reference</text><text
 class="breeze-prod-image-build-r1" x="756.4" y="1362" textLength="634.4" 
clip-path="url(#breeze-prod-image-build-line-55)">Constraint&#160;reference&#160;to&#160;use&#160;when&#160;
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1386.4" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-56)">│</text><text 
class="breeze-prod-image-build-r6" x="756.4" y="1386.4" textLength="634.4" 
clip-path="url(#breeze-prod-image-build-line-56)">(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;&#16
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1410.8" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-57)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1410.8" textLength="561.2" 
clip-path="url(#breeze-prod-image-build-line-57)">--airflow-fallback-no-constraints-installation</text><text
 class="breeze-prod-image-build-r1" x="585.6" y="1410.8" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-57)">/</text><text 
class="breeze-prod-image [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1435.2" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-58)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1435.2" textLength="488" 
clip-path="url(#breeze-prod-image-build-line-58)">low-fallback-no-constraints-installation</text><text
 class="breeze-prod-image-build-r1" x="756.4" y="1435.2" textLength="683.2" 
clip-path="url(#breeze-prod-image-build-line-58)">installation&#160;fails.&#160;&#160;&#160;&#1
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1459.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-59)">│</text><text 
class="breeze-prod-image-build-r5" x="756.4" y="1459.6" textLength="683.2" 
clip-path="url(#breeze-prod-image-build-line-59)">[default:&#160;airflow-fallback-no-constraints-installation]&#160;</text><text
 class="breeze-prod-image-build-r5" x="1451.8" y="1459.6" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-59)">│</text><text cl [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1484" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-60)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="1484" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-60)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1508.4" 
textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-61)">╭─</text><text 
class="breeze-prod-image-build-r5" x="24.4" y="1508.4" textLength="634.4" 
clip-path="url(#breeze-prod-image-build-line-61)">&#160;Choosing&#160;dependencies&#160;and&#160;extras&#160;(for&#160;power&#160;users)&#160;</text><text
 class="breeze-prod-image-build-r5" x="658.8" y="1508.4" textLength="780.8" 
clip-path="url(#breeze-prod-image-build- [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1532.8" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-62)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1532.8" textLength="195.2" 
clip-path="url(#breeze-prod-image-build-line-62)">--airflow-extras</text><text 
class="breeze-prod-image-build-r1" x="463.6" y="1532.8" textLength="976" 
clip-path="url(#breeze-prod-image-build-line-62)">Extras&#160;to&#160;install&#160;by&#160;default.&#160;&#160;&#160;&#
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1557.2" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-63)">│</text><text 
class="breeze-prod-image-build-r6" x="463.6" y="1557.2" textLength="976" 
clip-path="url(#breeze-prod-image-build-line-63)">(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;
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1581.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-64)">│</text><text 
class="breeze-prod-image-build-r5" x="463.6" y="1581.6" textLength="976" 
clip-path="url(#breeze-prod-image-build-line-64)">[default:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-prod-image-build-r5" x="0" y="1606" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-65)">│</text><text 
class="breeze-prod-image-build-r5" x="463.6" y="1606" textLength="976" 
clip-path="url(#breeze-prod-image-build-line-65)">aiobotocore,amazon,async,celery,cncf-kubernetes,common-io,common-messaging,dock…</text><text
 class="breeze-prod-image-build-r5" x="1451.8" y="1606" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-65)">│</text><t [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1630.4" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-66)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1630.4" textLength="329.4" 
clip-path="url(#breeze-prod-image-build-line-66)">--additional-airflow-extras</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1630.4" textLength="768.6" 
clip-path="url(#breeze-prod-image-build-line-66)">Additional&#160;extra&#160;package&#160;while&#160;insta
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1654.8" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-67)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1654.8" textLength="292.8" 
clip-path="url(#breeze-prod-image-build-line-67)">--additional-python-deps</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1654.8" textLength="768.6" 
clip-path="url(#breeze-prod-image-build-line-67)">Additional&#160;python&#160;dependencies&#160;to&#160;use&#
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1679.2" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-68)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1679.2" textLength="170.8" 
clip-path="url(#breeze-prod-image-build-line-68)">--dev-apt-deps</text><text 
class="breeze-prod-image-build-r1" x="463.6" y="1679.2" textLength="646.6" 
clip-path="url(#breeze-prod-image-build-line-68)">Apt&#160;dev&#160;dependencies&#160;to&#160;use&#160;when&#160;buildi
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1703.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-69)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1703.6" textLength="305" 
clip-path="url(#breeze-prod-image-build-line-69)">--additional-dev-apt-deps</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1703.6" textLength="780.8" 
clip-path="url(#breeze-prod-image-build-line-69)">Additional&#160;apt&#160;dev&#160;dependencies&#160;to&#160;
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1728" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-70)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1728" textLength="207.4" 
clip-path="url(#breeze-prod-image-build-line-70)">--dev-apt-command</text><text 
class="breeze-prod-image-build-r1" x="463.6" y="1728" textLength="622.2" 
clip-path="url(#breeze-prod-image-build-line-70)">Command&#160;executed&#160;before&#160;dev&#160;apt&#160;deps&#160;are&#
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1752.4" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-71)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1752.4" textLength="341.6" 
clip-path="url(#breeze-prod-image-build-line-71)">--additional-dev-apt-command</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1752.4" textLength="756.4" 
clip-path="url(#breeze-prod-image-build-line-71)">Additional&#160;command&#160;executed&#160;before&#160;
 [...]
+</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="292.8" 
clip-path="url(#breeze-prod-image-build-line-72)">--additional-dev-apt-env</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1776.8" textLength="805.2" 
clip-path="url(#breeze-prod-image-build-line-72)">Additional&#160;environment&#160;variables&#160;set&#160;wh
 [...]
+</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="219.6" 
clip-path="url(#breeze-prod-image-build-line-73)">--runtime-apt-deps</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1801.2" textLength="695.4" 
clip-path="url(#breeze-prod-image-build-line-73)">Apt&#160;runtime&#160;dependencies&#160;to&#160;use&#160;when&#16
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1825.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-74)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="1825.6" textLength="353.8" 
clip-path="url(#breeze-prod-image-build-line-74)">--additional-runtime-apt-deps</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1825.6" textLength="829.6" 
clip-path="url(#breeze-prod-image-build-line-74)">Additional&#160;apt&#160;runtime&#160;dependencies&#16
 [...]
+</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="256.2" 
clip-path="url(#breeze-prod-image-build-line-75)">--runtime-apt-command</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1850" textLength="671" 
clip-path="url(#breeze-prod-image-build-line-75)">Command&#160;executed&#160;before&#160;runtime&#160;apt&#160;deps&#160
 [...]
+</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="390.4" 
clip-path="url(#breeze-prod-image-build-line-76)">--additional-runtime-apt-command</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1874.4" textLength="805.2" 
clip-path="url(#breeze-prod-image-build-line-76)">Additional&#160;command&#160;executed&#160;before&#
 [...]
+</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="341.6" 
clip-path="url(#breeze-prod-image-build-line-77)">--additional-runtime-apt-env</text><text
 class="breeze-prod-image-build-r1" x="463.6" y="1898.8" textLength="854" 
clip-path="url(#breeze-prod-image-build-line-77)">Additional&#160;environment&#160;variables&#160;set&#160;
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="1923.2" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-78)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="1923.2" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-78)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="1947.6" 
textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-79)">╭─</text><text 
class="breeze-prod-image-build-r5" x="24.4" y="1947.6" textLength="817.4" 
clip-path="url(#breeze-prod-image-build-line-79)">&#160;Advanced&#160;customization&#160;options&#160;(for&#160;specific&#160;customization&#160;needs)&#160;</text><text
 class="breeze-prod-image-build-r5" x="841.8" y="1947.6" textLength="597.8" 
clip-path="url(#breeze-pr [...]
+</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="256.2" 
clip-path="url(#breeze-prod-image-build-line-80)">--installation-method</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="1972" textLength="463.6" 
clip-path="url(#breeze-prod-image-build-line-80)">Install&#160;Airflow&#160;from:&#160;sources&#160;or&#160;PyPI.</tex
 [...]
+</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-r5" x="597.8" y="1996.4" textLength="463.6" 
clip-path="url(#breeze-prod-image-build-line-81)">[default:&#160;.]&#160;&#160;&#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" [...]
+</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="329.4" 
clip-path="url(#breeze-prod-image-build-line-82)">--install-airflow-reference</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="2020.8" textLength="524.6" 
clip-path="url(#breeze-prod-image-build-line-82)">Install&#160;Airflow&#160;using&#160;GitHub&#160;tag&#16
 [...]
+</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="439.2" 
clip-path="url(#breeze-prod-image-build-line-83)">--install-distributions-from-context</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="2045.2" textLength="841.8" 
clip-path="url(#breeze-prod-image-build-line-83)">Install&#160;distributions&#160;from&#160;local
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2069.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-84)">│</text><text 
class="breeze-prod-image-build-r1" x="597.8" y="2069.6" textLength="183" 
clip-path="url(#breeze-prod-image-build-line-84)">image.&#160;Implies&#160;</text><text
 class="breeze-prod-image-build-r4" x="780.8" y="2069.6" textLength="341.6" 
clip-path="url(#breeze-prod-image-build-line-84)">--disable-airflow-repo-cache</text><text
 class="breeze-prod [...]
+</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="329.4" 
clip-path="url(#breeze-prod-image-build-line-85)">--install-mysql-client-type</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="2094" textLength="475.8" 
clip-path="url(#breeze-prod-image-build-line-85)">Which&#160;client&#160;to&#160;choose&#160;when&#160;installin
 [...]
+</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="207.4" 
clip-path="url(#breeze-prod-image-build-line-86)">--cleanup-context</text><text 
class="breeze-prod-image-build-r1" x="597.8" y="2118.4" textLength="841.8" 
clip-path="url(#breeze-prod-image-build-line-86)">Clean&#160;up&#160;docker&#160;context&#160;files&#160;before&#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-r1" x="597.8" y="2142.8" textLength="170.8" 
clip-path="url(#breeze-prod-image-build-line-87)">together&#160;with&#160;</text><text
 class="breeze-prod-image-build-r4" x="768.6" y="2142.8" textLength="439.2" 
clip-path="url(#breeze-prod-image-build-line-87)">--install-distributions-from-context</text><text
 class="br [...]
+</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="524.6" 
clip-path="url(#breeze-prod-image-build-line-88)">--use-constraints-for-context-distributions</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="2167.2" textLength="841.8" 
clip-path="url(#breeze-prod-image-build-line-88)">Uses&#160;constraints&#160;for&#160;cont
 [...]
+</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-r1" x="597.8" y="2191.6" textLength="841.8" 
clip-path="url(#breeze-prod-image-build-line-89)">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;</text><text
 class="breeze-prod-image-build-r5" x="1451.8" y= [...]
+</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="341.6" 
clip-path="url(#breeze-prod-image-build-line-90)">--disable-airflow-repo-cache</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="2216" textLength="658.8" 
clip-path="url(#breeze-prod-image-build-line-90)">Disable&#160;cache&#160;from&#160;Airflow&#160;repository&#16
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2240.4" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-91)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2240.4" textLength="427" 
clip-path="url(#breeze-prod-image-build-line-91)">--disable-mysql-client-installation</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="2240.4" textLength="341.6" 
clip-path="url(#breeze-prod-image-build-line-91)">Do&#160;not&#160;install&#160;MySQL&#160;client.</
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2264.8" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-92)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2264.8" textLength="427" 
clip-path="url(#breeze-prod-image-build-line-92)">--disable-mssql-client-installation</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="2264.8" textLength="341.6" 
clip-path="url(#breeze-prod-image-build-line-92)">Do&#160;not&#160;install&#160;MsSQl&#160;client.</
 [...]
+</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="463.6" 
clip-path="url(#breeze-prod-image-build-line-93)">--disable-postgres-client-installation</text><text
 class="breeze-prod-image-build-r1" x="597.8" y="2289.2" textLength="378.2" 
clip-path="url(#breeze-prod-image-build-line-93)">Do&#160;not&#160;install&#160;Postgres&#160;c
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2313.6" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-94)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="2313.6" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-94)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2338" 
textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-95)">╭─</text><text 
class="breeze-prod-image-build-r5" x="24.4" y="2338" textLength="622.2" 
clip-path="url(#breeze-prod-image-build-line-95)">&#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="2338" textLength="793" 
clip-path="url(#breeze-prod-image-build-line [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2362.4" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-96)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2362.4" textLength="109.8" 
clip-path="url(#breeze-prod-image-build-line-96)">--builder</text><text 
class="breeze-prod-image-build-r1" x="341.6" y="2362.4" textLength="756.4" 
clip-path="url(#breeze-prod-image-build-line-96)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;build
 [...]
+</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-r5" x="341.6" y="2386.8" textLength="756.4" 
clip-path="url(#breeze-prod-image-build-line-97)">[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="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="122" 
clip-path="url(#breeze-prod-image-build-line-98)">--platform</text><text 
class="breeze-prod-image-build-r1" x="341.6" y="2411.2" textLength="1024.8" 
clip-path="url(#breeze-prod-image-build-line-98)">Platform&#160;for&#160;Airflow&#160;image.&#160;&#160;&#160;&#160;&#160;&#
 [...]
+</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-r6" x="341.6" y="2435.6" textLength="1024.8" 
clip-path="url(#breeze-prod-image-build-line-99)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64&#160;|&#160;linux/amd64,linux/arm64)</text><text
 class="breeze-prod-image-build-r5" x="1451.8" y="2435.6" textLength="12.2" 
clip-pa [...]
+</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="73.2" 
clip-path="url(#breeze-prod-image-build-line-100)">--push</text><text 
class="breeze-prod-image-build-r1" x="341.6" y="2460" textLength="353.8" 
clip-path="url(#breeze-prod-image-build-line-100)">Push&#160;image&#160;after&#160;building&#160;it.</text><text
 class="breeze-prod- [...]
+</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="268.4" 
clip-path="url(#breeze-prod-image-build-line-101)">--prepare-buildx-cache</text><text
 class="breeze-prod-image-build-r1" x="341.6" y="2484.4" textLength="1098" 
clip-path="url(#breeze-prod-image-build-line-101)">Prepares&#160;build&#160;cache&#160;(this&#160;is&#160;done
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2508.8" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-102)">│</text><text 
class="breeze-prod-image-build-r1" x="341.6" y="2508.8" textLength="1098" 
clip-path="url(#breeze-prod-image-build-line-102)">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;&#
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2533.2" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-103)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="2533.2" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-103)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2557.6" 
textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-104)">╭─</text><text 
class="breeze-prod-image-build-r5" x="24.4" y="2557.6" textLength="280.6" 
clip-path="url(#breeze-prod-image-build-line-104)">&#160;GitHub&#160;authentication&#160;</text><text
 class="breeze-prod-image-build-r5" x="305" y="2557.6" textLength="1134.6" 
clip-path="url(#breeze-prod-image-build-line-104)">──────────────────────────────────────────
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2582" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-105)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2582" textLength="231.8" 
clip-path="url(#breeze-prod-image-build-line-105)">--github-repository</text><text
 class="breeze-prod-image-build-r7" x="280.6" y="2582" textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-105)">-g</text><text 
class="breeze-prod-image-build-r1" x="329.4" y="2582" [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2606.4" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-106)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2606.4" textLength="170.8" 
clip-path="url(#breeze-prod-image-build-line-106)">--github-token</text><text 
class="breeze-prod-image-build-r1" x="329.4" y="2606.4" textLength="500.2" 
clip-path="url(#breeze-prod-image-build-line-106)">The&#160;token&#160;used&#160;to&#160;authenticate&#160;to&#160;Gi
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2630.8" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-107)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="2630.8" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-107)">
+</text><text class="breeze-prod-image-build-r5" x="0" y="2655.2" 
textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-108)">╭─</text><text 
class="breeze-prod-image-build-r5" x="24.4" y="2655.2" textLength="195.2" 
clip-path="url(#breeze-prod-image-build-line-108)">&#160;Common&#160;options&#160;</text><text
 class="breeze-prod-image-build-r5" x="219.6" y="2655.2" textLength="1220" 
clip-path="url(#breeze-prod-image-build-line-108)">─────────────────────────────────────────────────
 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2679.6" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-109)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2679.6" textLength="97.6" 
clip-path="url(#breeze-prod-image-build-line-109)">--answer</text><text 
class="breeze-prod-image-build-r7" x="158.6" y="2679.6" textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-109)">-a</text><text 
class="breeze-prod-image-build-r1" x="207.4" y="2679.6" tex [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2704" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-110)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2704" textLength="109.8" 
clip-path="url(#breeze-prod-image-build-line-110)">--dry-run</text><text 
class="breeze-prod-image-build-r7" x="158.6" y="2704" textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-110)">-D</text><text 
class="breeze-prod-image-build-r1" x="207.4" y="2704" textLengt [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2728.4" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-111)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2728.4" textLength="109.8" 
clip-path="url(#breeze-prod-image-build-line-111)">--verbose</text><text 
class="breeze-prod-image-build-r7" x="158.6" y="2728.4" textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-111)">-v</text><text 
class="breeze-prod-image-build-r1" x="207.4" y="2728.4" t [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2752.8" 
textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-112)">│</text><text 
class="breeze-prod-image-build-r4" x="24.4" y="2752.8" textLength="73.2" 
clip-path="url(#breeze-prod-image-build-line-112)">--help</text><text 
class="breeze-prod-image-build-r7" x="158.6" y="2752.8" textLength="24.4" 
clip-path="url(#breeze-prod-image-build-line-112)">-h</text><text 
class="breeze-prod-image-build-r1" x="207.4" y="2752.8" textL [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2777.2" 
textLength="1464" 
clip-path="url(#breeze-prod-image-build-line-113)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-prod-image-build-r1" x="1464" y="2777.2" textLength="12.2" 
clip-path="url(#breeze-prod-image-build-line-113)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_prod-image_build.txt 
b/dev/breeze/doc/images/output_prod-image_build.txt
index 679c7008120..bd8d6028aa7 100644
--- a/dev/breeze/doc/images/output_prod-image_build.txt
+++ b/dev/breeze/doc/images/output_prod-image_build.txt
@@ -1 +1 @@
-31614af6f841392d4b6b14a2a31ad502
+3f13181ec351147f7ea2640886757160
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 ea38dfa1197..5c545fbfbeb 100644
--- a/dev/breeze/src/airflow_breeze/commands/common_image_options.py
+++ b/dev/breeze/src/airflow_breeze/commands/common_image_options.py
@@ -85,6 +85,14 @@ option_airflow_constraints_reference_build = click.option(
     help="Constraint reference to use when building the image.",
     envvar="AIRFLOW_CONSTRAINTS_REFERENCE",
 )
+option_airflow_fallback_no_constraints_installation = click.option(
+    
"--airflow-fallback-no-constraints-installation/--no-airflow-fallback-no-constraints-installation",
+    is_flag=True,
+    default=True,
+    show_default=True,
+    help="Fallback to no constraints installation when constraints 
installation fails.",
+    envvar="AIRFLOW_FALLBACK_NO_CONSTRAINTS_INSTALLATION",
+)
 option_build_progress = click.option(
     "--build-progress",
     help="Build progress.",
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 4a14a3d301c..9cc6b016040 100644
--- a/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
@@ -33,6 +33,7 @@ from airflow_breeze.commands.common_image_options import (
     option_additional_runtime_apt_deps,
     option_additional_runtime_apt_env,
     option_airflow_constraints_reference_build,
+    option_airflow_fallback_no_constraints_installation,
     option_build_progress,
     option_debian_version,
     option_dev_apt_command,
@@ -239,6 +240,7 @@ def prod_image_group():
 @option_airflow_constraints_location
 @option_airflow_constraints_mode_prod
 @option_airflow_constraints_reference_build
+@option_airflow_fallback_no_constraints_installation
 @option_answer
 @option_build_progress
 @option_builder
@@ -283,6 +285,7 @@ def build(
     airflow_constraints_location: str | None,
     airflow_constraints_mode: str,
     airflow_constraints_reference: str | None,
+    airflow_fallback_no_constraints_installation: bool,
     airflow_extras: str,
     build_progress: str,
     builder: str,
@@ -355,6 +358,7 @@ def build(
         airflow_constraints_location=airflow_constraints_location,
         airflow_constraints_mode=airflow_constraints_mode,
         airflow_constraints_reference=airflow_constraints_reference,
+        
airflow_fallback_no_constraints_installation=airflow_fallback_no_constraints_installation,
         airflow_extras=airflow_extras,
         build_progress=build_progress,
         builder=builder,
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 1738254250d..33785887f3d 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
@@ -67,6 +67,7 @@ PRODUCTION_IMAGE_TOOLS_PARAMETERS: dict[str, list[dict[str, 
str | list[str]]]] =
                 "--airflow-constraints-location",
                 "--airflow-constraints-mode",
                 "--airflow-constraints-reference",
+                "--airflow-fallback-no-constraints-installation",
             ],
         },
         {
diff --git 
a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py 
b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index 469254f4d72..464472bfe13 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -2215,6 +2215,7 @@ def release_prod_images(
             "INCLUDE_PRE_RELEASE": "true" if include_pre_release else "false",
             "INSTALL_DISTRIBUTIONS_FROM_CONTEXT": "false",
             "DOCKER_CONTEXT_FILES": "./docker-context-files",
+            "AIRFLOW_FALLBACK_NO_CONSTRAINTS_INSTALLATION": "false",
         }
         if commit_sha:
             build_args["COMMIT_SHA"] = commit_sha
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 ea9822d80a6..4b3e57ecd60 100644
--- a/dev/breeze/src/airflow_breeze/params/build_prod_params.py
+++ b/dev/breeze/src/airflow_breeze/params/build_prod_params.py
@@ -43,6 +43,7 @@ class BuildProdParams(CommonBuildParams):
     additional_runtime_apt_env: str | None = None
     airflow_constraints_mode: str = "constraints"
     airflow_constraints_reference: str = DEFAULT_AIRFLOW_CONSTRAINTS_BRANCH
+    airflow_fallback_no_constraints_installation: bool = False
     cleanup_context: bool = False
     airflow_extras: str = field(default_factory=get_airflow_extras)
     disable_mssql_client_installation: bool = False
@@ -253,6 +254,9 @@ class BuildProdParams(CommonBuildParams):
         self._opt_arg(
             "USE_CONSTRAINTS_FOR_CONTEXT_DISTRIBUTIONS", 
self.use_constraints_for_context_distributions
         )
+        self._opt_arg(
+            "AIRFLOW_FALLBACK_NO_CONSTRAINTS_INSTALLATION", 
self.airflow_fallback_no_constraints_installation
+        )
         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/utils/docker_command_utils.py 
b/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py
index 3de4a5cbb77..3e717569ddb 100644
--- a/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py
@@ -1041,6 +1041,7 @@ def check_docker_buildx_plugin():
         check=False,
         text=True,
         capture_output=True,
+        dry_run_override=False,
     )
     if result_docker_buildx.returncode != 0:
         get_console().print("[error]Docker buildx plugin must be installed to 
release the images[/]")
@@ -1049,7 +1050,7 @@ def check_docker_buildx_plugin():
         sys.exit(1)
     from packaging.version import Version
 
-    version = result_docker_buildx.stdout.splitlines()[0].split(" 
")[1].lstrip("v")
+    version = result_docker_buildx.stdout.splitlines()[0].split(" 
")[1].lstrip("v").split("-")[0]
     packaging_version = Version(version)
     if packaging_version < Version("0.13.0"):
         get_console().print("[error]Docker buildx plugin must be at least 
0.13.0 to release the images[/]")
diff --git a/scripts/docker/install_airflow_when_building_images.sh 
b/scripts/docker/install_airflow_when_building_images.sh
index 69829099d6f..40f5b7cba15 100644
--- a/scripts/docker/install_airflow_when_building_images.sh
+++ b/scripts/docker/install_airflow_when_building_images.sh
@@ -118,6 +118,12 @@ function install_from_sources() {
         fi
         set +x
         if [[ ${fallback_no_constraints_installation} == "true" ]]; then
+            if [[ ${AIRFLOW_FALLBACK_NO_CONSTRAINTS_INSTALLATION} != "true" 
]]; then
+                echo
+                echo "${COLOR_RED}Failing because constraints installation 
failed and fallback is disabled.${COLOR_RESET}"
+                echo
+                exit 1
+            fi
             echo
             echo "${COLOR_YELLOW}Likely pyproject.toml has new dependencies 
conflicting with constraints.${COLOR_RESET}"
             echo
@@ -167,6 +173,12 @@ function install_from_external_spec() {
         set -x
         if ! ${PACKAGING_TOOL_CMD} install ${EXTRA_INSTALL_FLAGS} 
${ADDITIONAL_PIP_INSTALL_FLAGS} ${installation_command_flags} --constraint 
"${HOME}/constraints.txt"; then
             set +x
+            if [[ ${AIRFLOW_FALLBACK_NO_CONSTRAINTS_INSTALLATION} != "true" 
]]; then
+                echo
+                echo "${COLOR_RED}Failing because constraints installation 
failed and fallback is disabled.${COLOR_RESET}"
+                echo
+                exit 1
+            fi
             echo
             echo "${COLOR_YELLOW}Likely pyproject.toml has new dependencies 
conflicting with constraints.${COLOR_RESET}"
             echo

Reply via email to