This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch v2-10-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/v2-10-test by this push:
new c3d246b96ef Allow to switch breeze to use uv internally to create
virtualenvs (#43587) (#43624)
c3d246b96ef is described below
commit c3d246b96ef615bd13c257b8565d6e064da9c82d
Author: Jarek Potiuk <[email protected]>
AuthorDate: Mon Nov 4 09:59:29 2024 +0100
Allow to switch breeze to use uv internally to create virtualenvs (#43587)
(#43624)
Breeze sometimes creates "internal" virtualenvs in local ".build"
directory when it needs - for example in order to run k8s tests
or for release management commands.
This PR adds capability to switch breeze to use `uv` instead of
`pip` to install depdendencies in those envs.
You can now switch breeze to use uv by `breeze setup config --use-uv`
and switch back to pip by `breeze setup config --no-use-uv`.
(cherry picked from commit a2a0ef09357f278bde031092e395f13286fd3076)
---
.github/workflows/ci.yml | 1 +
.github/workflows/k8s-tests.yml | 7 ++++
Dockerfile | 4 +--
Dockerfile.ci | 8 ++---
dev/breeze/doc/ci/02_images.md | 4 +--
dev/breeze/doc/images/output-commands.svg | 42 +++++++++++-----------
dev/breeze/doc/images/output_setup_config.svg | 32 +++++++++--------
dev/breeze/doc/images/output_setup_config.txt | 2 +-
.../commands/release_management_commands.py | 10 ++++--
.../src/airflow_breeze/commands/setup_commands.py | 31 ++++++++++++----
.../commands/setup_commands_config.py | 1 +
dev/breeze/src/airflow_breeze/global_constants.py | 3 +-
.../src/airflow_breeze/utils/kubernetes_utils.py | 27 +++++++++++---
dev/breeze/src/airflow_breeze/utils/run_tests.py | 6 ++--
.../src/airflow_breeze/utils/virtualenv_utils.py | 30 ++++++++++++++--
scripts/ci/install_breeze.sh | 2 +-
scripts/ci/pre_commit/update_installers.py | 6 +++-
17 files changed, 150 insertions(+), 66 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 866f8f253d4..c94518489d2 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -622,6 +622,7 @@ jobs:
kubernetes-versions-list-as-string: ${{
needs.build-info.outputs.kubernetes-versions-list-as-string }}
kubernetes-combos-list-as-string: ${{
needs.build-info.outputs.kubernetes-combos-list-as-string }}
include-success-outputs: ${{
needs.build-info.outputs.include-success-outputs }}
+ use-uv: ${{ needs.build-info.outputs.force-pip && 'false' || 'true' }}
debug-resources: ${{ needs.build-info.outputs.debug-resources }}
if: >
( needs.build-info.outputs.run-kubernetes-tests == 'true' ||
diff --git a/.github/workflows/k8s-tests.yml b/.github/workflows/k8s-tests.yml
index c4b72a9afc9..9a764e88c4e 100644
--- a/.github/workflows/k8s-tests.yml
+++ b/.github/workflows/k8s-tests.yml
@@ -44,6 +44,10 @@ on: # yamllint disable-line rule:truthy
description: "Whether to include success outputs"
required: true
type: string
+ use-uv:
+ description: "Whether to use uv"
+ required: true
+ type: string
debug-resources:
description: "Whether to debug resources"
required: true
@@ -96,6 +100,9 @@ jobs:
key: "\
k8s-env-${{ steps.breeze.outputs.host-python-version }}-\
${{
hashFiles('scripts/ci/kubernetes/k8s_requirements.txt','hatch_build.py') }}"
+ - name: "Switch breeze to use uv"
+ run: breeze setup-config --use-uv
+ if: inputs.use-uv == 'true'
- name: Run complete K8S tests ${{
inputs.kubernetes-combos-list-as-string }}
run: breeze k8s run-complete-tests --run-in-parallel --upgrade
--no-copy-local-sources
env:
diff --git a/Dockerfile b/Dockerfile
index cf5226c0008..4cdf1a8bb34 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -49,8 +49,8 @@ ARG AIRFLOW_VERSION="2.9.3"
ARG PYTHON_BASE_IMAGE="python:3.8-slim-bookworm"
-ARG AIRFLOW_PIP_VERSION=24.2
-ARG AIRFLOW_UV_VERSION=0.4.1
+ARG AIRFLOW_PIP_VERSION=24.3.1
+ARG AIRFLOW_UV_VERSION=0.4.29
ARG AIRFLOW_USE_UV="false"
ARG UV_HTTP_TIMEOUT="300"
ARG AIRFLOW_IMAGE_REPOSITORY="https://github.com/apache/airflow"
diff --git a/Dockerfile.ci b/Dockerfile.ci
index d23e810fa36..e188a7ec391 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -1297,8 +1297,8 @@ ARG DEFAULT_CONSTRAINTS_BRANCH="constraints-main"
# It can also be overwritten manually by setting the AIRFLOW_CI_BUILD_EPOCH
environment variable.
ARG AIRFLOW_CI_BUILD_EPOCH="10"
ARG AIRFLOW_PRE_CACHED_PIP_PACKAGES="true"
-ARG AIRFLOW_PIP_VERSION=24.2
-ARG AIRFLOW_UV_VERSION=0.4.1
+ARG AIRFLOW_PIP_VERSION=24.3.1
+ARG AIRFLOW_UV_VERSION=0.4.29
ARG AIRFLOW_USE_UV="true"
# Setup PIP
# By default PIP install run without cache to make image smaller
@@ -1321,8 +1321,8 @@ ARG AIRFLOW_VERSION=""
# Additional PIP flags passed to all pip install commands except reinstalling
pip itself
ARG ADDITIONAL_PIP_INSTALL_FLAGS=""
-ARG AIRFLOW_PIP_VERSION=24.2
-ARG AIRFLOW_UV_VERSION=0.4.1
+ARG AIRFLOW_PIP_VERSION=24.3.1
+ARG AIRFLOW_UV_VERSION=0.4.29
ARG AIRFLOW_USE_UV="true"
ENV AIRFLOW_REPO=${AIRFLOW_REPO}\
diff --git a/dev/breeze/doc/ci/02_images.md b/dev/breeze/doc/ci/02_images.md
index f9ea4faaee7..1db263f8b3a 100644
--- a/dev/breeze/doc/ci/02_images.md
+++ b/dev/breeze/doc/ci/02_images.md
@@ -447,8 +447,8 @@ can be used for CI images:
| `DEV_APT_DEPS` | | Dev APT
dependencies installed in the first part of the image
|
| `ADDITIONAL_DEV_APT_DEPS` | | Additional
apt dev dependencies installed in the first part of the image
|
| `ADDITIONAL_DEV_APT_ENV` | | Additional
env variables defined when installing dev deps
|
-| `AIRFLOW_PIP_VERSION` | `24.0` | PIP version
used.
|
-| `AIRFLOW_UV_VERSION` | `0.1.10` | UV version
used.
|
+| `AIRFLOW_PIP_VERSION` | `24.3.1` | PIP version
used.
|
+| `AIRFLOW_UV_VERSION` | `0.4.29` | UV version
used.
|
| `AIRFLOW_USE_UV` | `true` | Whether to
use UV for installation.
|
| `PIP_PROGRESS_BAR` | `on` | Progress
bar for PIP installation
|
diff --git a/dev/breeze/doc/images/output-commands.svg
b/dev/breeze/doc/images/output-commands.svg
index 08d3dc2a13e..5888d1fc862 100644
--- a/dev/breeze/doc/images/output-commands.svg
+++ b/dev/breeze/doc/images/output-commands.svg
@@ -298,53 +298,53 @@
</text><text class="breeze-help-r2" x="12.2" y="44.4" textLength="73.2"
clip-path="url(#breeze-help-line-1)">Usage:</text><text class="breeze-help-r3"
x="97.6" y="44.4" textLength="73.2"
clip-path="url(#breeze-help-line-1)">breeze</text><text class="breeze-help-r1"
x="183" y="44.4" textLength="12.2"
clip-path="url(#breeze-help-line-1)">[</text><text class="breeze-help-r4"
x="195.2" y="44.4" textLength="85.4"
clip-path="url(#breeze-help-line-1)">OPTIONS</text><text class="breeze-help-r1"
[...]
</text><text class="breeze-help-r1" x="1464" y="68.8" textLength="12.2"
clip-path="url(#breeze-help-line-2)">
</text><text class="breeze-help-r5" x="0" y="93.2" textLength="24.4"
clip-path="url(#breeze-help-line-3)">╭─</text><text class="breeze-help-r5"
x="24.4" y="93.2" textLength="195.2"
clip-path="url(#breeze-help-line-3)"> Execution mode </text><text
class="breeze-help-r5" x="219.6" y="93.2" textLength="1220"
clip-path="url(#breeze-help-line-3)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
class="breeze-help-r [...]
-</text><text class="breeze-help-r5" x="0" y="117.6" textLength="12.2"
clip-path="url(#breeze-help-line-4)">│</text><text class="breeze-help-r4"
x="24.4" y="117.6" textLength="12.2"
clip-path="url(#breeze-help-line-4)">-</text><text class="breeze-help-r4"
x="36.6" y="117.6" textLength="85.4"
clip-path="url(#breeze-help-line-4)">-python</text><text class="breeze-help-r6"
x="366" y="117.6" textLength="24.4"
clip-path="url(#breeze-help-line-4)">-p</text><text class="breeze-help-r1"
x="414.8" [...]
+</text><text class="breeze-help-r5" x="0" y="117.6" textLength="12.2"
clip-path="url(#breeze-help-line-4)">│</text><text class="breeze-help-r4"
x="24.4" y="117.6" textLength="97.6"
clip-path="url(#breeze-help-line-4)">--python</text><text
class="breeze-help-r6" x="366" y="117.6" textLength="24.4"
clip-path="url(#breeze-help-line-4)">-p</text><text class="breeze-help-r1"
x="414.8" y="117.6" textLength="732"
clip-path="url(#breeze-help-line-4)">Python major/minor version use
[...]
</text><text class="breeze-help-r5" x="0" y="142" textLength="12.2"
clip-path="url(#breeze-help-line-5)">│</text><text class="breeze-help-r7"
x="414.8" y="142" textLength="732"
clip-path="url(#breeze-help-line-5)">(>3.8< | 3.9 | 3.10 | 3.11 | 3.12)                          </text><text
class="breeze-help-r5" x="145 [...]
</text><text class="breeze-help-r5" x="0" y="166.4" textLength="12.2"
clip-path="url(#breeze-help-line-6)">│</text><text class="breeze-help-r5"
x="414.8" y="166.4" textLength="732"
clip-path="url(#breeze-help-line-6)">[default: 3.8]                                          
[...]
-</text><text class="breeze-help-r5" x="0" y="190.8" textLength="12.2"
clip-path="url(#breeze-help-line-7)">│</text><text class="breeze-help-r4"
x="24.4" y="190.8" textLength="12.2"
clip-path="url(#breeze-help-line-7)">-</text><text class="breeze-help-r4"
x="36.6" y="190.8" textLength="146.4"
clip-path="url(#breeze-help-line-7)">-integration</text><text
class="breeze-help-r1" x="414.8" y="190.8" textLength="1024.8"
clip-path="url(#breeze-help-line-7)">Integration(s) to enable [...]
+</text><text class="breeze-help-r5" x="0" y="190.8" textLength="12.2"
clip-path="url(#breeze-help-line-7)">│</text><text class="breeze-help-r4"
x="24.4" y="190.8" textLength="158.6"
clip-path="url(#breeze-help-line-7)">--integration</text><text
class="breeze-help-r1" x="414.8" y="190.8" textLength="1024.8"
clip-path="url(#breeze-help-line-7)">Integration(s) to enable when running (can be more than one).       
[...]
</text><text class="breeze-help-r5" x="0" y="215.2" textLength="12.2"
clip-path="url(#breeze-help-line-8)">│</text><text class="breeze-help-r7"
x="414.8" y="215.2" textLength="1024.8"
clip-path="url(#breeze-help-line-8)">(all | all-testable | cassandra | celery | drill | kafka | kerberos | mongo | mssql </text><text
class="breeze-help-r5" x="1451.8" y="215.2" textLength="12.2"
clip-path="url(#breeze-help [...]
</text><text class="breeze-help-r5" x="0" y="239.6" textLength="12.2"
clip-path="url(#breeze-help-line-9)">│</text><text class="breeze-help-r7"
x="414.8" y="239.6" textLength="1024.8"
clip-path="url(#breeze-help-line-9)">| openlineage | otel | pinot | qdrant | redis | statsd | trino | ydb)               </text><text
class="breeze-help-r5" x [...]
-</text><text class="breeze-help-r5" x="0" y="264" textLength="12.2"
clip-path="url(#breeze-help-line-10)">│</text><text class="breeze-help-r4"
x="24.4" y="264" textLength="12.2"
clip-path="url(#breeze-help-line-10)">-</text><text class="breeze-help-r4"
x="36.6" y="264" textLength="134.2"
clip-path="url(#breeze-help-line-10)">-standalone</text><text
class="breeze-help-r4" x="170.8" y="264" textLength="170.8"
clip-path="url(#breeze-help-line-10)">-dag-processor</text><text
class="breeze-he [...]
-</text><text class="breeze-help-r5" x="0" y="288.4" textLength="12.2"
clip-path="url(#breeze-help-line-11)">│</text><text class="breeze-help-r4"
x="24.4" y="288.4" textLength="12.2"
clip-path="url(#breeze-help-line-11)">-</text><text class="breeze-help-r4"
x="36.6" y="288.4" textLength="109.8"
clip-path="url(#breeze-help-line-11)">-database</text><text
class="breeze-help-r4" x="146.4" y="288.4" textLength="122"
clip-path="url(#breeze-help-line-11)">-isolation</text><text class="breeze-he
[...]
+</text><text class="breeze-help-r5" x="0" y="264" textLength="12.2"
clip-path="url(#breeze-help-line-10)">│</text><text class="breeze-help-r4"
x="24.4" y="264" textLength="317.2"
clip-path="url(#breeze-help-line-10)">--standalone-dag-processor</text><text
class="breeze-help-r1" x="414.8" y="264" textLength="573.4"
clip-path="url(#breeze-help-line-10)">Run standalone dag processor for start-airflow.</text><text
class="breeze-help-r5" x="1451.8" y="264" textLength= [...]
+</text><text class="breeze-help-r5" x="0" y="288.4" textLength="12.2"
clip-path="url(#breeze-help-line-11)">│</text><text class="breeze-help-r4"
x="24.4" y="288.4" textLength="244"
clip-path="url(#breeze-help-line-11)">--database-isolation</text><text
class="breeze-help-r1" x="414.8" y="288.4" textLength="475.8"
clip-path="url(#breeze-help-line-11)">Run airflow in database isolation mode.</text><text
class="breeze-help-r5" x="1451.8" y="288.4" textLength="12.2" c [...]
</text><text class="breeze-help-r5" x="0" y="312.8" textLength="1464"
clip-path="url(#breeze-help-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="312.8" textLength="12.2"
clip-path="url(#breeze-help-line-12)">
</text><text class="breeze-help-r5" x="0" y="337.2" textLength="24.4"
clip-path="url(#breeze-help-line-13)">╭─</text><text class="breeze-help-r5"
x="24.4" y="337.2" textLength="463.6"
clip-path="url(#breeze-help-line-13)"> Docker Compose selection and cleanup </text><text
class="breeze-help-r5" x="488" y="337.2" textLength="951.6"
clip-path="url(#breeze-help-line-13)">──────────────────────────────────────────────────────────────────────────────</text><text
[...]
-</text><text class="breeze-help-r5" x="0" y="361.6" textLength="12.2"
clip-path="url(#breeze-help-line-14)">│</text><text class="breeze-help-r4"
x="24.4" y="361.6" textLength="12.2"
clip-path="url(#breeze-help-line-14)">-</text><text class="breeze-help-r4"
x="36.6" y="361.6" textLength="97.6"
clip-path="url(#breeze-help-line-14)">-project</text><text
class="breeze-help-r4" x="134.2" y="361.6" textLength="61"
clip-path="url(#breeze-help-line-14)">-name</text><text class="breeze-help-r1"
x [...]
-</text><text class="breeze-help-r5" x="0" y="386" textLength="12.2"
clip-path="url(#breeze-help-line-15)">│</text><text class="breeze-help-r1"
x="244" y="386" textLength="512.4"
clip-path="url(#breeze-help-line-15)">project name and you can use `breeze down </text><text
class="breeze-help-r4" x="756.4" y="386" textLength="12.2"
clip-path="url(#breeze-help-line-15)">-</text><text class="breeze-help-r4"
x="768.6" y="386" textLength="97.6" clip-path=" [...]
+</text><text class="breeze-help-r5" x="0" y="361.6" textLength="12.2"
clip-path="url(#breeze-help-line-14)">│</text><text class="breeze-help-r4"
x="24.4" y="361.6" textLength="170.8"
clip-path="url(#breeze-help-line-14)">--project-name</text><text
class="breeze-help-r1" x="244" y="361.6" textLength="1195.6"
clip-path="url(#breeze-help-line-14)">Name of the docker-compose project to bring down. The `docker-compose` is for legacy&
[...]
+</text><text class="breeze-help-r5" x="0" y="386" textLength="12.2"
clip-path="url(#breeze-help-line-15)">│</text><text class="breeze-help-r1"
x="244" y="386" textLength="512.4"
clip-path="url(#breeze-help-line-15)">project name and you can use `breeze down </text><text
class="breeze-help-r4" x="756.4" y="386" textLength="170.8"
clip-path="url(#breeze-help-line-15)">--project-name</text><text
class="breeze-help-r1" x="927.2" y="386" textLength="512 [...]
</text><text class="breeze-help-r5" x="0" y="410.4" textLength="12.2"
clip-path="url(#breeze-help-line-16)">│</text><text class="breeze-help-r1"
x="244" y="410.4" textLength="1195.6"
clip-path="url(#breeze-help-line-16)">belonging to it.                                         
[...]
</text><text class="breeze-help-r5" x="0" y="434.8" textLength="12.2"
clip-path="url(#breeze-help-line-17)">│</text><text class="breeze-help-r7"
x="244" y="434.8" textLength="1195.6"
clip-path="url(#breeze-help-line-17)">(breeze | pre-commit | docker-compose)                                   
[...]
</text><text class="breeze-help-r5" x="0" y="459.2" textLength="12.2"
clip-path="url(#breeze-help-line-18)">│</text><text class="breeze-help-r5"
x="244" y="459.2" textLength="1195.6"
clip-path="url(#breeze-help-line-18)">[default: breeze]                                         
[...]
-</text><text class="breeze-help-r5" x="0" y="483.6" textLength="12.2"
clip-path="url(#breeze-help-line-19)">│</text><text class="breeze-help-r4"
x="24.4" y="483.6" textLength="12.2"
clip-path="url(#breeze-help-line-19)">-</text><text class="breeze-help-r4"
x="36.6" y="483.6" textLength="85.4"
clip-path="url(#breeze-help-line-19)">-docker</text><text
class="breeze-help-r4" x="122" y="483.6" textLength="61"
clip-path="url(#breeze-help-line-19)">-host</text><text class="breeze-help-r1"
x="2 [...]
+</text><text class="breeze-help-r5" x="0" y="483.6" textLength="12.2"
clip-path="url(#breeze-help-line-19)">│</text><text class="breeze-help-r4"
x="24.4" y="483.6" textLength="158.6"
clip-path="url(#breeze-help-line-19)">--docker-host</text><text
class="breeze-help-r1" x="244" y="483.6" textLength="915"
clip-path="url(#breeze-help-line-19)">Optional - docker host to use when running docker commands. When set, the `</text><t
[...]
</text><text class="breeze-help-r5" x="0" y="508" textLength="12.2"
clip-path="url(#breeze-help-line-20)">│</text><text class="breeze-help-r1"
x="244" y="508" textLength="1195.6"
clip-path="url(#breeze-help-line-20)">ignored when building images.                                      
[...]
</text><text class="breeze-help-r5" x="0" y="532.4" textLength="12.2"
clip-path="url(#breeze-help-line-21)">│</text><text class="breeze-help-r7"
x="244" y="532.4" textLength="1195.6"
clip-path="url(#breeze-help-line-21)">(TEXT)                                            &
[...]
</text><text class="breeze-help-r5" x="0" y="556.8" textLength="1464"
clip-path="url(#breeze-help-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="556.8" textLength="12.2"
clip-path="url(#breeze-help-line-22)">
</text><text class="breeze-help-r5" x="0" y="581.2" textLength="24.4"
clip-path="url(#breeze-help-line-23)">╭─</text><text class="breeze-help-r5"
x="24.4" y="581.2" textLength="122"
clip-path="url(#breeze-help-line-23)"> Database </text><text
class="breeze-help-r5" x="146.4" y="581.2" textLength="1293.2"
clip-path="url(#breeze-help-line-23)">──────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
class="breeze-help- [...]
-</text><text class="breeze-help-r5" x="0" y="605.6" textLength="12.2"
clip-path="url(#breeze-help-line-24)">│</text><text class="breeze-help-r4"
x="24.4" y="605.6" textLength="12.2"
clip-path="url(#breeze-help-line-24)">-</text><text class="breeze-help-r4"
x="36.6" y="605.6" textLength="97.6"
clip-path="url(#breeze-help-line-24)">-backend</text><text
class="breeze-help-r6" x="268.4" y="605.6" textLength="24.4"
clip-path="url(#breeze-help-line-24)">-b</text><text class="breeze-help-r1" x=
[...]
+</text><text class="breeze-help-r5" x="0" y="605.6" textLength="12.2"
clip-path="url(#breeze-help-line-24)">│</text><text class="breeze-help-r4"
x="24.4" y="605.6" textLength="109.8"
clip-path="url(#breeze-help-line-24)">--backend</text><text
class="breeze-help-r6" x="268.4" y="605.6" textLength="24.4"
clip-path="url(#breeze-help-line-24)">-b</text><text class="breeze-help-r1"
x="317.2" y="605.6" textLength="1122.4"
clip-path="url(#breeze-help-line-24)">Database backend to  [...]
</text><text class="breeze-help-r5" x="0" y="630" textLength="12.2"
clip-path="url(#breeze-help-line-25)">│</text><text class="breeze-help-r1"
x="317.2" y="630" textLength="1122.4"
clip-path="url(#breeze-help-line-25)">configuration, meaning there will be no database available, and any attempts to connect to  </text><text
class="breeze-help-r5" x="1451.8" y="630" textLength="12.2"
clip-path="url(#breeze-help-line- [...]
</text><text class="breeze-help-r5" x="0" y="654.4" textLength="12.2"
clip-path="url(#breeze-help-line-26)">│</text><text class="breeze-help-r1"
x="317.2" y="654.4" textLength="1122.4"
clip-path="url(#breeze-help-line-26)">the Airflow database will fail.                                    &#
[...]
</text><text class="breeze-help-r5" x="0" y="678.8" textLength="12.2"
clip-path="url(#breeze-help-line-27)">│</text><text class="breeze-help-r7"
x="317.2" y="678.8" textLength="1122.4"
clip-path="url(#breeze-help-line-27)">(>sqlite< | mysql | postgres | none)                                 
[...]
</text><text class="breeze-help-r5" x="0" y="703.2" textLength="12.2"
clip-path="url(#breeze-help-line-28)">│</text><text class="breeze-help-r5"
x="317.2" y="703.2" textLength="1122.4"
clip-path="url(#breeze-help-line-28)">[default: sqlite]                                         &
[...]
-</text><text class="breeze-help-r5" x="0" y="727.6" textLength="12.2"
clip-path="url(#breeze-help-line-29)">│</text><text class="breeze-help-r4"
x="24.4" y="727.6" textLength="12.2"
clip-path="url(#breeze-help-line-29)">-</text><text class="breeze-help-r4"
x="36.6" y="727.6" textLength="109.8"
clip-path="url(#breeze-help-line-29)">-postgres</text><text
class="breeze-help-r4" x="146.4" y="727.6" textLength="97.6"
clip-path="url(#breeze-help-line-29)">-version</text><text class="breeze-hel
[...]
-</text><text class="breeze-help-r5" x="0" y="752" textLength="12.2"
clip-path="url(#breeze-help-line-30)">│</text><text class="breeze-help-r4"
x="24.4" y="752" textLength="12.2"
clip-path="url(#breeze-help-line-30)">-</text><text class="breeze-help-r4"
x="36.6" y="752" textLength="73.2"
clip-path="url(#breeze-help-line-30)">-mysql</text><text class="breeze-help-r4"
x="109.8" y="752" textLength="97.6"
clip-path="url(#breeze-help-line-30)">-version</text><text
class="breeze-help-r6" x="268 [...]
-</text><text class="breeze-help-r5" x="0" y="776.4" textLength="12.2"
clip-path="url(#breeze-help-line-31)">│</text><text class="breeze-help-r4"
x="24.4" y="776.4" textLength="12.2"
clip-path="url(#breeze-help-line-31)">-</text><text class="breeze-help-r4"
x="36.6" y="776.4" textLength="36.6"
clip-path="url(#breeze-help-line-31)">-db</text><text class="breeze-help-r4"
x="73.2" y="776.4" textLength="73.2"
clip-path="url(#breeze-help-line-31)">-reset</text><text class="breeze-help-r6"
x="2 [...]
+</text><text class="breeze-help-r5" x="0" y="727.6" textLength="12.2"
clip-path="url(#breeze-help-line-29)">│</text><text class="breeze-help-r4"
x="24.4" y="727.6" textLength="219.6"
clip-path="url(#breeze-help-line-29)">--postgres-version</text><text
class="breeze-help-r6" x="268.4" y="727.6" textLength="24.4"
clip-path="url(#breeze-help-line-29)">-P</text><text class="breeze-help-r1"
x="317.2" y="727.6" textLength="305"
clip-path="url(#breeze-help-line-29)">Version of Postgre [...]
+</text><text class="breeze-help-r5" x="0" y="752" textLength="12.2"
clip-path="url(#breeze-help-line-30)">│</text><text class="breeze-help-r4"
x="24.4" y="752" textLength="183"
clip-path="url(#breeze-help-line-30)">--mysql-version</text><text
class="breeze-help-r6" x="268.4" y="752" textLength="24.4"
clip-path="url(#breeze-help-line-30)">-M</text><text class="breeze-help-r1"
x="317.2" y="752" textLength="268.4"
clip-path="url(#breeze-help-line-30)">Version of MySQL used.</
[...]
+</text><text class="breeze-help-r5" x="0" y="776.4" textLength="12.2"
clip-path="url(#breeze-help-line-31)">│</text><text class="breeze-help-r4"
x="24.4" y="776.4" textLength="122"
clip-path="url(#breeze-help-line-31)">--db-reset</text><text
class="breeze-help-r6" x="268.4" y="776.4" textLength="24.4"
clip-path="url(#breeze-help-line-31)">-d</text><text class="breeze-help-r1"
x="317.2" y="776.4" textLength="451.4"
clip-path="url(#breeze-help-line-31)">Reset DB when enterin [...]
</text><text class="breeze-help-r5" x="0" y="800.8" textLength="1464"
clip-path="url(#breeze-help-line-32)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="800.8" textLength="12.2"
clip-path="url(#breeze-help-line-32)">
</text><text class="breeze-help-r5" x="0" y="825.2" textLength="24.4"
clip-path="url(#breeze-help-line-33)">╭─</text><text class="breeze-help-r5"
x="24.4" y="825.2" textLength="488"
clip-path="url(#breeze-help-line-33)"> Build CI image (before entering shell) </text><text
class="breeze-help-r5" x="512.4" y="825.2" textLength="927.2"
clip-path="url(#breeze-help-line-33)">────────────────────────────────────────────────────────────────────────────</text><
[...]
-</text><text class="breeze-help-r5" x="0" y="849.6" textLength="12.2"
clip-path="url(#breeze-help-line-34)">│</text><text class="breeze-help-r4"
x="24.4" y="849.6" textLength="12.2"
clip-path="url(#breeze-help-line-34)">-</text><text class="breeze-help-r4"
x="36.6" y="849.6" textLength="85.4"
clip-path="url(#breeze-help-line-34)">-github</text><text
class="breeze-help-r4" x="122" y="849.6" textLength="134.2"
clip-path="url(#breeze-help-line-34)">-repository</text><text
class="breeze-help [...]
-</text><text class="breeze-help-r5" x="0" y="874" textLength="12.2"
clip-path="url(#breeze-help-line-35)">│</text><text class="breeze-help-r4"
x="24.4" y="874" textLength="12.2"
clip-path="url(#breeze-help-line-35)">-</text><text class="breeze-help-r4"
x="36.6" y="874" textLength="97.6"
clip-path="url(#breeze-help-line-35)">-builder</text><text
class="breeze-help-r1" x="341.6" y="874" textLength="756.4"
clip-path="url(#breeze-help-line-35)">Buildx builder used to perf
[...]
+</text><text class="breeze-help-r5" x="0" y="849.6" textLength="12.2"
clip-path="url(#breeze-help-line-34)">│</text><text class="breeze-help-r4"
x="24.4" y="849.6" textLength="231.8"
clip-path="url(#breeze-help-line-34)">--github-repository</text><text
class="breeze-help-r6" x="292.8" y="849.6" textLength="24.4"
clip-path="url(#breeze-help-line-34)">-g</text><text class="breeze-help-r1"
x="341.6" y="849.6" textLength="585.6"
clip-path="url(#breeze-help-line-34)">GitHub repository [...]
+</text><text class="breeze-help-r5" x="0" y="874" textLength="12.2"
clip-path="url(#breeze-help-line-35)">│</text><text class="breeze-help-r4"
x="24.4" y="874" textLength="109.8"
clip-path="url(#breeze-help-line-35)">--builder</text><text
class="breeze-help-r1" x="341.6" y="874" textLength="756.4"
clip-path="url(#breeze-help-line-35)">Buildx builder used to perform `docker buildx build` commands.</text><text
class="breeze-help-r7" x="1110.2" y="874 [...]
</text><text class="breeze-help-r5" x="0" y="898.4" textLength="12.2"
clip-path="url(#breeze-help-line-36)">│</text><text class="breeze-help-r5"
x="341.6" y="898.4" textLength="756.4"
clip-path="url(#breeze-help-line-36)">[default: autodetect]                                        
[...]
-</text><text class="breeze-help-r5" x="0" y="922.8" textLength="12.2"
clip-path="url(#breeze-help-line-37)">│</text><text class="breeze-help-r4"
x="24.4" y="922.8" textLength="12.2"
clip-path="url(#breeze-help-line-37)">-</text><text class="breeze-help-r4"
x="36.6" y="922.8" textLength="48.8"
clip-path="url(#breeze-help-line-37)">-use</text><text class="breeze-help-r4"
x="85.4" y="922.8" textLength="36.6"
clip-path="url(#breeze-help-line-37)">-uv</text><text class="breeze-help-r1"
x="122 [...]
-</text><text class="breeze-help-r5" x="0" y="947.2" textLength="12.2"
clip-path="url(#breeze-help-line-38)">│</text><text class="breeze-help-r4"
x="24.4" y="947.2" textLength="12.2"
clip-path="url(#breeze-help-line-38)">-</text><text class="breeze-help-r4"
x="36.6" y="947.2" textLength="36.6"
clip-path="url(#breeze-help-line-38)">-uv</text><text class="breeze-help-r4"
x="73.2" y="947.2" textLength="158.6"
clip-path="url(#breeze-help-line-38)">-http-timeout</text><text
class="breeze-help- [...]
+</text><text class="breeze-help-r5" x="0" y="922.8" textLength="12.2"
clip-path="url(#breeze-help-line-37)">│</text><text class="breeze-help-r4"
x="24.4" y="922.8" textLength="97.6"
clip-path="url(#breeze-help-line-37)">--use-uv</text><text
class="breeze-help-r1" x="122" y="922.8" textLength="12.2"
clip-path="url(#breeze-help-line-37)">/</text><text class="breeze-help-r4"
x="134.2" y="922.8" textLength="134.2"
clip-path="url(#breeze-help-line-37)">--no-use-uv</text><text class="breeze-he
[...]
+</text><text class="breeze-help-r5" x="0" y="947.2" textLength="12.2"
clip-path="url(#breeze-help-line-38)">│</text><text class="breeze-help-r4"
x="24.4" y="947.2" textLength="207.4"
clip-path="url(#breeze-help-line-38)">--uv-http-timeout</text><text
class="breeze-help-r1" x="341.6" y="947.2" textLength="829.6"
clip-path="url(#breeze-help-line-38)">Timeout for requests that UV makes (only used in case of UV builds).</text><text
[...]
</text><text class="breeze-help-r5" x="0" y="971.6" textLength="12.2"
clip-path="url(#breeze-help-line-39)">│</text><text class="breeze-help-r5"
x="341.6" y="971.6" textLength="829.6"
clip-path="url(#breeze-help-line-39)">[default: 300; x>=1]                                       
[...]
</text><text class="breeze-help-r5" x="0" y="996" textLength="1464"
clip-path="url(#breeze-help-line-40)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="996" textLength="12.2"
clip-path="url(#breeze-help-line-40)">
</text><text class="breeze-help-r5" x="0" y="1020.4" textLength="24.4"
clip-path="url(#breeze-help-line-41)">╭─</text><text class="breeze-help-r5"
x="24.4" y="1020.4" textLength="183"
clip-path="url(#breeze-help-line-41)"> Other options </text><text
class="breeze-help-r5" x="207.4" y="1020.4" textLength="1232.2"
clip-path="url(#breeze-help-line-41)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
class="bree [...]
-</text><text class="breeze-help-r5" x="0" y="1044.8" textLength="12.2"
clip-path="url(#breeze-help-line-42)">│</text><text class="breeze-help-r4"
x="24.4" y="1044.8" textLength="12.2"
clip-path="url(#breeze-help-line-42)">-</text><text class="breeze-help-r4"
x="36.6" y="1044.8" textLength="97.6"
clip-path="url(#breeze-help-line-42)">-forward</text><text
class="breeze-help-r4" x="134.2" y="1044.8" textLength="146.4"
clip-path="url(#breeze-help-line-42)">-credentials</text><text class="bre [...]
-</text><text class="breeze-help-r5" x="0" y="1069.2" textLength="12.2"
clip-path="url(#breeze-help-line-43)">│</text><text class="breeze-help-r4"
x="24.4" y="1069.2" textLength="12.2"
clip-path="url(#breeze-help-line-43)">-</text><text class="breeze-help-r4"
x="36.6" y="1069.2" textLength="48.8"
clip-path="url(#breeze-help-line-43)">-max</text><text class="breeze-help-r4"
x="85.4" y="1069.2" textLength="61"
clip-path="url(#breeze-help-line-43)">-time</text><text class="breeze-help-r1"
x= [...]
+</text><text class="breeze-help-r5" x="0" y="1044.8" textLength="12.2"
clip-path="url(#breeze-help-line-42)">│</text><text class="breeze-help-r4"
x="24.4" y="1044.8" textLength="256.2"
clip-path="url(#breeze-help-line-42)">--forward-credentials</text><text
class="breeze-help-r6" x="305" y="1044.8" textLength="24.4"
clip-path="url(#breeze-help-line-42)">-f</text><text class="breeze-help-r1"
x="353.8" y="1044.8" textLength="634.4"
clip-path="url(#breeze-help-line-42)">Forward local [...]
+</text><text class="breeze-help-r5" x="0" y="1069.2" textLength="12.2"
clip-path="url(#breeze-help-line-43)">│</text><text class="breeze-help-r4"
x="24.4" y="1069.2" textLength="122"
clip-path="url(#breeze-help-line-43)">--max-time</text><text
class="breeze-help-r1" x="353.8" y="1069.2" textLength="1049.2"
clip-path="url(#breeze-help-line-43)">Maximum time that the command should take - if it takes longer, the command 
[...]
</text><text class="breeze-help-r5" x="0" y="1093.6" textLength="12.2"
clip-path="url(#breeze-help-line-44)">│</text><text class="breeze-help-r7"
x="353.8" y="1093.6" textLength="1049.2"
clip-path="url(#breeze-help-line-44)">(INTEGER RANGE)                                         &
[...]
</text><text class="breeze-help-r5" x="0" y="1118" textLength="1464"
clip-path="url(#breeze-help-line-45)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="1118" textLength="12.2"
clip-path="url(#breeze-help-line-45)">
</text><text class="breeze-help-r5" x="0" y="1142.4" textLength="24.4"
clip-path="url(#breeze-help-line-46)">╭─</text><text class="breeze-help-r5"
x="24.4" y="1142.4" textLength="195.2"
clip-path="url(#breeze-help-line-46)"> Common options </text><text
class="breeze-help-r5" x="219.6" y="1142.4" textLength="1220"
clip-path="url(#breeze-help-line-46)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
class="bree [...]
-</text><text class="breeze-help-r5" x="0" y="1166.8" textLength="12.2"
clip-path="url(#breeze-help-line-47)">│</text><text class="breeze-help-r4"
x="24.4" y="1166.8" textLength="12.2"
clip-path="url(#breeze-help-line-47)">-</text><text class="breeze-help-r4"
x="36.6" y="1166.8" textLength="85.4"
clip-path="url(#breeze-help-line-47)">-answer</text><text
class="breeze-help-r6" x="158.6" y="1166.8" textLength="24.4"
clip-path="url(#breeze-help-line-47)">-a</text><text class="breeze-help-r1"
[...]
-</text><text class="breeze-help-r5" x="0" y="1191.2" textLength="12.2"
clip-path="url(#breeze-help-line-48)">│</text><text class="breeze-help-r4"
x="24.4" y="1191.2" textLength="12.2"
clip-path="url(#breeze-help-line-48)">-</text><text class="breeze-help-r4"
x="36.6" y="1191.2" textLength="48.8"
clip-path="url(#breeze-help-line-48)">-dry</text><text class="breeze-help-r4"
x="85.4" y="1191.2" textLength="48.8"
clip-path="url(#breeze-help-line-48)">-run</text><text class="breeze-help-r6" x
[...]
-</text><text class="breeze-help-r5" x="0" y="1215.6" textLength="12.2"
clip-path="url(#breeze-help-line-49)">│</text><text class="breeze-help-r4"
x="24.4" y="1215.6" textLength="12.2"
clip-path="url(#breeze-help-line-49)">-</text><text class="breeze-help-r4"
x="36.6" y="1215.6" textLength="97.6"
clip-path="url(#breeze-help-line-49)">-verbose</text><text
class="breeze-help-r6" x="158.6" y="1215.6" textLength="24.4"
clip-path="url(#breeze-help-line-49)">-v</text><text class="breeze-help-r1 [...]
-</text><text class="breeze-help-r5" x="0" y="1240" textLength="12.2"
clip-path="url(#breeze-help-line-50)">│</text><text class="breeze-help-r4"
x="24.4" y="1240" textLength="12.2"
clip-path="url(#breeze-help-line-50)">-</text><text class="breeze-help-r4"
x="36.6" y="1240" textLength="61"
clip-path="url(#breeze-help-line-50)">-help</text><text class="breeze-help-r6"
x="158.6" y="1240" textLength="24.4"
clip-path="url(#breeze-help-line-50)">-h</text><text class="breeze-help-r1"
x="207.4" y [...]
+</text><text class="breeze-help-r5" x="0" y="1166.8" textLength="12.2"
clip-path="url(#breeze-help-line-47)">│</text><text class="breeze-help-r4"
x="24.4" y="1166.8" textLength="97.6"
clip-path="url(#breeze-help-line-47)">--answer</text><text
class="breeze-help-r6" x="158.6" y="1166.8" textLength="24.4"
clip-path="url(#breeze-help-line-47)">-a</text><text class="breeze-help-r1"
x="207.4" y="1166.8" textLength="317.2"
clip-path="url(#breeze-help-line-47)">Force answer to qu [...]
+</text><text class="breeze-help-r5" x="0" y="1191.2" textLength="12.2"
clip-path="url(#breeze-help-line-48)">│</text><text class="breeze-help-r4"
x="24.4" y="1191.2" textLength="109.8"
clip-path="url(#breeze-help-line-48)">--dry-run</text><text
class="breeze-help-r6" x="158.6" y="1191.2" textLength="24.4"
clip-path="url(#breeze-help-line-48)">-D</text><text class="breeze-help-r1"
x="207.4" y="1191.2" textLength="719.8"
clip-path="url(#breeze-help-line-48)">If dry-run is se [...]
+</text><text class="breeze-help-r5" x="0" y="1215.6" textLength="12.2"
clip-path="url(#breeze-help-line-49)">│</text><text class="breeze-help-r4"
x="24.4" y="1215.6" textLength="109.8"
clip-path="url(#breeze-help-line-49)">--verbose</text><text
class="breeze-help-r6" x="158.6" y="1215.6" textLength="24.4"
clip-path="url(#breeze-help-line-49)">-v</text><text class="breeze-help-r1"
x="207.4" y="1215.6" textLength="585.6"
clip-path="url(#breeze-help-line-49)">Print verbose informa [...]
+</text><text class="breeze-help-r5" x="0" y="1240" textLength="12.2"
clip-path="url(#breeze-help-line-50)">│</text><text class="breeze-help-r4"
x="24.4" y="1240" textLength="73.2"
clip-path="url(#breeze-help-line-50)">--help</text><text class="breeze-help-r6"
x="158.6" y="1240" textLength="24.4"
clip-path="url(#breeze-help-line-50)">-h</text><text class="breeze-help-r1"
x="207.4" y="1240" textLength="329.4"
clip-path="url(#breeze-help-line-50)">Show this message and e
[...]
</text><text class="breeze-help-r5" x="0" y="1264.4" textLength="1464"
clip-path="url(#breeze-help-line-51)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="1264.4" textLength="12.2"
clip-path="url(#breeze-help-line-51)">
</text><text class="breeze-help-r5" x="0" y="1288.8" textLength="24.4"
clip-path="url(#breeze-help-line-52)">╭─</text><text class="breeze-help-r5"
x="24.4" y="1288.8" textLength="244"
clip-path="url(#breeze-help-line-52)"> Developer commands </text><text
class="breeze-help-r5" x="268.4" y="1288.8" textLength="1171.2"
clip-path="url(#breeze-help-line-52)">────────────────────────────────────────────────────────────────────────────────────────────────</text><text
class="bree [...]
</text><text class="breeze-help-r5" x="0" y="1313.2" textLength="12.2"
clip-path="url(#breeze-help-line-53)">│</text><text class="breeze-help-r4"
x="24.4" y="1313.2" textLength="280.6"
clip-path="url(#breeze-help-line-53)">start-airflow          </text><text
class="breeze-help-r1" x="329.4" y="1313.2" textLength="1110.2"
clip-path="url(#breeze-help-line-53)">Enter breeze environment and starts all Airflow
[...]
diff --git a/dev/breeze/doc/images/output_setup_config.svg
b/dev/breeze/doc/images/output_setup_config.svg
index 9a42467ea52..5a44bb20030 100644
--- a/dev/breeze/doc/images/output_setup_config.svg
+++ b/dev/breeze/doc/images/output_setup_config.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 611.1999999999999"
xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 635.5999999999999"
xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -43,7 +43,7 @@
<defs>
<clipPath id="breeze-setup-config-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="560.1999999999999" />
+ <rect x="0" y="0" width="1463.0" height="584.5999999999999" />
</clipPath>
<clipPath id="breeze-setup-config-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -111,9 +111,12 @@
<clipPath id="breeze-setup-config-line-21">
<rect x="0" y="513.9" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-setup-config-line-22">
+ <rect x="0" y="538.3" width="1464" height="24.65"/>
+ </clipPath>
</defs>
- <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="1480" height="609.2" rx="8"/><text
class="breeze-setup-config-title" fill="#c5c8c6" text-anchor="middle" x="740"
y="27">Command: setup config</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="1480" height="633.6" rx="8"/><text
class="breeze-setup-config-title" fill="#c5c8c6" text-anchor="middle" x="740"
y="27">Command: setup config</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -129,23 +132,24 @@
</text><text class="breeze-setup-config-r1" x="12.2" y="93.2"
textLength="805.2"
clip-path="url(#breeze-setup-config-line-3)">Show/update configuration (Python, Backend, Cheatsheet, ASCIIART).</text><text
class="breeze-setup-config-r1" x="1464" y="93.2" textLength="12.2"
clip-path="url(#breeze-setup-config-line-3)">
</text><text class="breeze-setup-config-r1" x="1464" y="117.6"
textLength="12.2" clip-path="url(#breeze-setup-config-line-4)">
</text><text class="breeze-setup-config-r5" x="0" y="142" textLength="24.4"
clip-path="url(#breeze-setup-config-line-5)">╭─</text><text
class="breeze-setup-config-r5" x="24.4" y="142" textLength="170.8"
clip-path="url(#breeze-setup-config-line-5)"> Config flags </text><text
class="breeze-setup-config-r5" x="195.2" y="142" textLength="1244.4"
clip-path="url(#breeze-setup-config-line-5)">────────────────────────────────────────────────────────────────────────────────────────
[...]
-</text><text class="breeze-setup-config-r5" x="0" y="166.4" textLength="12.2"
clip-path="url(#breeze-setup-config-line-6)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="166.4" textLength="12.2"
clip-path="url(#breeze-setup-config-line-6)">-</text><text
class="breeze-setup-config-r4" x="36.6" y="166.4" textLength="85.4"
clip-path="url(#breeze-setup-config-line-6)">-python</text><text
class="breeze-setup-config-r6" x="390.4" y="166.4" textLength="24.4"
clip-path="url(#breeze-set [...]
+</text><text class="breeze-setup-config-r5" x="0" y="166.4" textLength="12.2"
clip-path="url(#breeze-setup-config-line-6)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="166.4" textLength="97.6"
clip-path="url(#breeze-setup-config-line-6)">--python</text><text
class="breeze-setup-config-r6" x="390.4" y="166.4" textLength="24.4"
clip-path="url(#breeze-setup-config-line-6)">-p</text><text
class="breeze-setup-config-r1" x="475.8" y="166.4" textLength="732"
clip-path="url(#breeze-s [...]
</text><text class="breeze-setup-config-r5" x="0" y="190.8" textLength="12.2"
clip-path="url(#breeze-setup-config-line-7)">│</text><text
class="breeze-setup-config-r7" x="475.8" y="190.8" textLength="732"
clip-path="url(#breeze-setup-config-line-7)">(>3.8< | 3.9 | 3.10 | 3.11 | 3.12)                          </text
[...]
</text><text class="breeze-setup-config-r5" x="0" y="215.2" textLength="12.2"
clip-path="url(#breeze-setup-config-line-8)">│</text><text
class="breeze-setup-config-r5" x="475.8" y="215.2" textLength="732"
clip-path="url(#breeze-setup-config-line-8)">[default: 3.8]                                     &
[...]
-</text><text class="breeze-setup-config-r5" x="0" y="239.6" textLength="12.2"
clip-path="url(#breeze-setup-config-line-9)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="239.6" textLength="12.2"
clip-path="url(#breeze-setup-config-line-9)">-</text><text
class="breeze-setup-config-r4" x="36.6" y="239.6" textLength="97.6"
clip-path="url(#breeze-setup-config-line-9)">-backend</text><text
class="breeze-setup-config-r6" x="390.4" y="239.6" textLength="24.4"
clip-path="url(#breeze-se [...]
+</text><text class="breeze-setup-config-r5" x="0" y="239.6" textLength="12.2"
clip-path="url(#breeze-setup-config-line-9)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="239.6" textLength="109.8"
clip-path="url(#breeze-setup-config-line-9)">--backend</text><text
class="breeze-setup-config-r6" x="390.4" y="239.6" textLength="24.4"
clip-path="url(#breeze-setup-config-line-9)">-b</text><text
class="breeze-setup-config-r1" x="475.8" y="239.6" textLength="963.8"
clip-path="url(#bree [...]
</text><text class="breeze-setup-config-r5" x="0" y="264" textLength="12.2"
clip-path="url(#breeze-setup-config-line-10)">│</text><text
class="breeze-setup-config-r1" x="475.8" y="264" textLength="963.8"
clip-path="url(#breeze-setup-config-line-10)">database configuration, meaning there will be no database available, and any   </text><text
class="breeze-setup-config-r5" x="1451.8" y="264" textLength="12.2"
clip-path="url(#b [...]
</text><text class="breeze-setup-config-r5" x="0" y="288.4" textLength="12.2"
clip-path="url(#breeze-setup-config-line-11)">│</text><text
class="breeze-setup-config-r1" x="475.8" y="288.4" textLength="963.8"
clip-path="url(#breeze-setup-config-line-11)">attempts to connect to the Airflow database will fail.                        
[...]
</text><text class="breeze-setup-config-r5" x="0" y="312.8" textLength="12.2"
clip-path="url(#breeze-setup-config-line-12)">│</text><text
class="breeze-setup-config-r7" x="475.8" y="312.8" textLength="963.8"
clip-path="url(#breeze-setup-config-line-12)">(>sqlite< | mysql | postgres | none)                           
[...]
</text><text class="breeze-setup-config-r5" x="0" y="337.2" textLength="12.2"
clip-path="url(#breeze-setup-config-line-13)">│</text><text
class="breeze-setup-config-r5" x="475.8" y="337.2" textLength="963.8"
clip-path="url(#breeze-setup-config-line-13)">[default: sqlite]                                    
[...]
-</text><text class="breeze-setup-config-r5" x="0" y="361.6" textLength="12.2"
clip-path="url(#breeze-setup-config-line-14)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="361.6" textLength="12.2"
clip-path="url(#breeze-setup-config-line-14)">-</text><text
class="breeze-setup-config-r4" x="36.6" y="361.6" textLength="109.8"
clip-path="url(#breeze-setup-config-line-14)">-postgres</text><text
class="breeze-setup-config-r4" x="146.4" y="361.6" textLength="97.6"
clip-path="url(#bree [...]
-</text><text class="breeze-setup-config-r5" x="0" y="386" textLength="12.2"
clip-path="url(#breeze-setup-config-line-15)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="386" textLength="12.2"
clip-path="url(#breeze-setup-config-line-15)">-</text><text
class="breeze-setup-config-r4" x="36.6" y="386" textLength="73.2"
clip-path="url(#breeze-setup-config-line-15)">-mysql</text><text
class="breeze-setup-config-r4" x="109.8" y="386" textLength="97.6"
clip-path="url(#breeze-setup-con [...]
-</text><text class="breeze-setup-config-r5" x="0" y="410.4" textLength="12.2"
clip-path="url(#breeze-setup-config-line-16)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="410.4" textLength="12.2"
clip-path="url(#breeze-setup-config-line-16)">-</text><text
class="breeze-setup-config-r4" x="36.6" y="410.4" textLength="134.2"
clip-path="url(#breeze-setup-config-line-16)">-cheatsheet</text><text
class="breeze-setup-config-r1" x="170.8" y="410.4" textLength="12.2"
clip-path="url(#br [...]
-</text><text class="breeze-setup-config-r5" x="0" y="434.8" textLength="12.2"
clip-path="url(#breeze-setup-config-line-17)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="434.8" textLength="12.2"
clip-path="url(#breeze-setup-config-line-17)">-</text><text
class="breeze-setup-config-r4" x="36.6" y="434.8" textLength="109.8"
clip-path="url(#breeze-setup-config-line-17)">-asciiart</text><text
class="breeze-setup-config-r1" x="146.4" y="434.8" textLength="12.2"
clip-path="url(#bree [...]
-</text><text class="breeze-setup-config-r5" x="0" y="459.2" textLength="12.2"
clip-path="url(#breeze-setup-config-line-18)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="459.2" textLength="12.2"
clip-path="url(#breeze-setup-config-line-18)">-</text><text
class="breeze-setup-config-r4" x="36.6" y="459.2" textLength="85.4"
clip-path="url(#breeze-setup-config-line-18)">-colour</text><text
class="breeze-setup-config-r1" x="122" y="459.2" textLength="12.2"
clip-path="url(#breeze-se [...]
-</text><text class="breeze-setup-config-r5" x="0" y="483.6" textLength="1464"
clip-path="url(#breeze-setup-config-line-19)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-setup-config-r1" x="1464" y="483.6" textLength="12.2"
clip-path="url(#breeze-setup-config-line-19)">
-</text><text class="breeze-setup-config-r5" x="0" y="508" textLength="24.4"
clip-path="url(#breeze-setup-config-line-20)">╭─</text><text
class="breeze-setup-config-r5" x="24.4" y="508" textLength="195.2"
clip-path="url(#breeze-setup-config-line-20)"> Common options </text><text
class="breeze-setup-config-r5" x="219.6" y="508" textLength="1220"
clip-path="url(#breeze-setup-config-line-20)">─────────────────────────────────────────────────────────────────────────────────────
[...]
-</text><text class="breeze-setup-config-r5" x="0" y="532.4" textLength="12.2"
clip-path="url(#breeze-setup-config-line-21)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="532.4" textLength="12.2"
clip-path="url(#breeze-setup-config-line-21)">-</text><text
class="breeze-setup-config-r4" x="36.6" y="532.4" textLength="61"
clip-path="url(#breeze-setup-config-line-21)">-help</text><text
class="breeze-setup-config-r6" x="122" y="532.4" textLength="24.4"
clip-path="url(#breeze-setup- [...]
-</text><text class="breeze-setup-config-r5" x="0" y="556.8" textLength="1464"
clip-path="url(#breeze-setup-config-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-setup-config-r1" x="1464" y="556.8" textLength="12.2"
clip-path="url(#breeze-setup-config-line-22)">
+</text><text class="breeze-setup-config-r5" x="0" y="361.6" textLength="12.2"
clip-path="url(#breeze-setup-config-line-14)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="361.6" textLength="219.6"
clip-path="url(#breeze-setup-config-line-14)">--postgres-version</text><text
class="breeze-setup-config-r6" x="390.4" y="361.6" textLength="24.4"
clip-path="url(#breeze-setup-config-line-14)">-P</text><text
class="breeze-setup-config-r1" x="475.8" y="361.6" textLength="305" clip-path=
[...]
+</text><text class="breeze-setup-config-r5" x="0" y="386" textLength="12.2"
clip-path="url(#breeze-setup-config-line-15)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="386" textLength="183"
clip-path="url(#breeze-setup-config-line-15)">--mysql-version</text><text
class="breeze-setup-config-r6" x="390.4" y="386" textLength="24.4"
clip-path="url(#breeze-setup-config-line-15)">-M</text><text
class="breeze-setup-config-r1" x="475.8" y="386" textLength="268.4"
clip-path="url(#breez [...]
+</text><text class="breeze-setup-config-r5" x="0" y="410.4" textLength="12.2"
clip-path="url(#breeze-setup-config-line-16)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="410.4" textLength="97.6"
clip-path="url(#breeze-setup-config-line-16)">--use-uv</text><text
class="breeze-setup-config-r1" x="122" y="410.4" textLength="12.2"
clip-path="url(#breeze-setup-config-line-16)">/</text><text
class="breeze-setup-config-r4" x="134.2" y="410.4" textLength="134.2"
clip-path="url(#breeze [...]
+</text><text class="breeze-setup-config-r5" x="0" y="434.8" textLength="12.2"
clip-path="url(#breeze-setup-config-line-17)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="434.8" textLength="146.4"
clip-path="url(#breeze-setup-config-line-17)">--cheatsheet</text><text
class="breeze-setup-config-r1" x="170.8" y="434.8" textLength="12.2"
clip-path="url(#breeze-setup-config-line-17)">/</text><text
class="breeze-setup-config-r4" x="183" y="434.8" textLength="183"
clip-path="url(#bre [...]
+</text><text class="breeze-setup-config-r5" x="0" y="459.2" textLength="12.2"
clip-path="url(#breeze-setup-config-line-18)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="459.2" textLength="122"
clip-path="url(#breeze-setup-config-line-18)">--asciiart</text><text
class="breeze-setup-config-r1" x="146.4" y="459.2" textLength="12.2"
clip-path="url(#breeze-setup-config-line-18)">/</text><text
class="breeze-setup-config-r4" x="158.6" y="459.2" textLength="158.6"
clip-path="url(#bre [...]
+</text><text class="breeze-setup-config-r5" x="0" y="483.6" textLength="12.2"
clip-path="url(#breeze-setup-config-line-19)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="483.6" textLength="97.6"
clip-path="url(#breeze-setup-config-line-19)">--colour</text><text
class="breeze-setup-config-r1" x="122" y="483.6" textLength="12.2"
clip-path="url(#breeze-setup-config-line-19)">/</text><text
class="breeze-setup-config-r4" x="134.2" y="483.6" textLength="134.2"
clip-path="url(#breeze [...]
+</text><text class="breeze-setup-config-r5" x="0" y="508" textLength="1464"
clip-path="url(#breeze-setup-config-line-20)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-setup-config-r1" x="1464" y="508" textLength="12.2"
clip-path="url(#breeze-setup-config-line-20)">
+</text><text class="breeze-setup-config-r5" x="0" y="532.4" textLength="24.4"
clip-path="url(#breeze-setup-config-line-21)">╭─</text><text
class="breeze-setup-config-r5" x="24.4" y="532.4" textLength="195.2"
clip-path="url(#breeze-setup-config-line-21)"> Common options </text><text
class="breeze-setup-config-r5" x="219.6" y="532.4" textLength="1220"
clip-path="url(#breeze-setup-config-line-21)">───────────────────────────────────────────────────────────────────────────────
[...]
+</text><text class="breeze-setup-config-r5" x="0" y="556.8" textLength="12.2"
clip-path="url(#breeze-setup-config-line-22)">│</text><text
class="breeze-setup-config-r4" x="24.4" y="556.8" textLength="73.2"
clip-path="url(#breeze-setup-config-line-22)">--help</text><text
class="breeze-setup-config-r6" x="122" y="556.8" textLength="24.4"
clip-path="url(#breeze-setup-config-line-22)">-h</text><text
class="breeze-setup-config-r1" x="170.8" y="556.8" textLength="329.4"
clip-path="url(#breeze- [...]
+</text><text class="breeze-setup-config-r5" x="0" y="581.2" textLength="1464"
clip-path="url(#breeze-setup-config-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-setup-config-r1" x="1464" y="581.2" textLength="12.2"
clip-path="url(#breeze-setup-config-line-23)">
</text>
</g>
</g>
diff --git a/dev/breeze/doc/images/output_setup_config.txt
b/dev/breeze/doc/images/output_setup_config.txt
index f47fa38e42c..3b2da9a9c04 100644
--- a/dev/breeze/doc/images/output_setup_config.txt
+++ b/dev/breeze/doc/images/output_setup_config.txt
@@ -1 +1 @@
-422c8c524b557fcf5924da4c8590935d
+96e10564034b282769a2c48ebf7176e2
diff --git
a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index 33f3dd338e4..648a13d4246 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -226,8 +226,8 @@ class VersionedFile(NamedTuple):
file_name: str
-AIRFLOW_PIP_VERSION = "24.0"
-AIRFLOW_UV_VERSION = "0.1.10"
+AIRFLOW_PIP_VERSION = "24.3.1"
+AIRFLOW_UV_VERSION = "0.4.29"
AIRFLOW_USE_UV = False
WHEEL_VERSION = "0.36.2"
GITPYTHON_VERSION = "3.1.40"
@@ -451,7 +451,11 @@ def _check_sdist_to_wheel_dists(dists_info:
tuple[DistributionPackageInfo, ...])
continue
if not venv_created:
- python_path = create_venv(Path(tmp_dir_name) / ".venv",
pip_version=AIRFLOW_PIP_VERSION)
+ python_path = create_venv(
+ Path(tmp_dir_name) / ".venv",
+ pip_version=AIRFLOW_PIP_VERSION,
+ uv_version=AIRFLOW_UV_VERSION,
+ )
pip_command = create_pip_command(python_path)
venv_created = True
diff --git a/dev/breeze/src/airflow_breeze/commands/setup_commands.py
b/dev/breeze/src/airflow_breeze/commands/setup_commands.py
index 407ff7f8cdf..bc1ac4f1fa5 100644
--- a/dev/breeze/src/airflow_breeze/commands/setup_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/setup_commands.py
@@ -192,6 +192,12 @@ def version():
@option_mysql_version
@click.option("-C/-c", "--cheatsheet/--no-cheatsheet", help="Enable/disable
cheatsheet.", default=None)
@click.option("-A/-a", "--asciiart/--no-asciiart", help="Enable/disable
ASCIIart.", default=None)
[email protected](
+ "-U/-u",
+ "--use-uv/--no-use-uv",
+ help="Enable/disable using uv for creating venvs by breeze.",
+ default=None,
+)
@click.option(
"--colour/--no-colour",
help="Enable/disable Colour mode (useful for colour blind-friendly
communication).",
@@ -200,6 +206,7 @@ def version():
def change_config(
python: str,
backend: str,
+ use_uv: bool,
postgres_version: str,
mysql_version: str,
cheatsheet: bool,
@@ -212,14 +219,22 @@ def change_config(
asciiart_file = "suppress_asciiart"
cheatsheet_file = "suppress_cheatsheet"
colour_file = "suppress_colour"
+ use_uv_file = "use_uv"
+ if use_uv is not None:
+ if use_uv:
+ touch_cache_file(use_uv_file)
+ get_console().print("[info]Enable using uv[/]")
+ else:
+ delete_cache(use_uv_file)
+ get_console().print("[info]Disable using uv[/]")
if asciiart is not None:
if asciiart:
delete_cache(asciiart_file)
- get_console().print("[info]Enable ASCIIART![/]")
+ get_console().print("[info]Enable ASCIIART[/]")
else:
touch_cache_file(asciiart_file)
- get_console().print("[info]Disable ASCIIART![/]")
+ get_console().print("[info]Disable ASCIIART[/]")
if cheatsheet is not None:
if cheatsheet:
delete_cache(cheatsheet_file)
@@ -235,23 +250,27 @@ def change_config(
touch_cache_file(colour_file)
get_console().print("[info]Disable Colour[/]")
- def get_status(file: str):
+ def get_supress_status(file: str):
return "disabled" if check_if_cache_exists(file) else "enabled"
+ def get_status(file: str):
+ return "enabled" if check_if_cache_exists(file) else "disabled"
+
get_console().print()
get_console().print("[info]Current configuration:[/]")
get_console().print()
get_console().print(f"[info]* Python: {python}[/]")
get_console().print(f"[info]* Backend: {backend}[/]")
+ get_console().print(f"[info]* Use uv: {get_status(use_uv_file)}[/]")
get_console().print()
get_console().print(f"[info]* Postgres version: {postgres_version}[/]")
get_console().print(f"[info]* MySQL version: {mysql_version}[/]")
get_console().print()
- get_console().print(f"[info]* ASCIIART: {get_status(asciiart_file)}[/]")
- get_console().print(f"[info]* Cheatsheet:
{get_status(cheatsheet_file)}[/]")
+ get_console().print(f"[info]* ASCIIART:
{get_supress_status(asciiart_file)}[/]")
+ get_console().print(f"[info]* Cheatsheet:
{get_supress_status(cheatsheet_file)}[/]")
get_console().print()
get_console().print()
- get_console().print(f"[info]* Colour: {get_status(colour_file)}[/]")
+ get_console().print(f"[info]* Colour:
{get_supress_status(colour_file)}[/]")
get_console().print()
diff --git a/dev/breeze/src/airflow_breeze/commands/setup_commands_config.py
b/dev/breeze/src/airflow_breeze/commands/setup_commands_config.py
index 61460f004ec..802a41fc273 100644
--- a/dev/breeze/src/airflow_breeze/commands/setup_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/setup_commands_config.py
@@ -63,6 +63,7 @@ SETUP_PARAMETERS: dict[str, list[dict[str, str | list[str]]]]
= {
"--backend",
"--postgres-version",
"--mysql-version",
+ "--use-uv",
"--cheatsheet",
"--asciiart",
"--colour",
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py
b/dev/breeze/src/airflow_breeze/global_constants.py
index 94487012274..791e07cfe71 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -155,7 +155,8 @@ if MYSQL_INNOVATION_RELEASE:
ALLOWED_INSTALL_MYSQL_CLIENT_TYPES = ["mariadb", "mysql"]
-PIP_VERSION = "24.0"
+PIP_VERSION = "24.3.1"
+UV_VERSION = "0.4.29"
DEFAULT_UV_HTTP_TIMEOUT = 300
DEFAULT_WSL2_HTTP_TIMEOUT = 900
diff --git a/dev/breeze/src/airflow_breeze/utils/kubernetes_utils.py
b/dev/breeze/src/airflow_breeze/utils/kubernetes_utils.py
index 69703b4692b..3aca9d51c13 100644
--- a/dev/breeze/src/airflow_breeze/utils/kubernetes_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/kubernetes_utils.py
@@ -41,12 +41,15 @@ from airflow_breeze.global_constants import (
HELM_VERSION,
KIND_VERSION,
PIP_VERSION,
+ UV_VERSION,
)
+from airflow_breeze.utils.cache import check_if_cache_exists
from airflow_breeze.utils.console import Output, get_console
from airflow_breeze.utils.host_info_utils import Architecture,
get_host_architecture, get_host_os
from airflow_breeze.utils.path_utils import AIRFLOW_SOURCES_ROOT,
BUILD_CACHE_DIR
from airflow_breeze.utils.run_utils import RunCommandResult, run_command
from airflow_breeze.utils.shared_options import get_dry_run, get_verbose
+from airflow_breeze.utils.virtualenv_utils import create_pip_command,
create_uv_command
K8S_ENV_PATH = BUILD_CACHE_DIR / ".k8s-env"
K8S_CLUSTERS_PATH = BUILD_CACHE_DIR / ".k8s-clusters"
@@ -301,10 +304,12 @@ def _requirements_changed() -> bool:
def _install_packages_in_k8s_virtualenv():
+ if check_if_cache_exists("use_uv"):
+ command = create_uv_command(PYTHON_BIN_PATH)
+ else:
+ command = create_pip_command(PYTHON_BIN_PATH)
install_command_no_constraints = [
- str(PYTHON_BIN_PATH),
- "-m",
- "pip",
+ *command,
"install",
"-r",
str(K8S_REQUIREMENTS_PATH.resolve()),
@@ -405,8 +410,9 @@ def create_virtualenv(force_venv_setup: bool) ->
RunCommandResult:
)
return venv_command_result
get_console().print(f"[info]Reinstalling PIP version in {K8S_ENV_PATH}")
+ command = create_pip_command(PYTHON_BIN_PATH)
pip_reinstall_result = run_command(
- [str(PYTHON_BIN_PATH), "-m", "pip", "install", f"pip=={PIP_VERSION}"],
+ [*command, "install", f"pip=={PIP_VERSION}"],
check=False,
capture_output=True,
)
@@ -416,8 +422,19 @@ def create_virtualenv(force_venv_setup: bool) ->
RunCommandResult:
f"{pip_reinstall_result.stdout}\n{pip_reinstall_result.stderr}"
)
return pip_reinstall_result
- get_console().print(f"[info]Installing necessary packages in
{K8S_ENV_PATH}")
+ uv_reinstall_result = run_command(
+ [*command, "install", f"uv=={UV_VERSION}"],
+ check=False,
+ capture_output=True,
+ )
+ if uv_reinstall_result.returncode != 0:
+ get_console().print(
+ f"[error]Error when updating uv to {UV_VERSION}:[/]\n"
+ f"{uv_reinstall_result.stdout}\n{uv_reinstall_result.stderr}"
+ )
+ return uv_reinstall_result
+ get_console().print(f"[info]Installing necessary packages in
{K8S_ENV_PATH}")
install_packages_result = _install_packages_in_k8s_virtualenv()
if install_packages_result.returncode == 0:
if get_dry_run():
diff --git a/dev/breeze/src/airflow_breeze/utils/run_tests.py
b/dev/breeze/src/airflow_breeze/utils/run_tests.py
index 73cbb430817..b34fa3b3410 100644
--- a/dev/breeze/src/airflow_breeze/utils/run_tests.py
+++ b/dev/breeze/src/airflow_breeze/utils/run_tests.py
@@ -22,7 +22,7 @@ import sys
from itertools import chain
from subprocess import DEVNULL
-from airflow_breeze.global_constants import PIP_VERSION
+from airflow_breeze.global_constants import PIP_VERSION, UV_VERSION
from airflow_breeze.utils.console import Output, get_console
from airflow_breeze.utils.packages import get_excluded_provider_folders,
get_suspended_provider_folders
from airflow_breeze.utils.path_utils import AIRFLOW_SOURCES_ROOT
@@ -59,7 +59,9 @@ def verify_an_image(
env["DOCKER_IMAGE"] = image_name
if slim_image:
env["TEST_SLIM_IMAGE"] = "true"
- with create_temp_venv(pip_version=PIP_VERSION,
requirements_file=DOCKER_TESTS_REQUIREMENTS) as py_exe:
+ with create_temp_venv(
+ pip_version=PIP_VERSION, uv_version=UV_VERSION,
requirements_file=DOCKER_TESTS_REQUIREMENTS
+ ) as py_exe:
command_result = run_command(
[py_exe, "-m", "pytest", str(test_path), *pytest_args,
*extra_pytest_args],
env=env,
diff --git a/dev/breeze/src/airflow_breeze/utils/virtualenv_utils.py
b/dev/breeze/src/airflow_breeze/utils/virtualenv_utils.py
index 0288e49b909..3c6a175a0fc 100644
--- a/dev/breeze/src/airflow_breeze/utils/virtualenv_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/virtualenv_utils.py
@@ -23,6 +23,7 @@ import tempfile
from pathlib import Path
from typing import Generator
+from airflow_breeze.utils.cache import check_if_cache_exists
from airflow_breeze.utils.console import get_console
from airflow_breeze.utils.run_utils import run_command
@@ -31,10 +32,15 @@ def create_pip_command(python: str | Path) -> list[str]:
return [python.as_posix() if hasattr(python, "as_posix") else str(python),
"-m", "pip"]
+def create_uv_command(python: str | Path) -> list[str]:
+ return [python.as_posix() if hasattr(python, "as_posix") else str(python),
"-m", "uv", "pip"]
+
+
def create_venv(
venv_path: str | Path,
python: str | None = None,
pip_version: str | None = None,
+ uv_version: str | None = None,
requirements_file: str | Path | None = None,
) -> str:
venv_path = Path(venv_path).resolve().absolute()
@@ -53,10 +59,13 @@ def create_venv(
if not python_path.exists():
get_console().print(f"\n[errors]Python interpreter is not exist in
path {python_path}. Exiting!\n")
sys.exit(1)
- pip_command = create_pip_command(python_path)
+ if check_if_cache_exists("use_uv"):
+ command = create_uv_command(python_path)
+ else:
+ command = create_pip_command(python_path)
if pip_version:
result = run_command(
- [*pip_command, "install", f"pip=={pip_version}", "-q"],
+ [*command, "install", f"pip=={pip_version}", "-q"],
check=False,
capture_output=False,
text=True,
@@ -67,10 +76,23 @@ def create_venv(
f"{result.stdout}\n{result.stderr}"
)
sys.exit(result.returncode)
+ if uv_version:
+ result = run_command(
+ [*command, "install", f"uv=={uv_version}", "-q"],
+ check=False,
+ capture_output=False,
+ text=True,
+ )
+ if result.returncode != 0:
+ get_console().print(
+ f"[error]Error when installing uv in
{venv_path.as_posix()}[/]\n"
+ f"{result.stdout}\n{result.stderr}"
+ )
+ sys.exit(result.returncode)
if requirements_file:
requirements_file = Path(requirements_file).absolute().as_posix()
result = run_command(
- [*pip_command, "install", "-r", requirements_file, "-q"],
+ [*command, "install", "-r", requirements_file, "-q"],
check=True,
capture_output=False,
text=True,
@@ -88,6 +110,7 @@ def create_venv(
def create_temp_venv(
python: str | None = None,
pip_version: str | None = None,
+ uv_version: str | None = None,
requirements_file: str | Path | None = None,
prefix: str | None = None,
) -> Generator[str, None, None]:
@@ -96,5 +119,6 @@ def create_temp_venv(
Path(tmp_dir_name) / ".venv",
python=python,
pip_version=pip_version,
+ uv_version=uv_version,
requirements_file=requirements_file,
)
diff --git a/scripts/ci/install_breeze.sh b/scripts/ci/install_breeze.sh
index 5ffd604670b..aa5a3160060 100755
--- a/scripts/ci/install_breeze.sh
+++ b/scripts/ci/install_breeze.sh
@@ -25,7 +25,7 @@ if [[ ${PYTHON_VERSION=} != "" ]]; then
PYTHON_ARG="--python=$(which python"${PYTHON_VERSION}") "
fi
-python -m pip install --upgrade pip==24.0
+python -m pip install --upgrade pip==24.3.1
python -m pip install "pipx>=1.4.1"
python -m pipx uninstall apache-airflow-breeze >/dev/null 2>&1 || true
# shellcheck disable=SC2086
diff --git a/scripts/ci/pre_commit/update_installers.py
b/scripts/ci/pre_commit/update_installers.py
index a90e07d38c9..f55a937df0c 100755
--- a/scripts/ci/pre_commit/update_installers.py
+++ b/scripts/ci/pre_commit/update_installers.py
@@ -65,6 +65,7 @@ AIRFLOW_PIP_UPGRADE_PATTERN = re.compile(r"(python -m pip
install --upgrade pip=
AIRFLOW_UV_PATTERN = re.compile(r"(AIRFLOW_UV_VERSION=)([0-9.]+)")
AIRFLOW_UV_QUOTED_PATTERN = re.compile(r"(AIRFLOW_UV_VERSION = )(\"[0-9.]+\")")
+UV_QUOTED_PATTERN = re.compile(r"(UV_VERSION = )(\"[0-9.]+\")")
AIRFLOW_UV_DOC_PATTERN = re.compile(r"(\| *`AIRFLOW_UV_VERSION` *\|
*)(`[0-9.]+`)( *\|)")
UV_GREATER_PATTERN = re.compile(r'"(uv>=)([0-9]+)"')
@@ -118,11 +119,14 @@ if __name__ == "__main__":
new_content = replace_group_2_while_keeping_total_length(
AIRFLOW_UV_PATTERN, uv_version, new_content
)
+ new_content = replace_group_2_while_keeping_total_length(
+ UV_GREATER_PATTERN, uv_version, new_content
+ )
new_content = replace_group_2_while_keeping_total_length(
AIRFLOW_UV_QUOTED_PATTERN, f'"{uv_version}"', new_content
)
new_content = replace_group_2_while_keeping_total_length(
- UV_GREATER_PATTERN, uv_version, new_content
+ UV_QUOTED_PATTERN, f'"{uv_version}"', new_content
)
if new_content != file_content:
file.write_text(new_content)