This is an automated email from the ASF dual-hosted git repository. potiuk pushed a commit to branch apply-pypi-suffix-to-all-airflow-packages in repository https://gitbox.apache.org/repos/asf/airflow.git
commit b5b8c9286dd89eb75bf17bd0644605d2d82ed099 Author: Jarek Potiuk <[email protected]> AuthorDate: Thu Jul 27 18:53:41 2023 +0200 Apply pypi suffix to provider dependencies (including apache-airflow) So far we only applied PyPi suffix for cross-provider dependencies - i.e. when one airflow package depended on another one released at the same time we added "dev0" suffix to their cross-dependencies, when building them on CI so that they can be installed together without conflicts (this is because of decisions made with PEP-440 where version suffixes are in different namespaces than the final versions, so it is impossible to specify "final" dependency as minimal and have the ".dev0" satisfy it only for that single package. With openlineage provider, we need to release it before Airflow 2.7.0 gets released, and openlineage provider depends on Airflow 2.7.0 so we need to also handle the situation, where OpenLineage has >= 2.7.0 for Airflow, but the dependency that is used to resolve dependencies in CI uses 2.7.0dev0. This is done by dynamically manipulating the dependencies in setup.py based on VERSION_SUFFIX_FOR_PYPI variable. This variable in CI is set to "dev0" thus all packages built have "dev0" added as version, with this change if any package has >= <CURRENT_AIRFLOW_VERSION> specified, it will also be extended with the same "dev0" suffix. --- .github/workflows/build-images.yml | 1 + .github/workflows/ci.yml | 1 + Dockerfile | 5 +- Dockerfile.ci | 5 +- dev/breeze/README.md | 2 +- .../airflow_breeze/commands/ci_image_commands.py | 2 + .../commands/ci_image_commands_config.py | 1 + .../commands/production_image_commands.py | 2 + .../commands/production_image_commands_config.py | 1 + .../src/airflow_breeze/params/build_ci_params.py | 1 + .../src/airflow_breeze/params/build_prod_params.py | 1 + .../airflow_breeze/params/common_build_params.py | 1 + images/breeze/output-commands-hash.txt | 8 +- images/breeze/output_ci-image.svg | 24 ++-- images/breeze/output_ci-image_build.svg | 156 +++++++++++---------- images/breeze/output_prod-image_build.svg | 68 ++++----- setup.py | 42 +++++- 17 files changed, 188 insertions(+), 133 deletions(-) diff --git a/.github/workflows/build-images.yml b/.github/workflows/build-images.yml index 25d086f0ff..d613e059d1 100644 --- a/.github/workflows/build-images.yml +++ b/.github/workflows/build-images.yml @@ -175,6 +175,7 @@ jobs: DEFAULT_CONSTRAINTS_BRANCH: ${{ needs.build-info.outputs.default-constraints-branch }} RUNS_ON: ${{ needs.build-info.outputs.runs-on }} BACKEND: sqlite + VERSION_SUFFIX_FOR_PYPI: "dev0" steps: - name: Cleanup repo run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cda3148c59..19e5a72229 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -305,6 +305,7 @@ jobs: RUNS_ON: "${{needs.build-info.outputs.runs-on}}" # Force more parallelism for build even on public images PARALLELISM: 6 + VERSION_SUFFIX_FOR_PYPI: "dev0" steps: - name: Cleanup repo run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*" diff --git a/Dockerfile b/Dockerfile index 16446c0b03..21c17afa71 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1290,9 +1290,12 @@ ARG ADDITIONAL_PYTHON_DEPS="" # !!! MAKE SURE YOU SYNCHRONIZE THE LIST BETWEEN: Dockerfile, Dockerfile.ci ARG EAGER_UPGRADE_ADDITIONAL_REQUIREMENTS="" +ARG VERSION_SUFFIX_FOR_PYPI="" + ENV ADDITIONAL_PYTHON_DEPS=${ADDITIONAL_PYTHON_DEPS} \ INSTALL_PACKAGES_FROM_CONTEXT=${INSTALL_PACKAGES_FROM_CONTEXT} \ - EAGER_UPGRADE_ADDITIONAL_REQUIREMENTS=${EAGER_UPGRADE_ADDITIONAL_REQUIREMENTS} + EAGER_UPGRADE_ADDITIONAL_REQUIREMENTS=${EAGER_UPGRADE_ADDITIONAL_REQUIREMENTS} \ + VERSION_SUFFIX_FOR_PYPI=${VERSION_SUFFIX_FOR_PYPI} WORKDIR ${AIRFLOW_HOME} diff --git a/Dockerfile.ci b/Dockerfile.ci index 5aa9d72ec0..9ae0091c6b 100644 --- a/Dockerfile.ci +++ b/Dockerfile.ci @@ -1376,8 +1376,11 @@ RUN echo "Airflow version: ${AIRFLOW_VERSION}" # !!! MAKE SURE YOU SYNCHRONIZE THE LIST BETWEEN: Dockerfile, Dockerfile.ci ARG EAGER_UPGRADE_ADDITIONAL_REQUIREMENTS="" ARG UPGRADE_TO_NEWER_DEPENDENCIES="false" +ARG VERSION_SUFFIX_FOR_PYPI="" + ENV EAGER_UPGRADE_ADDITIONAL_REQUIREMENTS=${EAGER_UPGRADE_ADDITIONAL_REQUIREMENTS} \ - UPGRADE_TO_NEWER_DEPENDENCIES=${UPGRADE_TO_NEWER_DEPENDENCIES} + UPGRADE_TO_NEWER_DEPENDENCIES=${UPGRADE_TO_NEWER_DEPENDENCIES} \ + VERSION_SUFFIX_FOR_PYPI=${VERSION_SUFFIX_FOR_PYPI} # Copy all scripts required for installation - changing any of those should lead to # rebuilding from here diff --git a/dev/breeze/README.md b/dev/breeze/README.md index a91598a062..7751502524 100644 --- a/dev/breeze/README.md +++ b/dev/breeze/README.md @@ -52,6 +52,6 @@ PLEASE DO NOT MODIFY THE HASH BELOW! IT IS AUTOMATICALLY UPDATED BY PRE-COMMIT. --------------------------------------------------------------------------------------------------------- -Package config hash: c2bade421865f94fb91f652317d76f3686ad017067349265d8a1d465bbfc2f0796d570bf4777acfb31a7703f1ccb6b0a63c655b97cec9eb9fdeeb1676c804c02 +Package config hash: 9d095d522c9f6fcf0c5834fcdc050bc98231d17fad07ec054c4e437580129d547b693b66b61442757f81fc1a505483da5267cc973dbf86babba7cd2c11697708 --------------------------------------------------------------------------------------------------------- diff --git a/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py b/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py index 5b6b9ee3b8..141908864e 100644 --- a/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py +++ b/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py @@ -70,6 +70,7 @@ from airflow_breeze.utils.common_options import ( option_upgrade_to_newer_dependencies, option_verbose, option_verify, + option_version_suffix_for_pypi, option_wait_for_image, ) from airflow_breeze.utils.confirm import STANDARD_TIMEOUT, Answer, user_confirm @@ -195,6 +196,7 @@ def prepare_for_building_ci_image(params: BuildCiParams): @option_tag_as_latest @option_additional_pip_install_flags @option_github_repository +@option_version_suffix_for_pypi @option_verbose @option_dry_run @option_answer diff --git a/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py b/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py index b408bb9f7d..c011fde22a 100644 --- a/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py +++ b/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py @@ -66,6 +66,7 @@ CI_IMAGE_TOOLS_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = { "--additional-dev-apt-command", "--dev-apt-deps", "--dev-apt-command", + "--version-suffix-for-pypi", ], }, { 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 cb2d3d419b..a1c6f2df15 100644 --- a/dev/breeze/src/airflow_breeze/commands/production_image_commands.py +++ b/dev/breeze/src/airflow_breeze/commands/production_image_commands.py @@ -72,6 +72,7 @@ from airflow_breeze.utils.common_options import ( option_upgrade_to_newer_dependencies, option_verbose, option_verify, + option_version_suffix_for_pypi, option_wait_for_image, ) from airflow_breeze.utils.console import Output, get_console @@ -223,6 +224,7 @@ def prod_image(): @option_tag_as_latest @option_additional_pip_install_flags @option_github_repository +@option_version_suffix_for_pypi @option_verbose @option_dry_run def build( 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 42c58c6e84..40609bffa8 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 @@ -72,6 +72,7 @@ PRODUCTION_IMAGE_TOOLS_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = "--runtime-apt-command", "--dev-apt-deps", "--dev-apt-command", + "--version-suffix-for-pypi", ], }, { diff --git a/dev/breeze/src/airflow_breeze/params/build_ci_params.py b/dev/breeze/src/airflow_breeze/params/build_ci_params.py index 04d4b147f9..97324a27ab 100644 --- a/dev/breeze/src/airflow_breeze/params/build_ci_params.py +++ b/dev/breeze/src/airflow_breeze/params/build_ci_params.py @@ -98,6 +98,7 @@ class BuildCiParams(CommonBuildParams): "additional_airflow_extras", "additional_pip_install_flags", "additional_python_deps", + "version_suffix_for_pypi", ] def __post_init__(self): 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 8dfbdc0935..721cac8da7 100644 --- a/dev/breeze/src/airflow_breeze/params/build_prod_params.py +++ b/dev/breeze/src/airflow_breeze/params/build_prod_params.py @@ -240,4 +240,5 @@ class BuildProdParams(CommonBuildParams): "dev_apt_deps", "runtime_apt_command", "runtime_apt_deps", + "version_suffix_for_pypi", ] diff --git a/dev/breeze/src/airflow_breeze/params/common_build_params.py b/dev/breeze/src/airflow_breeze/params/common_build_params.py index bbc0da9d9a..914a2b02e2 100644 --- a/dev/breeze/src/airflow_breeze/params/common_build_params.py +++ b/dev/breeze/src/airflow_breeze/params/common_build_params.py @@ -65,6 +65,7 @@ class CommonBuildParams: upgrade_to_newer_dependencies: bool = False upgrade_on_failure: bool = False dry_run: bool = False + version_suffix_for_pypi: str = "" verbose: bool = False @property diff --git a/images/breeze/output-commands-hash.txt b/images/breeze/output-commands-hash.txt index c0ccd98d5a..94c4c589d8 100644 --- a/images/breeze/output-commands-hash.txt +++ b/images/breeze/output-commands-hash.txt @@ -9,10 +9,10 @@ ci:get-workflow-info:8246038093359b9c3c110043419473e2 ci:resource-check:bfcca92f18a403ca630955074eb5e9ad ci:selective-check:6657ed5d42affb7264b5efcc86f17a2a ci:65d145d7746bde5f8dc8f6f484cfc134 -ci-image:build:a06f3ac7e0110213db25d06e6f5702da +ci-image:build:517f74610049c6c1d42a11693d40f89f ci-image:pull:7f14482a588f018f76df84719e77723f ci-image:verify:c90dc7e20fce2351eb89d8d1ebbd35e7 -ci-image:8b6a9a00849da08e89e8af2b6bd3672c +ci-image:8a6c5e10fa1901522e128d5a0bdcc033 cleanup:8d92d453a6700f6d8cb11fb6a8b50461 compile-www-assets:0963f1409f0aa1e3b137cddd4cc52e87 down:4580f5b3b178ea00182694f134a751f3 @@ -31,10 +31,10 @@ k8s:status:1b1b6fb6ccc7a211a3eb44568da71659 k8s:tests:2319c6f5ba0681ff7627e3166a1479ef k8s:upload-k8s-image:a9ac79e2f5e3d6b01fa45e764885913f k8s:db08df55a8200bff5858a3b7549bff47 -prod-image:build:1a321a1243555ab4e2cc95f44e85c92e +prod-image:build:d58b9222d141fd3620459ffaa9ee0235 prod-image:pull:76f1f27e6119928412abecf153fce4bb prod-image:verify:bd2b78738a7c388dbad6076c41a9f906 -prod-image:ad55d9dce93cbfcc1c5ad8640a007340 +prod-image:a7018fc4de9d087d69b25cd1cba71216 release-management:add-back-references:8dab6a30076a55f2d31c6d22a94e0ccb release-management:create-minor-branch:a3834afc4aa5d1e98002c9e9e7a9931d release-management:generate-constraints:b8fcaf8f0acd35ed5dbd48659bdb6485 diff --git a/images/breeze/output_ci-image.svg b/images/breeze/output_ci-image.svg index bf1df9347a..3025e6e470 100644 --- a/images/breeze/output_ci-image.svg +++ b/images/breeze/output_ci-image.svg @@ -35,8 +35,8 @@ .breeze-ci-image-r1 { fill: #c5c8c6;font-weight: bold } .breeze-ci-image-r2 { fill: #c5c8c6 } .breeze-ci-image-r3 { fill: #d0b344;font-weight: bold } -.breeze-ci-image-r4 { fill: #68a0b3;font-weight: bold } -.breeze-ci-image-r5 { fill: #868887 } +.breeze-ci-image-r4 { fill: #868887 } +.breeze-ci-image-r5 { fill: #68a0b3;font-weight: bold } .breeze-ci-image-r6 { fill: #98a84b;font-weight: bold } </style> @@ -93,18 +93,18 @@ <g class="breeze-ci-image-matrix"> <text class="breeze-ci-image-r2" x="1464" y="20" textLength="12.2" clip-path="url(#breeze-ci-image-line-0)"> -</text><text class="breeze-ci-image-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#breeze-ci-image-line-1)">Usage: </text><text class="breeze-ci-image-r1" x="97.6" y="44.4" textLength="207.4" clip-path="url(#breeze-ci-image-line-1)">breeze ci-image [</text><text class="breeze-ci-image-r4" x="305" y="44.4" textLength="85.4" clip-path="url(#breeze-ci-image-line-1)">OPTIONS</text><text class="breeze-ci-image-r1" x="390.4" y="44.4" textLength="24.4" clip-path="url(#br [...] +</text><text class="breeze-ci-image-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#breeze-ci-image-line-1)">Usage: </text><text class="breeze-ci-image-r1" x="97.6" y="44.4" textLength="524.6" clip-path="url(#breeze-ci-image-line-1)">breeze ci-image [OPTIONS] COMMAND [ARGS]...</text><text class="breeze-ci-image-r2" x="1464" y="44.4" textLength="12.2" clip-path="url(#breeze-ci-image-line-1)"> </text><text class="breeze-ci-image-r2" x="1464" y="68.8" textLength="12.2" clip-path="url(#breeze-ci-image-line-2)"> -</text><text class="breeze-ci-image-r2" x="12.2" y="93.2" textLength="597.8" clip-path="url(#breeze-ci-image-line-3)">Tools that developers can use to manually manage </text><text class="breeze-ci-image-r4" x="610" y="93.2" textLength="24.4" clip-path="url(#breeze-ci-image-line-3)">CI</text><text class="breeze-ci-image-r2" x="634.4" y="93.2" textLength="85.4" clip-path="url(#breeze-ci-image-line-3)"> images</text><text class="breeze-ci-image-r [...] +</text><text class="breeze-ci-image-r2" x="12.2" y="93.2" textLength="707.6" clip-path="url(#breeze-ci-image-line-3)">Tools that developers can use to manually manage CI images</text><text class="breeze-ci-image-r2" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-ci-image-line-3)"> </text><text class="breeze-ci-image-r2" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-ci-image-line-4)"> -</text><text class="breeze-ci-image-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-line-5)">╭─</text><text class="breeze-ci-image-r5" x="24.4" y="142" textLength="195.2" clip-path="url(#breeze-ci-image-line-5)"> Common options </text><text class="breeze-ci-image-r5" x="219.6" y="142" textLength="1220" clip-path="url(#breeze-ci-image-line-5)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text [...] -</text><text class="breeze-ci-image-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-line-6)">│</text><text class="breeze-ci-image-r4" x="24.4" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-line-6)">-</text><text class="breeze-ci-image-r4" x="36.6" y="166.4" textLength="61" clip-path="url(#breeze-ci-image-line-6)">-help</text><text class="breeze-ci-image-r6" x="122" y="166.4" textLength="24.4" clip-path="url(#breeze-ci-image-line-6)">-h</text><text clas [...] -</text><text class="breeze-ci-image-r5" x="0" y="190.8" textLength="1464" clip-path="url(#breeze-ci-image-line-7)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-r2" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-line-7)"> -</text><text class="breeze-ci-image-r5" x="0" y="215.2" textLength="24.4" clip-path="url(#breeze-ci-image-line-8)">╭─</text><text class="breeze-ci-image-r5" x="24.4" y="215.2" textLength="195.2" clip-path="url(#breeze-ci-image-line-8)"> CI Image tools </text><text class="breeze-ci-image-r5" x="219.6" y="215.2" textLength="1220" clip-path="url(#breeze-ci-image-line-8)">────────────────────────────────────────────────────────────────────────────────────────────────────< [...] -</text><text class="breeze-ci-image-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-line-9)">│</text><text class="breeze-ci-image-r4" x="24.4" y="239.6" textLength="97.6" clip-path="url(#breeze-ci-image-line-9)">build   </text><text class="breeze-ci-image-r2" x="146.4" y="239.6" textLength="73.2" clip-path="url(#breeze-ci-image-line-9)">Build </text><text class="breeze-ci-image-r4" x="219.6" y="239.6" textLength="24.4" clip-path="url(#breeze-ci-i [...] -</text><text class="breeze-ci-image-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-line-10)">│</text><text class="breeze-ci-image-r4" x="24.4" y="264" textLength="97.6" clip-path="url(#breeze-ci-image-line-10)">pull    </text><text class="breeze-ci-image-r2" x="146.4" y="264" textLength="329.4" clip-path="url(#breeze-ci-image-line-10)">Pull and optionally verify </text><text class="breeze-ci-image-r4" x="475.8" y="264" textLeng [...] -</text><text class="breeze-ci-image-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-line-11)">│</text><text class="breeze-ci-image-r4" x="24.4" y="288.4" textLength="97.6" clip-path="url(#breeze-ci-image-line-11)">verify  </text><text class="breeze-ci-image-r2" x="146.4" y="288.4" textLength="85.4" clip-path="url(#breeze-ci-image-line-11)">Verify </text><text class="breeze-ci-image-r4" x="231.8" y="288.4" textLength="24.4" clip-path="url(#breeze-ci-im [...] -</text><text class="breeze-ci-image-r5" x="0" y="312.8" textLength="1464" clip-path="url(#breeze-ci-image-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-r2" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-ci-image-line-12)"> +</text><text class="breeze-ci-image-r4" x="0" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-line-5)">╭─</text><text class="breeze-ci-image-r4" x="24.4" y="142" textLength="195.2" clip-path="url(#breeze-ci-image-line-5)"> Common options </text><text class="breeze-ci-image-r4" x="219.6" y="142" textLength="1220" clip-path="url(#breeze-ci-image-line-5)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text [...] +</text><text class="breeze-ci-image-r4" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-line-6)">│</text><text class="breeze-ci-image-r5" x="24.4" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-line-6)">-</text><text class="breeze-ci-image-r5" x="36.6" y="166.4" textLength="61" clip-path="url(#breeze-ci-image-line-6)">-help</text><text class="breeze-ci-image-r6" x="122" y="166.4" textLength="24.4" clip-path="url(#breeze-ci-image-line-6)">-h</text><text clas [...] +</text><text class="breeze-ci-image-r4" x="0" y="190.8" textLength="1464" clip-path="url(#breeze-ci-image-line-7)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-r2" x="1464" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-line-7)"> +</text><text class="breeze-ci-image-r4" x="0" y="215.2" textLength="24.4" clip-path="url(#breeze-ci-image-line-8)">╭─</text><text class="breeze-ci-image-r4" x="24.4" y="215.2" textLength="195.2" clip-path="url(#breeze-ci-image-line-8)"> CI Image tools </text><text class="breeze-ci-image-r4" x="219.6" y="215.2" textLength="1220" clip-path="url(#breeze-ci-image-line-8)">────────────────────────────────────────────────────────────────────────────────────────────────────< [...] +</text><text class="breeze-ci-image-r4" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-line-9)">│</text><text class="breeze-ci-image-r5" x="24.4" y="239.6" textLength="97.6" clip-path="url(#breeze-ci-image-line-9)">build   </text><text class="breeze-ci-image-r2" x="146.4" y="239.6" textLength="1293.2" clip-path="url(#breeze-ci-image-line-9)">Build CI image. Include building multiple images for all python  [...] +</text><text class="breeze-ci-image-r4" x="0" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-line-10)">│</text><text class="breeze-ci-image-r5" x="24.4" y="264" textLength="97.6" clip-path="url(#breeze-ci-image-line-10)">pull    </text><text class="breeze-ci-image-r2" x="146.4" y="264" textLength="1293.2" clip-path="url(#breeze-ci-image-line-10)">Pull and optionally verify CI images - possibly in parallel fo [...] +</text><text class="breeze-ci-image-r4" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-line-11)">│</text><text class="breeze-ci-image-r5" x="24.4" y="288.4" textLength="97.6" clip-path="url(#breeze-ci-image-line-11)">verify  </text><text class="breeze-ci-image-r2" x="146.4" y="288.4" textLength="1293.2" clip-path="url(#breeze-ci-image-line-11)">Verify CI image.                [...] +</text><text class="breeze-ci-image-r4" x="0" y="312.8" textLength="1464" clip-path="url(#breeze-ci-image-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-r2" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-ci-image-line-12)"> </text> </g> </g> diff --git a/images/breeze/output_ci-image_build.svg b/images/breeze/output_ci-image_build.svg index 875f8212fe..ef457feb9d 100644 --- a/images/breeze/output_ci-image_build.svg +++ b/images/breeze/output_ci-image_build.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 1482 1855.6" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 1482 1880.0" xmlns="http://www.w3.org/2000/svg"> <!-- Generated with Rich https://www.textualize.io --> <style> @@ -35,15 +35,15 @@ .breeze-ci-image-build-r1 { fill: #c5c8c6;font-weight: bold } .breeze-ci-image-build-r2 { fill: #c5c8c6 } .breeze-ci-image-build-r3 { fill: #d0b344;font-weight: bold } -.breeze-ci-image-build-r4 { fill: #68a0b3;font-weight: bold } -.breeze-ci-image-build-r5 { fill: #868887 } +.breeze-ci-image-build-r4 { fill: #868887 } +.breeze-ci-image-build-r5 { fill: #68a0b3;font-weight: bold } .breeze-ci-image-build-r6 { fill: #98a84b;font-weight: bold } .breeze-ci-image-build-r7 { fill: #8d7b39 } </style> <defs> <clipPath id="breeze-ci-image-build-clip-terminal"> - <rect x="0" y="0" width="1463.0" height="1804.6" /> + <rect x="0" y="0" width="1463.0" height="1829.0" /> </clipPath> <clipPath id="breeze-ci-image-build-line-0"> <rect x="0" y="1.5" width="1464" height="24.65"/> @@ -264,9 +264,12 @@ <clipPath id="breeze-ci-image-build-line-72"> <rect x="0" y="1758.3" width="1464" height="24.65"/> </clipPath> +<clipPath id="breeze-ci-image-build-line-73"> + <rect x="0" y="1782.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="1853.6" rx="8"/><text class="breeze-ci-image-build-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: ci-image build</text> + <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1878" rx="8"/><text class="breeze-ci-image-build-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: ci-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"/> @@ -277,79 +280,80 @@ <g class="breeze-ci-image-build-matrix"> <text class="breeze-ci-image-build-r2" x="1464" y="20" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-0)"> -</text><text class="breeze-ci-image-build-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-1)">Usage: </text><text class="breeze-ci-image-build-r1" x="97.6" y="44.4" textLength="280.6" clip-path="url(#breeze-ci-image-build-line-1)">breeze ci-image build [</text><text class="breeze-ci-image-build-r4" x="378.2" y="44.4" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-1)">OPTIONS</text><text class="breeze-ci-image-build-r1" [...] +</text><text class="breeze-ci-image-build-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-1)">Usage: </text><text class="breeze-ci-image-build-r1" x="97.6" y="44.4" textLength="378.2" clip-path="url(#breeze-ci-image-build-line-1)">breeze ci-image build [OPTIONS]</text><text class="breeze-ci-image-build-r2" x="1464" y="44.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-1)"> </text><text class="breeze-ci-image-build-r2" x="1464" y="68.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-2)"> -</text><text class="breeze-ci-image-build-r2" x="12.2" y="93.2" textLength="73.2" clip-path="url(#breeze-ci-image-build-line-3)">Build </text><text class="breeze-ci-image-build-r4" x="85.4" y="93.2" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-3)">CI</text><text class="breeze-ci-image-build-r2" x="109.8" y="93.2" textLength="793" clip-path="url(#breeze-ci-image-build-line-3)"> image. Include building multiple images for all pyt [...] +</text><text class="breeze-ci-image-build-r2" x="12.2" y="93.2" textLength="890.6" clip-path="url(#breeze-ci-image-build-line-3)">Build CI image. Include building multiple images for all python versions.</text><text class="breeze-ci-image-build-r2" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-3)"> </text><text class="breeze-ci-image-build-r2" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-4)"> -</text><text class="breeze-ci-image-build-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-5)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="142" textLength="158.6" clip-path="url(#breeze-ci-image-build-line-5)"> Basic usage </text><text class="breeze-ci-image-build-r5" x="183" y="142" textLength="1256.6" clip-path="url(#breeze-ci-image-build-line-5)">─────────────────────────────────────────────────────────────────────────────── [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-6)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-6)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="166.4" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-6)">-python</text><text class="breeze-ci-image-build-r6" x="427" y="166.4" textLength="24.4" clip-path="url [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-7)">│</text><text class="breeze-ci-image-build-r7" x="475.8" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-build-line-7)">(>3.8< | 3.9 | 3.10 | 3.11)                             [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-8)">│</text><text class="breeze-ci-image-build-r5" x="475.8" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-build-line-8)">[default: 3.8]                                     [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-9)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-9)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="239.6" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-9)">-upgrade</text><text class="breeze-ci-image-build-r4" x="134.2" y="239.6" textLength="268.4" clip-path= [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-10)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-10)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="264" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-10)">-upgrade</text><text class="breeze-ci-image-build-r4" x="134.2" y="264" textLength="134.2" clip-path="url( [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-11)">│</text><text class="breeze-ci-image-build-r2" x="475.8" y="288.4" textLength="963.8" clip-path="url(#breeze-ci-image-build-line-11)">fails.                                     &# [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-12)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="312.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-12)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="312.8" textLength="73.2" clip-path="url(#breeze-ci-image-build-line-12)">-image</text><text class="breeze-ci-image-build-r4" x="109.8" y="312.8" textLength="48.8" clip-path= [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-13)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="337.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-13)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="337.2" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-13)">-tag</text><text class="breeze-ci-image-build-r4" x="85.4" y="337.2" textLength="122" clip-path="url [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-14)">│</text><text class="breeze-ci-image-build-r2" x="475.8" y="361.6" textLength="414.8" clip-path="url(#breeze-ci-image-build-line-14)">when you build or pull image with </text><text class="breeze-ci-image-build-r4" x="890.6" y="361.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-14)">-</text><text class="breeze-c [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-15)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="386" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-15)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="386" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-15)">-docker</text><text class="breeze-ci-image-build-r4" x="122" y="386" textLength="73.2" clip-path="url(#bre [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-16)">│</text><text class="breeze-ci-image-build-r5" x="475.8" y="410.4" textLength="549" clip-path="url(#breeze-ci-image-build-line-16)">[default: registry]                          </text><text class="breeze-ci-image-build-r5" x="145 [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-17)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-17)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="434.8" textLength="73.2" clip-path="url(#breeze-ci-image-build-line-17)">-force</text><text class="breeze-ci-image-build-r4" x="109.8" y="434.8" textLength="73.2" clip-path= [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-ci-image-build-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r2" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-18)"> -</text><text class="breeze-ci-image-build-r5" x="0" y="483.6" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-19)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="483.6" textLength="353.8" clip-path="url(#breeze-ci-image-build-line-19)"> Building images in parallel </text><text class="breeze-ci-image-build-r5" x="378.2" y="483.6" textLength="1061.4" clip-path="url(#breeze-ci-image-build-line-19)">────────────────────────────────────────── [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-20)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="508" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-20)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="508" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-20)">-run</text><text class="breeze-ci-image-build-r4" x="85.4" y="508" textLength="146.4" clip-path="url(#bree [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-21)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="532.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-21)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="532.4" textLength="146.4" clip-path="url(#breeze-ci-image-build-line-21)">-parallelism</text><text class="breeze-ci-image-build-r2" x="378.2" y="532.4" textLength="915" clip [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-22)">│</text><text class="breeze-ci-image-build-r7" x="378.2" y="556.8" textLength="915" clip-path="url(#breeze-ci-image-build-line-22)">(INTEGER RANGE)                                   &# [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-23)">│</text><text class="breeze-ci-image-build-r5" x="378.2" y="581.2" textLength="915" clip-path="url(#breeze-ci-image-build-line-23)">[default: 4; 1<=x<=8]                                 [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-24)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="605.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-24)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="605.6" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-24)">-python</text><text class="breeze-ci-image-build-r4" x="122" y="605.6" textLength="109.8" clip-path= [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-25)">│</text><text class="breeze-ci-image-build-r5" x="378.2" y="630" textLength="951.6" clip-path="url(#breeze-ci-image-build-line-25)">[default: 3.8 3.9 3.10 3.11]                                [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-26)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="654.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-26)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="654.4" textLength="61" clip-path="url(#breeze-ci-image-build-line-26)">-skip</text><text class="breeze-ci-image-build-r4" x="97.6" y="654.4" textLength="97.6" clip-path="url [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-27)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="678.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-27)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="678.8" textLength="73.2" clip-path="url(#breeze-ci-image-build-line-27)">-debug</text><text class="breeze-ci-image-build-r4" x="109.8" y="678.8" textLength="122" clip-path=" [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-28)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="703.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-28)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="703.2" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-28)">-include</text><text class="breeze-ci-image-build-r4" x="134.2" y="703.2" textLength="195.2" clip-pa [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="727.6" textLength="1464" clip-path="url(#breeze-ci-image-build-line-29)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r2" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-29)"> -</text><text class="breeze-ci-image-build-r5" x="0" y="752" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-30)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="752" textLength="439.2" clip-path="url(#breeze-ci-image-build-line-30)"> Advanced options (for power users) </text><text class="breeze-ci-image-build-r5" x="463.6" y="752" textLength="976" clip-path="url(#breeze-ci-image-build-line-30)">─────────────────────────────────────── [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-31)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="776.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-31)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="776.4" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-31)">-builder</text><text class="breeze-ci-image-build-r2" x="463.6" y="776.4" textLength="756.4" clip-pa [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-32)">│</text><text class="breeze-ci-image-build-r5" x="463.6" y="800.8" textLength="756.4" clip-path="url(#breeze-ci-image-build-line-32)">[default: autodetect]                                   [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-33)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-33)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="825.2" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-33)">-install</text><text class="breeze-ci-image-build-r4" x="134.2" y="825.2" textLength="280.6" clip-pa [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-34)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="849.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-34)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="849.6" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-34)">-airflow</text><text class="breeze-ci-image-build-r4" x="134.2" y="849.6" textLength="256.2" clip-pa [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-35)">│</text><text class="breeze-ci-image-build-r2" x="463.6" y="874" textLength="366" clip-path="url(#breeze-ci-image-build-line-35)">file. It could be full remote </text><text class="breeze-ci-image-build-r4" x="829.6" y="874" textLength="36.6" clip-path="url(#breeze-ci-image-build-line-35)">URL</text><text class="breeze-ci-image-build-r [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-36)">│</text><text class="breeze-ci-image-build-r2" x="463.6" y="898.4" textLength="976" clip-path="url(#breeze-ci-image-build-line-36)">`docker-context-files` (in this case it has to start with                       [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-37)">│</text><text class="breeze-ci-image-build-r2" x="463.6" y="922.8" textLength="976" clip-path="url(#breeze-ci-image-build-line-37)">/opt/airflow/docker-context-files).                                  [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-38)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="947.2" textLength="976" clip-path="url(#breeze-ci-image-build-line-38)">(TEXT)                                      [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-39)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="971.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-39)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="971.6" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-39)">-airflow</text><text class="breeze-ci-image-build-r4" x="134.2" y="971.6" textLength="207.4" clip-pa [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-40)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="996" textLength="866.2" clip-path="url(#breeze-ci-image-build-line-40)">(constraints-source-providers | constraints | constraints-no-providers)</text><text class="breeze-ci-image-build-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-40)">│</text><tex [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-41)">│</text><text class="breeze-ci-image-build-r5" x="463.6" y="1020.4" textLength="866.2" clip-path="url(#breeze-ci-image-build-line-41)">[default: constraints-source-providers]                               [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-42)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1044.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-42)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1044.8" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-42)">-airflow</text><text class="breeze-ci-image-build-r4" x="134.2" y="1044.8" textLength="268.4" cli [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-43)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1069.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-43)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1069.2" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-43)">-python</text><text class="breeze-ci-image-build-r4" x="122" y="1069.2" textLength="73.2" clip-pa [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-44)">│</text><text class="breeze-ci-image-build-r2" x="463.6" y="1093.6" textLength="280.6" clip-path="url(#breeze-ci-image-build-line-44)">something like: python:</text><text class="breeze-ci-image-build-r4" x="744.2" y="1093.6" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-44)">VERSION</text><text class="breeze-ci-image-build-r2" x="829.6" [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-45)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="1118" textLength="976" clip-path="url(#breeze-ci-image-build-line-45)">(TEXT)                                       [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-46)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1142.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-46)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1142.4" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-46)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1142.4" textLength="146.4" [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-47)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1166.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-47)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1166.8" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-47)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1166.8" textLength="85.4" [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-48)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1191.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-48)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1191.2" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-48)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1191.2" textLength="219.6" [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-49)">│</text><text class="breeze-ci-image-build-r2" x="463.6" y="1215.6" textLength="976" clip-path="url(#breeze-ci-image-build-line-49)">itself).                                      [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-50)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="1240" textLength="976" clip-path="url(#breeze-ci-image-build-line-50)">(TEXT)                                       [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-51)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1264.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-51)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1264.4" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-51)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1264.4" textLength="158.6" [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-52)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1288.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-52)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1288.8" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-52)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1288.8" textLength="146.4" [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-53)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1313.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-53)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1313.2" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-53)">-additional</text><text class="breeze-ci-image-build-r4" x="170.8" y="1313.2" textLength="195.2" [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-54)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1337.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-54)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1337.6" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-54)">-dev</text><text class="breeze-ci-image-build-r4" x="85.4" y="1337.6" textLength="109.8" clip-pat [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-55)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1362" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-55)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1362" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-55)">-dev</text><text class="breeze-ci-image-build-r4" x="85.4" y="1362" textLength="146.4" clip-path="url(# [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1386.4" textLength="1464" clip-path="url(#breeze-ci-image-build-line-56)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r2" x="1464" y="1386.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-56)"> -</text><text class="breeze-ci-image-build-r5" x="0" y="1410.8" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-57)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="1410.8" textLength="622.2" clip-path="url(#breeze-ci-image-build-line-57)"> Preparing cache and push (for maintainers and CI) </text><text class="breeze-ci-image-build-r5" x="646.6" y="1410.8" textLength="793" clip-path="url(#breeze-ci-image-build-line-57)"> [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-58)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1435.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-58)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1435.2" textLength="109.8" clip-path="url(#breeze-ci-image-build-line-58)">-platform</text><text class="breeze-ci-image-build-r2" x="341.6" y="1435.2" textLength="329.4" c [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-59)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1459.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-59)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1459.6" textLength="61" clip-path="url(#breeze-ci-image-build-line-59)">-push</text><text class="breeze-ci-image-build-r2" x="341.6" y="1459.6" textLength="353.8" clip-pat [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-60)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1484" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-60)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1484" textLength="73.2" clip-path="url(#breeze-ci-image-build-line-60)">-empty</text><text class="breeze-ci-image-build-r4" x="109.8" y="1484" textLength="73.2" clip-path="url [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-61)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1508.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-61)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1508.4" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-61)">-prepare</text><text class="breeze-ci-image-build-r4" x="134.2" y="1508.4" textLength="158.6" cli [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-62)">│</text><text class="breeze-ci-image-build-r2" x="341.6" y="1532.8" textLength="1098" clip-path="url(#breeze-ci-image-build-line-62)">image).                                      [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1557.2" textLength="1464" clip-path="url(#breeze-ci-image-build-line-63)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r2" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-63)"> -</text><text class="breeze-ci-image-build-r5" x="0" y="1581.6" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-64)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="1581.6" textLength="280.6" clip-path="url(#breeze-ci-image-build-line-64)"> Github authentication </text><text class="breeze-ci-image-build-r5" x="305" y="1581.6" textLength="1134.6" clip-path="url(#breeze-ci-image-build-line-64)">───────────────────────────────────────────────────────── [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-65)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1606" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-65)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1606" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-65)">-github</text><text class="breeze-ci-image-build-r4" x="122" y="1606" textLength="134.2" clip-path="url [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-66)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1630.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-66)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1630.4" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-66)">-github</text><text class="breeze-ci-image-build-r4" x="122" y="1630.4" textLength="73.2" clip-pa [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1654.8" textLength="1464" clip-path="url(#breeze-ci-image-build-line-67)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r2" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-67)"> -</text><text class="breeze-ci-image-build-r5" x="0" y="1679.2" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-68)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="1679.2" textLength="195.2" clip-path="url(#breeze-ci-image-build-line-68)"> Common options </text><text class="breeze-ci-image-build-r5" x="219.6" y="1679.2" textLength="1220" clip-path="url(#breeze-ci-image-build-line-68)">──────────────────────────────────────────────────────────────── [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-69)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1703.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-69)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1703.6" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-69)">-verbose</text><text class="breeze-ci-image-build-r6" x="158.6" y="1703.6" textLength="24.4" clip [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-70)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1728" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-70)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1728" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-70)">-dry</text><text class="breeze-ci-image-build-r4" x="85.4" y="1728" textLength="48.8" clip-path="url(#b [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-71)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1752.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-71)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1752.4" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-71)">-answer</text><text class="breeze-ci-image-build-r6" x="158.6" y="1752.4" textLength="24.4" clip- [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-72)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1776.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-72)">-</text><text class="breeze-ci-image-build-r4" x="36.6" y="1776.8" textLength="61" clip-path="url(#breeze-ci-image-build-line-72)">-help</text><text class="breeze-ci-image-build-r6" x="158.6" y="1776.8" textLength="24.4" clip-path [...] -</text><text class="breeze-ci-image-build-r5" x="0" y="1801.2" textLength="1464" clip-path="url(#breeze-ci-image-build-line-73)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r2" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-73)"> +</text><text class="breeze-ci-image-build-r4" x="0" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-5)">╭─</text><text class="breeze-ci-image-build-r4" x="24.4" y="142" textLength="158.6" clip-path="url(#breeze-ci-image-build-line-5)"> Basic usage </text><text class="breeze-ci-image-build-r4" x="183" y="142" textLength="1256.6" clip-path="url(#breeze-ci-image-build-line-5)">─────────────────────────────────────────────────────────────────────────────── [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-6)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-6)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="166.4" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-6)">-python</text><text class="breeze-ci-image-build-r6" x="427" y="166.4" textLength="24.4" clip-path="url [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-7)">│</text><text class="breeze-ci-image-build-r7" x="475.8" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-build-line-7)">(>3.8< | 3.9 | 3.10 | 3.11)                             [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-8)">│</text><text class="breeze-ci-image-build-r4" x="475.8" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-build-line-8)">[default: 3.8]                                     [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-9)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-9)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="239.6" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-9)">-upgrade</text><text class="breeze-ci-image-build-r5" x="134.2" y="239.6" textLength="268.4" clip-path= [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-10)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-10)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="264" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-10)">-upgrade</text><text class="breeze-ci-image-build-r5" x="134.2" y="264" textLength="134.2" clip-path="url( [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-11)">│</text><text class="breeze-ci-image-build-r2" x="475.8" y="288.4" textLength="963.8" clip-path="url(#breeze-ci-image-build-line-11)">fails.                                     &# [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-12)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="312.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-12)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="312.8" textLength="73.2" clip-path="url(#breeze-ci-image-build-line-12)">-image</text><text class="breeze-ci-image-build-r5" x="109.8" y="312.8" textLength="48.8" clip-path= [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-13)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="337.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-13)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="337.2" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-13)">-tag</text><text class="breeze-ci-image-build-r5" x="85.4" y="337.2" textLength="122" clip-path="url [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-14)">│</text><text class="breeze-ci-image-build-r2" x="475.8" y="361.6" textLength="414.8" clip-path="url(#breeze-ci-image-build-line-14)">when you build or pull image with </text><text class="breeze-ci-image-build-r5" x="890.6" y="361.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-14)">-</text><text class="breeze-c [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="386" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-15)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="386" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-15)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="386" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-15)">-docker</text><text class="breeze-ci-image-build-r5" x="122" y="386" textLength="73.2" clip-path="url(#bre [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-16)">│</text><text class="breeze-ci-image-build-r4" x="475.8" y="410.4" textLength="549" clip-path="url(#breeze-ci-image-build-line-16)">[default: registry]                          </text><text class="breeze-ci-image-build-r4" x="145 [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-17)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-17)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="434.8" textLength="73.2" clip-path="url(#breeze-ci-image-build-line-17)">-force</text><text class="breeze-ci-image-build-r5" x="109.8" y="434.8" textLength="73.2" clip-path= [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-ci-image-build-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r2" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-18)"> +</text><text class="breeze-ci-image-build-r4" x="0" y="483.6" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-19)">╭─</text><text class="breeze-ci-image-build-r4" x="24.4" y="483.6" textLength="353.8" clip-path="url(#breeze-ci-image-build-line-19)"> Building images in parallel </text><text class="breeze-ci-image-build-r4" x="378.2" y="483.6" textLength="1061.4" clip-path="url(#breeze-ci-image-build-line-19)">────────────────────────────────────────── [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="508" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-20)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="508" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-20)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="508" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-20)">-run</text><text class="breeze-ci-image-build-r5" x="85.4" y="508" textLength="146.4" clip-path="url(#bree [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-21)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="532.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-21)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="532.4" textLength="146.4" clip-path="url(#breeze-ci-image-build-line-21)">-parallelism</text><text class="breeze-ci-image-build-r2" x="378.2" y="532.4" textLength="915" clip [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-22)">│</text><text class="breeze-ci-image-build-r7" x="378.2" y="556.8" textLength="915" clip-path="url(#breeze-ci-image-build-line-22)">(INTEGER RANGE)                                   &# [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-23)">│</text><text class="breeze-ci-image-build-r4" x="378.2" y="581.2" textLength="915" clip-path="url(#breeze-ci-image-build-line-23)">[default: 4; 1<=x<=8]                                 [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-24)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="605.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-24)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="605.6" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-24)">-python</text><text class="breeze-ci-image-build-r5" x="122" y="605.6" textLength="109.8" clip-path= [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="630" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-25)">│</text><text class="breeze-ci-image-build-r4" x="378.2" y="630" textLength="951.6" clip-path="url(#breeze-ci-image-build-line-25)">[default: 3.8 3.9 3.10 3.11]                                [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-26)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="654.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-26)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="654.4" textLength="61" clip-path="url(#breeze-ci-image-build-line-26)">-skip</text><text class="breeze-ci-image-build-r5" x="97.6" y="654.4" textLength="97.6" clip-path="url [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-27)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="678.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-27)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="678.8" textLength="73.2" clip-path="url(#breeze-ci-image-build-line-27)">-debug</text><text class="breeze-ci-image-build-r5" x="109.8" y="678.8" textLength="122" clip-path=" [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-28)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="703.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-28)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="703.2" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-28)">-include</text><text class="breeze-ci-image-build-r5" x="134.2" y="703.2" textLength="195.2" clip-pa [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="727.6" textLength="1464" clip-path="url(#breeze-ci-image-build-line-29)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r2" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-29)"> +</text><text class="breeze-ci-image-build-r4" x="0" y="752" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-30)">╭─</text><text class="breeze-ci-image-build-r4" x="24.4" y="752" textLength="439.2" clip-path="url(#breeze-ci-image-build-line-30)"> Advanced options (for power users) </text><text class="breeze-ci-image-build-r4" x="463.6" y="752" textLength="976" clip-path="url(#breeze-ci-image-build-line-30)">─────────────────────────────────────── [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-31)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="776.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-31)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="776.4" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-31)">-builder</text><text class="breeze-ci-image-build-r2" x="463.6" y="776.4" textLength="756.4" clip-pa [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-32)">│</text><text class="breeze-ci-image-build-r4" x="463.6" y="800.8" textLength="756.4" clip-path="url(#breeze-ci-image-build-line-32)">[default: autodetect]                                   [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-33)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-33)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="825.2" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-33)">-install</text><text class="breeze-ci-image-build-r5" x="134.2" y="825.2" textLength="280.6" clip-pa [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-34)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="849.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-34)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="849.6" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-34)">-airflow</text><text class="breeze-ci-image-build-r5" x="134.2" y="849.6" textLength="256.2" clip-pa [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="874" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-35)">│</text><text class="breeze-ci-image-build-r2" x="463.6" y="874" textLength="976" clip-path="url(#breeze-ci-image-build-line-35)">file. It could be full remote URL to the location file, or local file placed in </text><text class="breeze-ci-image-build-r4" x="1451.8" y="874" textLength= [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-36)">│</text><text class="breeze-ci-image-build-r2" x="463.6" y="898.4" textLength="976" clip-path="url(#breeze-ci-image-build-line-36)">`docker-context-files` (in this case it has to start with                       [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-37)">│</text><text class="breeze-ci-image-build-r2" x="463.6" y="922.8" textLength="976" clip-path="url(#breeze-ci-image-build-line-37)">/opt/airflow/docker-context-files).                                  [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-38)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="947.2" textLength="976" clip-path="url(#breeze-ci-image-build-line-38)">(TEXT)                                      [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-39)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="971.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-39)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="971.6" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-39)">-airflow</text><text class="breeze-ci-image-build-r5" x="134.2" y="971.6" textLength="207.4" clip-pa [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="996" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-40)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="996" textLength="866.2" clip-path="url(#breeze-ci-image-build-line-40)">(constraints-source-providers | constraints | constraints-no-providers)</text><text class="breeze-ci-image-build-r4" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-40)">│</text><tex [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-41)">│</text><text class="breeze-ci-image-build-r4" x="463.6" y="1020.4" textLength="866.2" clip-path="url(#breeze-ci-image-build-line-41)">[default: constraints-source-providers]                               [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-42)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1044.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-42)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1044.8" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-42)">-airflow</text><text class="breeze-ci-image-build-r5" x="134.2" y="1044.8" textLength="268.4" cli [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-43)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1069.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-43)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1069.2" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-43)">-python</text><text class="breeze-ci-image-build-r5" x="122" y="1069.2" textLength="73.2" clip-pa [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-44)">│</text><text class="breeze-ci-image-build-r2" x="463.6" y="1093.6" textLength="976" clip-path="url(#breeze-ci-image-build-line-44)">something like: python:VERSION-slim-bullseye.                             & [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-45)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="1118" textLength="976" clip-path="url(#breeze-ci-image-build-line-45)">(TEXT)                                       [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-46)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1142.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-46)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1142.4" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-46)">-additional</text><text class="breeze-ci-image-build-r5" x="170.8" y="1142.4" textLength="146.4" [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-47)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1166.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-47)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1166.8" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-47)">-additional</text><text class="breeze-ci-image-build-r5" x="170.8" y="1166.8" textLength="85.4" [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-48)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1191.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-48)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1191.2" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-48)">-additional</text><text class="breeze-ci-image-build-r5" x="170.8" y="1191.2" textLength="219.6" [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-49)">│</text><text class="breeze-ci-image-build-r2" x="463.6" y="1215.6" textLength="976" clip-path="url(#breeze-ci-image-build-line-49)">itself).                                      [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-50)">│</text><text class="breeze-ci-image-build-r7" x="463.6" y="1240" textLength="976" clip-path="url(#breeze-ci-image-build-line-50)">(TEXT)                                       [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-51)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1264.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-51)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1264.4" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-51)">-additional</text><text class="breeze-ci-image-build-r5" x="170.8" y="1264.4" textLength="158.6" [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-52)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1288.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-52)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1288.8" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-52)">-additional</text><text class="breeze-ci-image-build-r5" x="170.8" y="1288.8" textLength="146.4" [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-53)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1313.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-53)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1313.2" textLength="134.2" clip-path="url(#breeze-ci-image-build-line-53)">-additional</text><text class="breeze-ci-image-build-r5" x="170.8" y="1313.2" textLength="195.2" [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-54)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1337.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-54)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1337.6" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-54)">-dev</text><text class="breeze-ci-image-build-r5" x="85.4" y="1337.6" textLength="109.8" clip-pat [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-55)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1362" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-55)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1362" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-55)">-dev</text><text class="breeze-ci-image-build-r5" x="85.4" y="1362" textLength="146.4" clip-path="url(# [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-56)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1386.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-56)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1386.4" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-56)">-version</text><text class="breeze-ci-image-build-r5" x="134.2" y="1386.4" textLength="195.2" cli [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1410.8" textLength="1464" clip-path="url(#breeze-ci-image-build-line-57)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r2" x="1464" y="1410.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-57)"> +</text><text class="breeze-ci-image-build-r4" x="0" y="1435.2" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-58)">╭─</text><text class="breeze-ci-image-build-r4" x="24.4" y="1435.2" textLength="622.2" clip-path="url(#breeze-ci-image-build-line-58)"> Preparing cache and push (for maintainers and CI) </text><text class="breeze-ci-image-build-r4" x="646.6" y="1435.2" textLength="793" clip-path="url(#breeze-ci-image-build-line-58)"> [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-59)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1459.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-59)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1459.6" textLength="109.8" clip-path="url(#breeze-ci-image-build-line-59)">-platform</text><text class="breeze-ci-image-build-r2" x="341.6" y="1459.6" textLength="329.4" c [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-60)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1484" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-60)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1484" textLength="61" clip-path="url(#breeze-ci-image-build-line-60)">-push</text><text class="breeze-ci-image-build-r2" x="341.6" y="1484" textLength="353.8" clip-path="url(# [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-61)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1508.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-61)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1508.4" textLength="73.2" clip-path="url(#breeze-ci-image-build-line-61)">-empty</text><text class="breeze-ci-image-build-r5" x="109.8" y="1508.4" textLength="73.2" clip-p [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-62)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1532.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-62)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1532.8" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-62)">-prepare</text><text class="breeze-ci-image-build-r5" x="134.2" y="1532.8" textLength="158.6" cli [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-63)">│</text><text class="breeze-ci-image-build-r2" x="341.6" y="1557.2" textLength="1098" clip-path="url(#breeze-ci-image-build-line-63)">image).                                      [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1581.6" textLength="1464" clip-path="url(#breeze-ci-image-build-line-64)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r2" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-64)"> +</text><text class="breeze-ci-image-build-r4" x="0" y="1606" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-65)">╭─</text><text class="breeze-ci-image-build-r4" x="24.4" y="1606" textLength="280.6" clip-path="url(#breeze-ci-image-build-line-65)"> Github authentication </text><text class="breeze-ci-image-build-r4" x="305" y="1606" textLength="1134.6" clip-path="url(#breeze-ci-image-build-line-65)">─────────────────────────────────────────────────────────────── [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-66)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1630.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-66)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1630.4" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-66)">-github</text><text class="breeze-ci-image-build-r5" x="122" y="1630.4" textLength="134.2" clip-p [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-67)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1654.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-67)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1654.8" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-67)">-github</text><text class="breeze-ci-image-build-r5" x="122" y="1654.8" textLength="73.2" clip-pa [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1679.2" textLength="1464" clip-path="url(#breeze-ci-image-build-line-68)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r2" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-68)"> +</text><text class="breeze-ci-image-build-r4" x="0" y="1703.6" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-69)">╭─</text><text class="breeze-ci-image-build-r4" x="24.4" y="1703.6" textLength="195.2" clip-path="url(#breeze-ci-image-build-line-69)"> Common options </text><text class="breeze-ci-image-build-r4" x="219.6" y="1703.6" textLength="1220" clip-path="url(#breeze-ci-image-build-line-69)">──────────────────────────────────────────────────────────────── [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-70)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1728" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-70)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1728" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-70)">-verbose</text><text class="breeze-ci-image-build-r6" x="158.6" y="1728" textLength="24.4" clip-path="u [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-71)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1752.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-71)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1752.4" textLength="48.8" clip-path="url(#breeze-ci-image-build-line-71)">-dry</text><text class="breeze-ci-image-build-r5" x="85.4" y="1752.4" textLength="48.8" clip-path [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-72)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1776.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-72)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1776.8" textLength="85.4" clip-path="url(#breeze-ci-image-build-line-72)">-answer</text><text class="breeze-ci-image-build-r6" x="158.6" y="1776.8" textLength="24.4" clip- [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-73)">│</text><text class="breeze-ci-image-build-r5" x="24.4" y="1801.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-73)">-</text><text class="breeze-ci-image-build-r5" x="36.6" y="1801.2" textLength="61" clip-path="url(#breeze-ci-image-build-line-73)">-help</text><text class="breeze-ci-image-build-r6" x="158.6" y="1801.2" textLength="24.4" clip-path [...] +</text><text class="breeze-ci-image-build-r4" x="0" y="1825.6" textLength="1464" clip-path="url(#breeze-ci-image-build-line-74)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r2" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-74)"> </text> </g> </g> diff --git a/images/breeze/output_prod-image_build.svg b/images/breeze/output_prod-image_build.svg index 882393e5d0..2b4931a8da 100644 --- a/images/breeze/output_prod-image_build.svg +++ b/images/breeze/output_prod-image_build.svg @@ -1,4 +1,4 @@ -<svg class="rich-terminal" viewBox="0 0 1482 2343.6" xmlns="http://www.w3.org/2000/svg"> +<svg class="rich-terminal" viewBox="0 0 1482 2368.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="2292.6" /> + <rect x="0" y="0" width="1463.0" height="2317.0" /> </clipPath> <clipPath id="breeze-prod-image-build-line-0"> <rect x="0" y="1.5" width="1464" height="24.65"/> @@ -324,9 +324,12 @@ <clipPath id="breeze-prod-image-build-line-92"> <rect x="0" y="2246.3" width="1464" height="24.65"/> </clipPath> +<clipPath id="breeze-prod-image-build-line-93"> + <rect x="0" y="2270.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="2341.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="2366" 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"/> @@ -401,35 +404,36 @@ </text><text class="breeze-prod-image-build-r4" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-62)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1532.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-62)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1532.8" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-62)">-runtime</text><text class="breeze-prod-image-build-r5" x="134.2" y="1532.8" textLeng [...] </text><text class="breeze-prod-image-build-r4" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-63)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1557.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-63)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1557.2" textLength="48.8" clip-path="url(#breeze-prod-image-build-line-63)">-dev</text><text class="breeze-prod-image-build-r5" x="85.4" y="1557.2" textLength="1 [...] </text><text class="breeze-prod-image-build-r4" 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="24.4" y="1581.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-64)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1581.6" textLength="48.8" clip-path="url(#breeze-prod-image-build-line-64)">-dev</text><text class="breeze-prod-image-build-r5" x="85.4" y="1581.6" textLength="1 [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="1606" textLength="1464" clip-path="url(#breeze-prod-image-build-line-65)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r2" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-65)"> -</text><text class="breeze-prod-image-build-r4" x="0" y="1630.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-66)">╭─</text><text class="breeze-prod-image-build-r4" x="24.4" y="1630.4" textLength="707.6" clip-path="url(#breeze-prod-image-build-line-66)"> Customization options (for specific customization needs) </text><text class="breeze-prod-image-build-r4" x="732" y="1630.4" textLength="707.6" clip-path="url(#breeze-prod-image-build-l [...] -</text><text class="breeze-prod-image-build-r4" 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="24.4" y="1654.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-67)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1654.8" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-67)">-install</text><text class="breeze-prod-image-build-r5" x="134.2" y="1654.8" textLeng [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-68)">│</text><text class="breeze-prod-image-build-r2" x="536.8" y="1679.2" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-68)">Implies </text><text class="breeze-prod-image-build-r5" x="634.4" y="1679.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-68)">-</text><text class="breeze-prod-image-build-r5" x="646.6" y="1679.2" t [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-69)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1703.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-69)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1703.6" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-69)">-cleanup</text><text class="breeze-prod-image-build-r5" x="134.2" y="1703.6" textLeng [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-70)">│</text><text class="breeze-prod-image-build-r2" x="536.8" y="1728" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-70)">together with </text><text class="breeze-prod-image-build-r5" x="707.6" y="1728" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-70)">-</text><text class="breeze-prod-image-build-r5" x="719.8" y="172 [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-71)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1752.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-71)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1752.4" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-71)">-disable</text><text class="breeze-prod-image-build-r5" x="134.2" y="1752.4" textLeng [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-72)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1776.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-72)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1776.8" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-72)">-disable</text><text class="breeze-prod-image-build-r5" x="134.2" y="1776.8" textLeng [...] -</text><text class="breeze-prod-image-build-r4" 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="24.4" y="1801.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-73)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1801.2" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-73)">-disable</text><text class="breeze-prod-image-build-r5" x="134.2" y="1801.2" textLeng [...] -</text><text class="breeze-prod-image-build-r4" 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="24.4" y="1825.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-74)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1825.6" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-74)">-disable</text><text class="breeze-prod-image-build-r5" x="134.2" y="1825.6" textLeng [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-75)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1850" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-75)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1850" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-75)">-install</text><text class="breeze-prod-image-build-r5" x="134.2" y="1850" textLength="219. [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-76)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1874.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-76)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1874.4" textLength="158.6" clip-path="url(#breeze-prod-image-build-line-76)">-installation</text><text class="breeze-prod-image-build-r5" x="195.2" y="1874.4" te [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="1898.8" textLength="1464" clip-path="url(#breeze-prod-image-build-line-77)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r2" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-77)"> -</text><text class="breeze-prod-image-build-r4" x="0" y="1923.2" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-78)">╭─</text><text class="breeze-prod-image-build-r4" x="24.4" y="1923.2" textLength="622.2" clip-path="url(#breeze-prod-image-build-line-78)"> Preparing cache and push (for maintainers and CI) </text><text class="breeze-prod-image-build-r4" x="646.6" y="1923.2" textLength="793" clip-path="url(#breeze-prod-image-buil [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-79)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1947.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-79)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1947.6" textLength="109.8" clip-path="url(#breeze-prod-image-build-line-79)">-platform</text><text class="breeze-prod-image-build-r2" x="341.6" y="1947.6" textLe [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-80)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1972" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-80)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1972" textLength="61" clip-path="url(#breeze-prod-image-build-line-80)">-push</text><text class="breeze-prod-image-build-r2" x="341.6" y="1972" textLength="353.8" cl [...] -</text><text class="breeze-prod-image-build-r4" 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="24.4" y="1996.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-81)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1996.4" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-81)">-empty</text><text class="breeze-prod-image-build-r5" x="109.8" y="1996.4" textLength [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-82)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="2020.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-82)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="2020.8" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-82)">-prepare</text><text class="breeze-prod-image-build-r5" x="134.2" y="2020.8" textLeng [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-83)">│</text><text class="breeze-prod-image-build-r2" x="341.6" y="2045.2" textLength="1098" clip-path="url(#breeze-prod-image-build-line-83)">image).                                    [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="2069.6" textLength="1464" clip-path="url(#breeze-prod-image-build-line-84)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r2" x="1464" y="2069.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-84)"> -</text><text class="breeze-prod-image-build-r4" x="0" y="2094" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-85)">╭─</text><text class="breeze-prod-image-build-r4" x="24.4" y="2094" textLength="280.6" clip-path="url(#breeze-prod-image-build-line-85)"> Github authentication </text><text class="breeze-prod-image-build-r4" x="305" y="2094" textLength="1134.6" clip-path="url(#breeze-prod-image-build-line-85)">─────────────────────────────────────────────────── [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-86)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="2118.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-86)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="2118.4" textLength="85.4" clip-path="url(#breeze-prod-image-build-line-86)">-github</text><text class="breeze-prod-image-build-r5" x="122" y="2118.4" textLength= [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-87)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="2142.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-87)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="2142.8" textLength="85.4" clip-path="url(#breeze-prod-image-build-line-87)">-github</text><text class="breeze-prod-image-build-r5" x="122" y="2142.8" textLength= [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="2167.2" textLength="1464" clip-path="url(#breeze-prod-image-build-line-88)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r2" x="1464" y="2167.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-88)"> -</text><text class="breeze-prod-image-build-r4" x="0" y="2191.6" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-89)">╭─</text><text class="breeze-prod-image-build-r4" x="24.4" y="2191.6" textLength="195.2" clip-path="url(#breeze-prod-image-build-line-89)"> Common options </text><text class="breeze-prod-image-build-r4" x="219.6" y="2191.6" textLength="1220" clip-path="url(#breeze-prod-image-build-line-89)">──────────────────────────────────────────────────── [...] -</text><text class="breeze-prod-image-build-r4" 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="24.4" y="2216" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-90)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="2216" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-90)">-verbose</text><text class="breeze-prod-image-build-r6" x="158.6" y="2216" textLength="24.4 [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-91)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="2240.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-91)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="2240.4" textLength="48.8" clip-path="url(#breeze-prod-image-build-line-91)">-dry</text><text class="breeze-prod-image-build-r5" x="85.4" y="2240.4" textLength="4 [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-92)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="2264.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-92)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="2264.8" textLength="61" clip-path="url(#breeze-prod-image-build-line-92)">-help</text><text class="breeze-prod-image-build-r6" x="158.6" y="2264.8" textLength="2 [...] -</text><text class="breeze-prod-image-build-r4" x="0" y="2289.2" textLength="1464" clip-path="url(#breeze-prod-image-build-line-93)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r2" x="1464" y="2289.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-93)"> +</text><text class="breeze-prod-image-build-r4" 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="24.4" y="1606" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-65)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1606" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-65)">-version</text><text class="breeze-prod-image-build-r5" x="134.2" y="1606" textLength="195. [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="1630.4" textLength="1464" clip-path="url(#breeze-prod-image-build-line-66)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r2" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-66)"> +</text><text class="breeze-prod-image-build-r4" x="0" y="1654.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-67)">╭─</text><text class="breeze-prod-image-build-r4" x="24.4" y="1654.8" textLength="707.6" clip-path="url(#breeze-prod-image-build-line-67)"> Customization options (for specific customization needs) </text><text class="breeze-prod-image-build-r4" x="732" y="1654.8" textLength="707.6" clip-path="url(#breeze-prod-image-build-l [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-68)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1679.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-68)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1679.2" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-68)">-install</text><text class="breeze-prod-image-build-r5" x="134.2" y="1679.2" textLeng [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-69)">│</text><text class="breeze-prod-image-build-r2" x="536.8" y="1703.6" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-69)">Implies </text><text class="breeze-prod-image-build-r5" x="634.4" y="1703.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-69)">-</text><text class="breeze-prod-image-build-r5" x="646.6" y="1703.6" t [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-70)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1728" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-70)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1728" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-70)">-cleanup</text><text class="breeze-prod-image-build-r5" x="134.2" y="1728" textLength="97.6 [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-71)">│</text><text class="breeze-prod-image-build-r2" x="536.8" y="1752.4" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-71)">together with </text><text class="breeze-prod-image-build-r5" x="707.6" y="1752.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-71)">-</text><text class="breeze-prod-image-build-r5" x="719.8" [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-72)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1776.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-72)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1776.8" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-72)">-disable</text><text class="breeze-prod-image-build-r5" x="134.2" y="1776.8" textLeng [...] +</text><text class="breeze-prod-image-build-r4" 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="24.4" y="1801.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-73)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1801.2" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-73)">-disable</text><text class="breeze-prod-image-build-r5" x="134.2" y="1801.2" textLeng [...] +</text><text class="breeze-prod-image-build-r4" 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="24.4" y="1825.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-74)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1825.6" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-74)">-disable</text><text class="breeze-prod-image-build-r5" x="134.2" y="1825.6" textLeng [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-75)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1850" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-75)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1850" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-75)">-disable</text><text class="breeze-prod-image-build-r5" x="134.2" y="1850" textLength="231. [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-76)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1874.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-76)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1874.4" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-76)">-install</text><text class="breeze-prod-image-build-r5" x="134.2" y="1874.4" textLeng [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-77)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1898.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-77)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1898.8" textLength="158.6" clip-path="url(#breeze-prod-image-build-line-77)">-installation</text><text class="breeze-prod-image-build-r5" x="195.2" y="1898.8" te [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="1923.2" textLength="1464" clip-path="url(#breeze-prod-image-build-line-78)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r2" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-78)"> +</text><text class="breeze-prod-image-build-r4" x="0" y="1947.6" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-79)">╭─</text><text class="breeze-prod-image-build-r4" x="24.4" y="1947.6" textLength="622.2" clip-path="url(#breeze-prod-image-build-line-79)"> Preparing cache and push (for maintainers and CI) </text><text class="breeze-prod-image-build-r4" x="646.6" y="1947.6" textLength="793" clip-path="url(#breeze-prod-image-buil [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-80)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="1972" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-80)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1972" textLength="109.8" clip-path="url(#breeze-prod-image-build-line-80)">-platform</text><text class="breeze-prod-image-build-r2" x="341.6" y="1972" textLength="32 [...] +</text><text class="breeze-prod-image-build-r4" 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="24.4" y="1996.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-81)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="1996.4" textLength="61" clip-path="url(#breeze-prod-image-build-line-81)">-push</text><text class="breeze-prod-image-build-r2" x="341.6" y="1996.4" textLength="3 [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-82)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="2020.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-82)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="2020.8" textLength="73.2" clip-path="url(#breeze-prod-image-build-line-82)">-empty</text><text class="breeze-prod-image-build-r5" x="109.8" y="2020.8" textLength [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-83)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="2045.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-83)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="2045.2" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-83)">-prepare</text><text class="breeze-prod-image-build-r5" x="134.2" y="2045.2" textLeng [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-84)">│</text><text class="breeze-prod-image-build-r2" x="341.6" y="2069.6" textLength="1098" clip-path="url(#breeze-prod-image-build-line-84)">image).                                    [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="2094" textLength="1464" clip-path="url(#breeze-prod-image-build-line-85)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r2" x="1464" y="2094" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-85)"> +</text><text class="breeze-prod-image-build-r4" x="0" y="2118.4" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-86)">╭─</text><text class="breeze-prod-image-build-r4" x="24.4" y="2118.4" textLength="280.6" clip-path="url(#breeze-prod-image-build-line-86)"> Github authentication </text><text class="breeze-prod-image-build-r4" x="305" y="2118.4" textLength="1134.6" clip-path="url(#breeze-prod-image-build-line-86)">───────────────────────────────────────────── [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-87)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="2142.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-87)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="2142.8" textLength="85.4" clip-path="url(#breeze-prod-image-build-line-87)">-github</text><text class="breeze-prod-image-build-r5" x="122" y="2142.8" textLength= [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-88)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="2167.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-88)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="2167.2" textLength="85.4" clip-path="url(#breeze-prod-image-build-line-88)">-github</text><text class="breeze-prod-image-build-r5" x="122" y="2167.2" textLength= [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="2191.6" textLength="1464" clip-path="url(#breeze-prod-image-build-line-89)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r2" x="1464" y="2191.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-89)"> +</text><text class="breeze-prod-image-build-r4" x="0" y="2216" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-90)">╭─</text><text class="breeze-prod-image-build-r4" x="24.4" y="2216" textLength="195.2" clip-path="url(#breeze-prod-image-build-line-90)"> Common options </text><text class="breeze-prod-image-build-r4" x="219.6" y="2216" textLength="1220" clip-path="url(#breeze-prod-image-build-line-90)">────────────────────────────────────────────────────────── [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-91)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="2240.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-91)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="2240.4" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-91)">-verbose</text><text class="breeze-prod-image-build-r6" x="158.6" y="2240.4" textLeng [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-92)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="2264.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-92)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="2264.8" textLength="48.8" clip-path="url(#breeze-prod-image-build-line-92)">-dry</text><text class="breeze-prod-image-build-r5" x="85.4" y="2264.8" textLength="4 [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-93)">│</text><text class="breeze-prod-image-build-r5" x="24.4" y="2289.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-93)">-</text><text class="breeze-prod-image-build-r5" x="36.6" y="2289.2" textLength="61" clip-path="url(#breeze-prod-image-build-line-93)">-help</text><text class="breeze-prod-image-build-r6" x="158.6" y="2289.2" textLength="2 [...] +</text><text class="breeze-prod-image-build-r4" x="0" y="2313.6" textLength="1464" clip-path="url(#breeze-prod-image-build-line-94)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r2" x="1464" y="2313.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-94)"> </text> </g> </g> diff --git a/setup.py b/setup.py index e6ef7ab871..6f29dc1f47 100644 --- a/setup.py +++ b/setup.py @@ -61,7 +61,35 @@ DEPS = "deps" CURRENT_PYTHON_VERSION = f"{sys.version_info.major}.{sys.version_info.minor}" -# +def apply_pypi_suffix_to_airflow_packages(dependencies: list[str]) -> None: + """ + Looks through the list of dependencies, finds which one are airflow or airflow providers packages + and applies the version suffix to those of them that do not have the suffix applied yet. + + :param dependencies: list of dependencies to add suffix to + """ + for i in range(len(dependencies)): + dependency = dependencies[i] + if dependency.startswith("apache-airflow"): + # in case we want to depend on other airflow package, the chance is the package + # has not yet been released to PyPI and we only see it as a local package that is + # being installed with .dev0 suffix in CI. Unfortunately, there is no way in standard + # PEP-440 compliant way to specify version that would be both - releasable, and + # testable to install on CI with .dev0 or .rc suffixes. We could add `--pre` flag to + # enable it, but `--pre` flag is not selective and will work for all packages so + # we would automatically install all "pre-release" packages for all packages that + # we install from PyPI - and this is definitely not what we want. So in order to + # install only airflow packages that are available in sources in .dev0 or .rc version + # we need to dynamically modify the dependencies here. + if ">=" in dependency: + package, version = dependency.split(">=") + version_spec = f">={version}" + version_suffix = os.environ.get("VERSION_SUFFIX_FOR_PYPI") + if version_suffix and version_suffix not in version_spec: + version_spec += version_suffix + dependencies[i] = f"{package}{version_spec}" + + # NOTE! IN Airflow 2.4.+ dependencies for providers are maintained in `provider.yaml` files for each # provider separately. They are loaded here and if you want to modify them, you need to modify # corresponding provider.yaml file. @@ -74,11 +102,13 @@ def fill_provider_dependencies() -> dict[str, dict[str, list[str]]]: try: with AIRFLOW_SOURCES_ROOT.joinpath("generated", "provider_dependencies.json").open() as f: dependencies = json.load(f) - return { - key: value - for key, value in dependencies.items() - if CURRENT_PYTHON_VERSION not in value["excluded-python-versions"] or skip_python_version_check - } + provider_dict = {} + for key, value in dependencies.items(): + if value.get(DEPS): + apply_pypi_suffix_to_airflow_packages(value[DEPS]) + if CURRENT_PYTHON_VERSION not in value["excluded-python-versions"] or skip_python_version_check: + provider_dict[key] = value + return provider_dict except Exception as e: print(f"Exception while loading provider dependencies {e}") # we can ignore loading dependencies when they are missing - they are only used to generate
