This is an automated email from the ASF dual-hosted git repository. potiuk pushed a commit to branch fail-to-release-image-when-constraints-build-fail in repository https://gitbox.apache.org/repos/asf/airflow.git
commit a817b882b424d3575e65e47e1e86ba9a09ef36b8 Author: Jarek Potiuk <[email protected]> AuthorDate: Mon Feb 23 23:21:28 2026 +0100 Fail prod image release when constraint build fails 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 Closes: #62349 --- Dockerfile | 16 ++- Dockerfile.ci | 17 +++ dev/breeze/doc/images/output_prod-image_build.svg | 144 ++++++++++++--------- 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 | 2 +- .../docker/install_airflow_when_building_images.sh | 12 ++ 11 files changed, 148 insertions(+), 63 deletions(-) diff --git a/Dockerfile b/Dockerfile index b842b7ec3e7..9a90e83d7f4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1154,6 +1154,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 @@ -1203,6 +1209,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 @@ -1742,7 +1754,6 @@ ENV DEV_APT_DEPS=${DEV_APT_DEPS} \ ARG PYTHON_LTO - COPY --from=scripts install_os_dependencies.sh /scripts/docker/ RUN PYTHON_LTO=${PYTHON_LTO} bash /scripts/docker/install_os_dependencies.sh dev @@ -1798,6 +1809,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 +1863,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 c9633e5d801..b1219c409b2 100644 --- a/Dockerfile.ci +++ b/Dockerfile.ci @@ -907,6 +907,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 @@ -956,6 +962,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 @@ -1569,6 +1581,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.12" ENV AIRFLOW_PYTHON_VERSION=${AIRFLOW_PYTHON_VERSION} ENV GOLANG_MAJOR_MINOR_VERSION="1.26.0" @@ -1653,6 +1666,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" @@ -1681,6 +1697,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 d400a2ccfc5..5abb1f0c60e 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 2465.6" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 1482 2612.0" 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="2414.6" /> + <rect x="0" y="0" width="1463.0" height="2561.0" /> </clipPath> <clipPath id="breeze-prod-image-build-line-0"> <rect x="0" y="1.5" width="1464" height="24.65"/> @@ -339,9 +339,27 @@ <clipPath id="breeze-prod-image-build-line-97"> <rect x="0" y="2368.3" width="1464" height="24.65"/> </clipPath> +<clipPath id="breeze-prod-image-build-line-98"> + <rect x="0" y="2392.7" width="1464" height="24.65"/> + </clipPath> +<clipPath id="breeze-prod-image-build-line-99"> + <rect x="0" y="2417.1" width="1464" height="24.65"/> + </clipPath> +<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> +<clipPath id="breeze-prod-image-build-line-102"> + <rect x="0" y="2490.3" width="1464" height="24.65"/> + </clipPath> +<clipPath id="breeze-prod-image-build-line-103"> + <rect x="0" y="2514.7" 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="2463.6" rx="8"/><text class="breeze-prod-image-build-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: prod-image build</text> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2610" rx="8"/><text class="breeze-prod-image-build-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: prod-image 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"/> @@ -392,64 +410,70 @@ </text><text class="breeze-prod-image-build-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-38)">│</text><text class="breeze-prod-image-build-r1" x="414.8" y="947.2" textLength="1024.8" clip-path="url(#breeze-prod-image-build-line-38)">installing from sources and False for installing from packages).                    [...] </text><text class="breeze-prod-image-build-r5" x="0" y="971.6" textLength="1464" clip-path="url(#breeze-prod-image-build-line-39)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-39)"> </text><text class="breeze-prod-image-build-r5" x="0" y="996" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-40)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="996" textLength="597.8" clip-path="url(#breeze-prod-image-build-line-40)"> Selecting constraint location (for power users) </text><text class="breeze-prod-image-build-r5" x="622.2" y="996" textLength="817.4" clip-path="url(#breeze-prod-image-build-line-40)">─────── [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-41)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1020.4" textLength="378.2" clip-path="url(#breeze-prod-image-build-line-41)">--airflow-constraints-location </text><text class="breeze-prod-image-build-r1" x="427" y="1020.4" textLength="915" clip-path="url(#breeze-prod-image-build-line-41)">Location of airflow constraints  [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-42)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1044.8" textLength="378.2" clip-path="url(#breeze-prod-image-build-line-42)">--airflow-constraints-mode     </text><text class="breeze-prod-image-build-r1" x="427" y="1044.8" textLength="695.4" clip-path="url(#breeze-prod-image-build-line-42)">Mode of constraints [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-43)">│</text><text class="breeze-prod-image-build-r6" x="427" y="1069.2" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-43)">(constraints | constraints-no-providers | constraints-source-providers)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1069.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-lin [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-44)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1093.6" textLength="378.2" clip-path="url(#breeze-prod-image-build-line-44)">--airflow-constraints-reference</text><text class="breeze-prod-image-build-r1" x="427" y="1093.6" textLength="646.6" clip-path="url(#breeze-prod-image-build-line-44)">Constraint reference to use when&# [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="1118" textLength="1464" clip-path="url(#breeze-prod-image-build-line-45)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-45)"> -</text><text class="breeze-prod-image-build-r5" x="0" y="1142.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-46)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="1142.4" textLength="634.4" clip-path="url(#breeze-prod-image-build-line-46)"> Choosing dependencies and extras (for power users) </text><text class="breeze-prod-image-build-r5" x="658.8" y="1142.4" textLength="780.8" clip-path="url(#breeze-prod-image-build- [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-47)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1166.8" textLength="390.4" clip-path="url(#breeze-prod-image-build-line-47)">--airflow-extras                </text><text class="breeze-prod-image-build-r1" x="439.2" y="1166.8" textLength="366" clip-path="url(#breeze- [...] -</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-r5" x="439.2" y="1191.2" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-48)">aiobotocore,amazon,async,celery,cncf-kubernetes,common-io,common-messaging,docker,</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1191.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-48)" [...] -</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-r5" x="439.2" y="1215.6" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-49)">elasticsearch,fab,ftp,git,google,google-auth,graphviz,grpc,hashicorp,http,ldap,mic</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-49)" [...] -</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-r5" x="439.2" y="1240" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-50)">rosoft-azure,mysql,odbc,openlineage,pandas,postgres,redis,sendgrid,sftp,slack,snow</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)">│</te [...] -</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="439.2" y="1264.4" textLength="244" clip-path="url(#breeze-prod-image-build-line-51)">flake,ssh,statsd,uv]</text><text class="breeze-prod-image-build-r6" x="695.4" y="1264.4" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-51)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" [...] -</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="390.4" clip-path="url(#breeze-prod-image-build-line-52)">--additional-airflow-extras     </text><text class="breeze-prod-image-build-r1" x="439.2" y="1288.8" textLength="780.8" clip-path="url(#breeze-prod-image-build-line-52)">Additional extra  [...] -</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-r4" x="24.4" y="1313.2" textLength="390.4" clip-path="url(#breeze-prod-image-build-line-53)">--additional-python-deps        </text><text class="breeze-prod-image-build-r1" x="439.2" y="1313.2" textLength="780.8" clip-path="url(#breeze-prod-image-build-line-53)">Additional& [...] -</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-r4" x="24.4" y="1337.6" textLength="390.4" clip-path="url(#breeze-prod-image-build-line-54)">--dev-apt-deps                  </text><text class="breeze-prod-image-build-r1" x="439.2" y="1337.6" textLength="658.8" clip-path=" [...] -</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="390.4" clip-path="url(#breeze-prod-image-build-line-55)">--additional-dev-apt-deps       </text><text class="breeze-prod-image-build-r1" x="439.2" y="1362" textLength="793" clip-path="url(#breeze-prod-image-build-line-55)">Additional apt  [...] -</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-r4" x="24.4" y="1386.4" textLength="390.4" clip-path="url(#breeze-prod-image-build-line-56)">--dev-apt-command               </text><text class="breeze-prod-image-build-r1" x="439.2" y="1386.4" textLength="634.4" clip-path="url(#breeze-pro [...] -</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="390.4" clip-path="url(#breeze-prod-image-build-line-57)">--additional-dev-apt-command    </text><text class="breeze-prod-image-build-r1" x="439.2" y="1410.8" textLength="768.6" clip-path="url(#breeze-prod-image-build-line-57)">Additional command ex [...] -</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="390.4" clip-path="url(#breeze-prod-image-build-line-58)">--additional-dev-apt-env        </text><text class="breeze-prod-image-build-r1" x="439.2" y="1435.2" textLength="817.4" clip-path="url(#breeze-prod-image-build-line-58)">Additional& [...] -</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="390.4" clip-path="url(#breeze-prod-image-build-line-59)">--runtime-apt-deps              </text><text class="breeze-prod-image-build-r1" x="439.2" y="1459.6" textLength="707.6" clip-path="url(#breeze-prod-ima [...] -</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="390.4" clip-path="url(#breeze-prod-image-build-line-60)">--additional-runtime-apt-deps   </text><text class="breeze-prod-image-build-r1" x="439.2" y="1484" textLength="841.8" clip-path="url(#breeze-prod-image-build-line-60)">Additional apt runtime depe [...] -</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="390.4" clip-path="url(#breeze-prod-image-build-line-61)">--runtime-apt-command           </text><text class="breeze-prod-image-build-r1" x="439.2" y="1508.4" textLength="683.2" clip-path="url(#breeze-prod-image-build-line-6 [...] -</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="390.4" clip-path="url(#breeze-prod-image-build-line-62)">--additional-runtime-apt-command</text><text class="breeze-prod-image-build-r1" x="439.2" y="1532.8" textLength="817.4" clip-path="url(#breeze-prod-image-build-line-62)">Additional command executed before&# [...] -</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="390.4" clip-path="url(#breeze-prod-image-build-line-63)">--additional-runtime-apt-env    </text><text class="breeze-prod-image-build-r1" x="439.2" y="1557.2" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-63)">Additional environment [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="1581.6" textLength="1464" clip-path="url(#breeze-prod-image-build-line-64)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-64)"> -</text><text class="breeze-prod-image-build-r5" x="0" y="1606" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-65)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="1606" textLength="817.4" clip-path="url(#breeze-prod-image-build-line-65)"> Advanced customization options (for specific customization needs) </text><text class="breeze-prod-image-build-r5" x="841.8" y="1606" textLength="597.8" clip-path="url(#breeze-prod-ima [...] -</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="524.6" clip-path="url(#breeze-prod-image-build-line-66)">--installation-method                      </text><text class="breeze-prod-image-build-r1" x="573.4" y="1630.4" [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-67)">│</text><text class="breeze-prod-image-build-r5" x="573.4" y="1654.8" textLength="146.4" clip-path="url(#breeze-prod-image-build-line-67)">[default: .]</text><text class="breeze-prod-image-build-r6" x="732" y="1654.8" textLength="244" clip-path="url(#breeze-prod-image-build-line-67)">(. | apache-airflow)</text><text class="breeze-prod-image-b [...] -</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="524.6" clip-path="url(#breeze-prod-image-build-line-68)">--install-airflow-reference                </text><text class="breeze-prod-image-build-r1" x="573.4" y="1679.2" textLength="536.8" clip-path= [...] -</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="524.6" clip-path="url(#breeze-prod-image-build-line-69)">--install-distributions-from-context       </text><text class="breeze-prod-image-build-r1" x="573.4" y="1703.6" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-69)">Insta [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-70)">│</text><text class="breeze-prod-image-build-r1" x="573.4" y="1728" textLength="183" clip-path="url(#breeze-prod-image-build-line-70)">image. Implies </text><text class="breeze-prod-image-build-r4" x="756.4" y="1728" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-70)">--disable-airflow-repo-cache</text><text class="breeze-prod-image [...] -</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="524.6" clip-path="url(#breeze-prod-image-build-line-71)">--install-mysql-client-type                </text><text class="breeze-prod-image-build-r1" x="573.4" y="1752.4" textLength="488" clip-path="u [...] -</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="524.6" clip-path="url(#breeze-prod-image-build-line-72)">--cleanup-context                          </text><text class="breeze-prod-image-build-r1" [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-73)">│</text><text class="breeze-prod-image-build-r1" x="573.4" y="1801.2" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-73)">together with </text><text class="breeze-prod-image-build-r4" x="744.2" y="1801.2" textLength="439.2" clip-path="url(#breeze-prod-image-build-line-73)">--install-distributions-from-context</text><text class="br [...] -</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="524.6" clip-path="url(#breeze-prod-image-build-line-74)">--use-constraints-for-context-distributions</text><text class="breeze-prod-image-build-r1" x="573.4" y="1825.6" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-74)">Uses constraints for cont [...] -</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-r1" x="573.4" y="1850" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-75)">constraints store in docker-context-files or from github.              </text><text class="breeze-prod-image-build-r5" x="14 [...] -</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="524.6" clip-path="url(#breeze-prod-image-build-line-76)">--disable-airflow-repo-cache               </text><text class="breeze-prod-image-build-r1" x="573.4" y="1874.4" textLength="658.8" clip-path="url( [...] -</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="524.6" clip-path="url(#breeze-prod-image-build-line-77)">--disable-mysql-client-installation        </text><text class="breeze-prod-image-build-r1" x="573.4" y="1898.8" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-77)"> [...] -</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="524.6" clip-path="url(#breeze-prod-image-build-line-78)">--disable-mssql-client-installation        </text><text class="breeze-prod-image-build-r1" x="573.4" y="1923.2" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-78)"> [...] -</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="524.6" clip-path="url(#breeze-prod-image-build-line-79)">--disable-postgres-client-installation     </text><text class="breeze-prod-image-build-r1" x="573.4" y="1947.6" textLength="378.2" clip-path="url(#breeze-prod-image-build-line-79)">Do not [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="1972" textLength="1464" clip-path="url(#breeze-prod-image-build-line-80)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="1972" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-80)"> -</text><text class="breeze-prod-image-build-r5" x="0" y="1996.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-81)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="1996.4" textLength="622.2" clip-path="url(#breeze-prod-image-build-line-81)"> Preparing cache and push (for maintainers and CI) </text><text class="breeze-prod-image-build-r5" x="646.6" y="1996.4" textLength="793" clip-path="url(#breeze-prod-image-buil [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-82)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2020.8" textLength="268.4" clip-path="url(#breeze-prod-image-build-line-82)">--builder             </text><text class="breeze-prod-image-build-r1" x="317.2" y="2020.8" textLength="768.6" clip-path="url(#breeze-prod-image-build-line-8 [...] -</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="268.4" clip-path="url(#breeze-prod-image-build-line-83)">--platform            </text><text class="breeze-prod-image-build-r1" x="317.2" y="2045.2" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-83)">P [...] -</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-r6" x="317.2" y="2069.6" textLength="292.8" clip-path="url(#breeze-prod-image-build-line-84)">linux/amd64,linux/arm64)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-84)">│</text><text class="breeze-prod-image-build-r1" x="1464" [...] -</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="268.4" clip-path="url(#breeze-prod-image-build-line-85)">--push                </text><text class="breeze-prod-image-build-r1" x="317.2" y="2094" textLength="353.8" clip-path="url(#breeze-prod-image-bui [...] -</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="268.4" clip-path="url(#breeze-prod-image-build-line-86)">--prepare-buildx-cache</text><text class="breeze-prod-image-build-r1" x="317.2" y="2118.4" textLength="1122.4" clip-path="url(#breeze-prod-image-build-line-86)">Prepares build cache (this is done& [...] -</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="317.2" y="2142.8" textLength="1122.4" clip-path="url(#breeze-prod-image-build-line-87)">image).                                   &# [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="2167.2" textLength="1464" clip-path="url(#breeze-prod-image-build-line-88)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-88)"> -</text><text class="breeze-prod-image-build-r5" x="0" y="2191.6" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-89)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2191.6" textLength="280.6" clip-path="url(#breeze-prod-image-build-line-89)"> GitHub authentication </text><text class="breeze-prod-image-build-r5" x="305" y="2191.6" textLength="1134.6" clip-path="url(#breeze-prod-image-build-line-89)">───────────────────────────────────────────── [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-90)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2216" textLength="231.8" clip-path="url(#breeze-prod-image-build-line-90)">--github-repository</text><text class="breeze-prod-image-build-r7" x="280.6" y="2216" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-90)">-g</text><text class="breeze-prod-image-build-r1" x="329.4" y="2216" te [...] -</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="231.8" clip-path="url(#breeze-prod-image-build-line-91)">--github-token     </text><text class="breeze-prod-image-build-r1" x="329.4" y="2240.4" textLength="512.4" clip-path="url(#breeze-prod-image-build-line-91)">The token used to a [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="2264.8" textLength="1464" clip-path="url(#breeze-prod-image-build-line-92)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2264.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-92)"> -</text><text class="breeze-prod-image-build-r5" x="0" y="2289.2" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-93)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2289.2" textLength="195.2" clip-path="url(#breeze-prod-image-build-line-93)"> Common options </text><text class="breeze-prod-image-build-r5" x="219.6" y="2289.2" textLength="1220" clip-path="url(#breeze-prod-image-build-line-93)">──────────────────────────────────────────────────── [...] -</text><text class="breeze-prod-image-build-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-94)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2313.6" textLength="109.8" clip-path="url(#breeze-prod-image-build-line-94)">--answer </text><text class="breeze-prod-image-build-r7" x="158.6" y="2313.6" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-94)">-a</text><text class="breeze-prod-image-build-r1" x="207.4" y="2313.6" [...] -</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="109.8" clip-path="url(#breeze-prod-image-build-line-95)">--dry-run</text><text class="breeze-prod-image-build-r7" x="158.6" y="2338" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-95)">-D</text><text class="breeze-prod-image-build-r1" x="207.4" y="2338" textLength=" [...] -</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)">--verbose</text><text class="breeze-prod-image-build-r7" x="158.6" y="2362.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-96)">-v</text><text class="breeze-prod-image-build-r1" x="207.4" y="2362.4" text [...] -</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="109.8" clip-path="url(#breeze-prod-image-build-line-97)">--help   </text><text class="breeze-prod-image-build-r7" x="158.6" y="2386.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-97)">-h</text><text class="breeze-prod-image-build-r1" x="207.4" [...] +</text><text class="breeze-prod-image-build-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-41)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1020.4" textLength="695.4" clip-path="url(#breeze-prod-image-build-line-41)">--airflow-constraints-location                           </text><text class="breeze-pr [...] +</text><text class="breeze-prod-image-build-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-42)">│</text><text class="breeze-prod-image-build-r1" x="744.2" y="1044.8" textLength="256.2" clip-path="url(#breeze-prod-image-build-line-42)">local context file). </text><text class="breeze-prod-image-build-r6" x="1000.4" y="1044.8" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-42)">(TEXT)</text><text class="breeze-prod-image-bu [...] +</text><text class="breeze-prod-image-build-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-43)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1069.2" textLength="695.4" clip-path="url(#breeze-prod-image-build-line-43)">--airflow-constraints-mode                               </text><t [...] +</text><text class="breeze-prod-image-build-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-44)">│</text><text class="breeze-prod-image-build-r5" x="744.2" y="1093.6" textLength="268.4" clip-path="url(#breeze-prod-image-build-line-44)">[default: constraints]</text><text class="breeze-prod-image-build-r6" x="1024.8" y="1093.6" textLength="183" clip-path="url(#breeze-prod-image-build-line-44)">(constraints | </text><text class="breeze-prod [...] +</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-r6" x="744.2" y="1118" textLength="683.2" clip-path="url(#breeze-prod-image-build-line-45)">constraints-no-providers | constraints-source-providers)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1118" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-45)">│</text><text class="b [...] +</text><text class="breeze-prod-image-build-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-46)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="1142.4" textLength="695.4" clip-path="url(#breeze-prod-image-build-line-46)">--airflow-constraints-reference                          </text><text class="breeze-prod-im [...] +</text><text class="breeze-prod-image-build-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-47)">│</text><text class="breeze-prod-image-build-r6" x="744.2" y="1166.8" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-47)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-47)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="1166.8" textLeng [...] +</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="561.2" clip-path="url(#breeze-prod-image-build-line-48)">--airflow-fallback-no-constraints-installation</text><text class="breeze-prod-image-build-r1" x="585.6" y="1191.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-48)">/</text><text class="breeze-prod-image [...] +</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="475.8" clip-path="url(#breeze-prod-image-build-line-49)">ow-fallback-no-constraints-installation</text><text class="breeze-prod-image-build-r1" x="744.2" y="1215.6" textLength="244" clip-path="url(#breeze-prod-image-build-line-49)">installation fails. </text><text cla [...] +</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-r5" x="744.2" y="1240" textLength="549" clip-path="url(#breeze-prod-image-build-line-50)">airflow-fallback-no-constraints-installation]</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- [...] +</text><text class="breeze-prod-image-build-r5" x="0" y="1264.4" textLength="1464" clip-path="url(#breeze-prod-image-build-line-51)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-51)"> +</text><text class="breeze-prod-image-build-r5" x="0" y="1288.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-52)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="1288.8" textLength="634.4" clip-path="url(#breeze-prod-image-build-line-52)"> Choosing dependencies and extras (for power users) </text><text class="breeze-prod-image-build-r5" x="658.8" y="1288.8" textLength="780.8" clip-path="url(#breeze-prod-image-build- [...] +</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-r4" x="24.4" y="1313.2" textLength="390.4" clip-path="url(#breeze-prod-image-build-line-53)">--airflow-extras                </text><text class="breeze-prod-image-build-r1" x="439.2" y="1313.2" textLength="366" clip-path="url(#breeze- [...] +</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="439.2" y="1337.6" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-54)">aiobotocore,amazon,async,celery,cncf-kubernetes,common-io,common-messaging,docker,</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1337.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-54)" [...] +</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-r5" x="439.2" y="1362" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-55)">elasticsearch,fab,ftp,git,google,google-auth,graphviz,grpc,hashicorp,http,ldap,mic</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1362" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-55)">│</te [...] +</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-r5" x="439.2" y="1386.4" textLength="1000.4" clip-path="url(#breeze-prod-image-build-line-56)">rosoft-azure,mysql,odbc,openlineage,pandas,postgres,redis,sendgrid,sftp,slack,snow</text><text class="breeze-prod-image-build-r5" x="1451.8" y="1386.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-56)" [...] +</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="439.2" y="1410.8" textLength="244" clip-path="url(#breeze-prod-image-build-line-57)">flake,ssh,statsd,uv]</text><text class="breeze-prod-image-build-r6" x="695.4" y="1410.8" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-57)">(TEXT)</text><text class="breeze-prod-image-build-r5" x="1451.8" [...] +</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="390.4" clip-path="url(#breeze-prod-image-build-line-58)">--additional-airflow-extras     </text><text class="breeze-prod-image-build-r1" x="439.2" y="1435.2" textLength="780.8" clip-path="url(#breeze-prod-image-build-line-58)">Additional extra  [...] +</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="390.4" clip-path="url(#breeze-prod-image-build-line-59)">--additional-python-deps        </text><text class="breeze-prod-image-build-r1" x="439.2" y="1459.6" textLength="780.8" clip-path="url(#breeze-prod-image-build-line-59)">Additional& [...] +</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="390.4" clip-path="url(#breeze-prod-image-build-line-60)">--dev-apt-deps                  </text><text class="breeze-prod-image-build-r1" x="439.2" y="1484" textLength="658.8" clip-path="url(#b [...] +</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="390.4" clip-path="url(#breeze-prod-image-build-line-61)">--additional-dev-apt-deps       </text><text class="breeze-prod-image-build-r1" x="439.2" y="1508.4" textLength="793" clip-path="url(#breeze-prod-image-build-line-61)">Additional ap [...] +</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="390.4" clip-path="url(#breeze-prod-image-build-line-62)">--dev-apt-command               </text><text class="breeze-prod-image-build-r1" x="439.2" y="1532.8" textLength="634.4" clip-path="url(#breeze-pro [...] +</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="390.4" clip-path="url(#breeze-prod-image-build-line-63)">--additional-dev-apt-command    </text><text class="breeze-prod-image-build-r1" x="439.2" y="1557.2" textLength="768.6" clip-path="url(#breeze-prod-image-build-line-63)">Additional command ex [...] +</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="390.4" clip-path="url(#breeze-prod-image-build-line-64)">--additional-dev-apt-env        </text><text class="breeze-prod-image-build-r1" x="439.2" y="1581.6" textLength="817.4" clip-path="url(#breeze-prod-image-build-line-64)">Additional& [...] +</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="390.4" clip-path="url(#breeze-prod-image-build-line-65)">--runtime-apt-deps              </text><text class="breeze-prod-image-build-r1" x="439.2" y="1606" textLength="707.6" clip-path="url(#breeze-prod-image-bui [...] +</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="390.4" clip-path="url(#breeze-prod-image-build-line-66)">--additional-runtime-apt-deps   </text><text class="breeze-prod-image-build-r1" x="439.2" y="1630.4" textLength="841.8" clip-path="url(#breeze-prod-image-build-line-66)">Additional apt runtime [...] +</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="390.4" clip-path="url(#breeze-prod-image-build-line-67)">--runtime-apt-command           </text><text class="breeze-prod-image-build-r1" x="439.2" y="1654.8" textLength="683.2" clip-path="url(#breeze-prod-image-build-line-6 [...] +</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="390.4" clip-path="url(#breeze-prod-image-build-line-68)">--additional-runtime-apt-command</text><text class="breeze-prod-image-build-r1" x="439.2" y="1679.2" textLength="817.4" clip-path="url(#breeze-prod-image-build-line-68)">Additional command executed before&# [...] +</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-env    </text><text class="breeze-prod-image-build-r1" x="439.2" y="1703.6" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-69)">Additional environment [...] +</text><text class="breeze-prod-image-build-r5" x="0" y="1728" textLength="1464" clip-path="url(#breeze-prod-image-build-line-70)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="1728" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-70)"> +</text><text class="breeze-prod-image-build-r5" x="0" y="1752.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-71)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="1752.4" textLength="817.4" clip-path="url(#breeze-prod-image-build-line-71)"> Advanced customization options (for specific customization needs) </text><text class="breeze-prod-image-build-r5" x="841.8" y="1752.4" textLength="597.8" clip-path="url(#breeze-pr [...] +</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="524.6" clip-path="url(#breeze-prod-image-build-line-72)">--installation-method                      </text><text class="breeze-prod-image-build-r1" x="573.4" y="1776.8" [...] +</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-r5" x="573.4" y="1801.2" textLength="146.4" clip-path="url(#breeze-prod-image-build-line-73)">[default: .]</text><text class="breeze-prod-image-build-r6" x="732" y="1801.2" textLength="244" clip-path="url(#breeze-prod-image-build-line-73)">(. | apache-airflow)</text><text class="breeze-prod-image-b [...] +</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="524.6" clip-path="url(#breeze-prod-image-build-line-74)">--install-airflow-reference                </text><text class="breeze-prod-image-build-r1" x="573.4" y="1825.6" textLength="536.8" clip-path= [...] +</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="524.6" clip-path="url(#breeze-prod-image-build-line-75)">--install-distributions-from-context       </text><text class="breeze-prod-image-build-r1" x="573.4" y="1850" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-75)">Install [...] +</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="573.4" y="1874.4" textLength="183" clip-path="url(#breeze-prod-image-build-line-76)">image. Implies </text><text class="breeze-prod-image-build-r4" x="756.4" y="1874.4" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-76)">--disable-airflow-repo-cache</text><text class="breeze-prod [...] +</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="524.6" clip-path="url(#breeze-prod-image-build-line-77)">--install-mysql-client-type                </text><text class="breeze-prod-image-build-r1" x="573.4" y="1898.8" textLength="488" clip-path="u [...] +</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="524.6" clip-path="url(#breeze-prod-image-build-line-78)">--cleanup-context                          </text><text class="breeze-prod-image-build-r1" [...] +</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="573.4" y="1947.6" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-79)">together with </text><text class="breeze-prod-image-build-r4" x="744.2" y="1947.6" textLength="439.2" clip-path="url(#breeze-prod-image-build-line-79)">--install-distributions-from-context</text><text class="br [...] +</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="524.6" clip-path="url(#breeze-prod-image-build-line-80)">--use-constraints-for-context-distributions</text><text class="breeze-prod-image-build-r1" x="573.4" y="1972" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-80)">Uses constraints for context [...] +</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-r1" x="573.4" y="1996.4" textLength="866.2" clip-path="url(#breeze-prod-image-build-line-81)">constraints store in docker-context-files or from github.              </text><text class="breeze-prod-image-build-r5" x [...] +</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="524.6" clip-path="url(#breeze-prod-image-build-line-82)">--disable-airflow-repo-cache               </text><text class="breeze-prod-image-build-r1" x="573.4" y="2020.8" textLength="658.8" clip-path="url( [...] +</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="524.6" clip-path="url(#breeze-prod-image-build-line-83)">--disable-mysql-client-installation        </text><text class="breeze-prod-image-build-r1" x="573.4" y="2045.2" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-83)"> [...] +</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="524.6" clip-path="url(#breeze-prod-image-build-line-84)">--disable-mssql-client-installation        </text><text class="breeze-prod-image-build-r1" x="573.4" y="2069.6" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-84)"> [...] +</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="524.6" clip-path="url(#breeze-prod-image-build-line-85)">--disable-postgres-client-installation     </text><text class="breeze-prod-image-build-r1" x="573.4" y="2094" textLength="378.2" clip-path="url(#breeze-prod-image-build-line-85)">Do not inst [...] +</text><text class="breeze-prod-image-build-r5" x="0" y="2118.4" textLength="1464" clip-path="url(#breeze-prod-image-build-line-86)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-86)"> +</text><text class="breeze-prod-image-build-r5" x="0" y="2142.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-87)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2142.8" textLength="622.2" clip-path="url(#breeze-prod-image-build-line-87)"> Preparing cache and push (for maintainers and CI) </text><text class="breeze-prod-image-build-r5" x="646.6" y="2142.8" textLength="793" clip-path="url(#breeze-prod-image-buil [...] +</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="268.4" clip-path="url(#breeze-prod-image-build-line-88)">--builder             </text><text class="breeze-prod-image-build-r1" x="317.2" y="2167.2" textLength="768.6" clip-path="url(#breeze-prod-image-build-line-8 [...] +</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="268.4" clip-path="url(#breeze-prod-image-build-line-89)">--platform            </text><text class="breeze-prod-image-build-r1" x="317.2" y="2191.6" textLength="341.6" clip-path="url(#breeze-prod-image-build-line-89)">P [...] +</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-r6" x="317.2" y="2216" textLength="292.8" clip-path="url(#breeze-prod-image-build-line-90)">linux/amd64,linux/arm64)</text><text class="breeze-prod-image-build-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-90)">│</text><text class="breeze-prod-image-build-r1" x="1464" y="221 [...] +</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="268.4" clip-path="url(#breeze-prod-image-build-line-91)">--push                </text><text class="breeze-prod-image-build-r1" x="317.2" y="2240.4" textLength="353.8" clip-path="url(#breeze-prod-ima [...] +</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="268.4" clip-path="url(#breeze-prod-image-build-line-92)">--prepare-buildx-cache</text><text class="breeze-prod-image-build-r1" x="317.2" y="2264.8" textLength="1122.4" clip-path="url(#breeze-prod-image-build-line-92)">Prepares build cache (this is done& [...] +</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-r1" x="317.2" y="2289.2" textLength="1122.4" clip-path="url(#breeze-prod-image-build-line-93)">image).                                   &# [...] +</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="280.6" clip-path="url(#breeze-prod-image-build-line-95)"> GitHub authentication </text><text class="breeze-prod-image-build-r5" x="305" y="2338" textLength="1134.6" clip-path="url(#breeze-prod-image-build-line-95)">─────────────────────────────────────────────────── [...] +</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="231.8" clip-path="url(#breeze-prod-image-build-line-96)">--github-repository</text><text class="breeze-prod-image-build-r7" x="280.6" y="2362.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-96)">-g</text><text class="breeze-prod-image-build-r1" x="329.4" y="23 [...] +</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="231.8" clip-path="url(#breeze-prod-image-build-line-97)">--github-token     </text><text class="breeze-prod-image-build-r1" x="329.4" y="2386.8" textLength="512.4" clip-path="url(#breeze-prod-image-build-line-97)">The token used to a [...] </text><text class="breeze-prod-image-build-r5" x="0" y="2411.2" textLength="1464" clip-path="url(#breeze-prod-image-build-line-98)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2411.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-98)"> +</text><text class="breeze-prod-image-build-r5" x="0" y="2435.6" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-99)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2435.6" textLength="195.2" clip-path="url(#breeze-prod-image-build-line-99)"> Common options </text><text class="breeze-prod-image-build-r5" x="219.6" y="2435.6" textLength="1220" clip-path="url(#breeze-prod-image-build-line-99)">──────────────────────────────────────────────────── [...] +</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="109.8" clip-path="url(#breeze-prod-image-build-line-100)">--answer </text><text class="breeze-prod-image-build-r7" x="158.6" y="2460" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-100)">-a</text><text class="breeze-prod-image-build-r1" x="207.4" y="2460" text [...] +</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="109.8" clip-path="url(#breeze-prod-image-build-line-101)">--dry-run</text><text class="breeze-prod-image-build-r7" x="158.6" y="2484.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-101)">-D</text><text class="breeze-prod-image-build-r1" x="207.4" y="2484.4" t [...] +</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="109.8" clip-path="url(#breeze-prod-image-build-line-102)">--verbose</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)">-v</text><text class="breeze-prod-image-build-r1" x="207.4" y="2508.8" t [...] +</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)">--help   </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)">-h</text><text class="breeze-prod-image-build-r1" x="207. [...] +</text><text class="breeze-prod-image-build-r5" x="0" y="2557.6" textLength="1464" clip-path="url(#breeze-prod-image-build-line-104)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2557.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-104)"> </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 148ae16c134..d2ce14588f0 100644 --- a/dev/breeze/doc/images/output_prod-image_build.txt +++ b/dev/breeze/doc/images/output_prod-image_build.txt @@ -1 +1 @@ -40a0f7f66fdde12c5bd240558dad4383 +9a4b13a748605ee9a728613466e36254 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 8e792bd2821..27af2c6a0cd 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, @@ -244,6 +245,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 @@ -293,6 +295,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, @@ -401,6 +404,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 753b50e0361..46cf70f7ac9 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 7792fbedaf0..65ad588cad2 100644 --- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py +++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py @@ -2260,6 +2260,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 6b362c5d865..070e502616d 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 @@ -249,6 +250,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 82a2cbe7b5e..e1b6c1e7b5d 100644 --- a/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py +++ b/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py @@ -1055,7 +1055,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 695fd49703f..5341a1cfc33 100644 --- a/scripts/docker/install_airflow_when_building_images.sh +++ b/scripts/docker/install_airflow_when_building_images.sh @@ -119,6 +119,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 @@ -168,6 +174,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
