This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch v3-0-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/v3-0-test by this push:
new f4db9ec5a2f [v3-0-test] Do not run FAB pre-commits in release branches
(#50875) (#50886)
f4db9ec5a2f is described below
commit f4db9ec5a2fa09a705d0085d6e1794065fd4c1f3
Author: Jarek Potiuk <[email protected]>
AuthorDate: Wed May 21 08:39:15 2025 -0400
[v3-0-test] Do not run FAB pre-commits in release branches (#50875) (#50886)
The openapi generation scripts were run together for FAB and main
openapi from core - however we do not want to re-run those scripts at
all in non-main branch - i.e. branch we prepare providers from.
This PR splits the openapi script and removes all fab pre-commits from
running in non-main branch.
(cherry picked from commit 611270abdf3fe4806fbe5b5efc33780ded58c7dd)
---
.pre-commit-config.yaml | 10 +-
contributing-docs/08_static_code_checks.rst | 2 +
dev/breeze/doc/images/output-commands.svg | 341 ++++++++++++++++++++-
dev/breeze/doc/images/output_static-checks.svg | 6 +-
dev/breeze/doc/images/output_static-checks.txt | 2 +-
dev/breeze/src/airflow_breeze/pre_commit_ids.py | 1 +
.../src/airflow_breeze/utils/selective_checks.py | 2 +
dev/breeze/tests/test_selective_checks.py | 3 +-
...astapi_api_spec.py => generate_openapi_spec.py} | 2 +-
...pi_api_spec.py => generate_openapi_spec_fab.py} | 2 +-
scripts/in_container/in_container_utils.py | 51 +++
...pi_api_spec.py => run_generate_openapi_spec.py} | 78 +----
.../run_generate_openapi_spec_fab.py} | 29 +-
13 files changed, 445 insertions(+), 84 deletions(-)
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 6d9321e4eb7..910d32f753c 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1331,7 +1331,15 @@ repos:
- id: generate-openapi-spec
name: Generate the FastAPI API spec
language: python
- entry: ./scripts/ci/pre_commit/update_fastapi_api_spec.py
+ entry: ./scripts/ci/pre_commit/generate_openapi_spec.py
+ pass_filenames: false
+ files:
^airflow-core/src/airflow/api_fastapi/.*\.py$|^airflow-core/src/airflow/api_fastapi/auth/managers/simple/.*\.py$|^providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/.*\.py$
+ exclude: ^airflow-core/src/airflow/api_fastapi/execution_api/.*
+ additional_dependencies: ['rich>=12.4.4',
'openapi-spec-validator>=0.7.1']
+ - id: generate-openapi-spec-fab
+ name: Generate the FastAPI API spec for FAB
+ language: python
+ entry: ./scripts/ci/pre_commit/generate_openapi_spec_fab.py
pass_filenames: false
files:
^airflow-core/src/airflow/api_fastapi/.*\.py$|^airflow-core/src/airflow/api_fastapi/auth/managers/simple/.*\.py$|^providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/.*\.py$
exclude: ^airflow-core/src/airflow/api_fastapi/execution_api/.*
diff --git a/contributing-docs/08_static_code_checks.rst
b/contributing-docs/08_static_code_checks.rst
index 452a94d26f2..9e4a4fbd5a5 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -275,6 +275,8 @@ require Breeze Docker image to be built locally.
+-----------------------------------------------------------+--------------------------------------------------------+---------+
| generate-openapi-spec | Generate the
FastAPI API spec | * |
+-----------------------------------------------------------+--------------------------------------------------------+---------+
+| generate-openapi-spec-fab | Generate the
FastAPI API spec for FAB | * |
++-----------------------------------------------------------+--------------------------------------------------------+---------+
| generate-pypi-readme | Generate PyPI
README | |
+-----------------------------------------------------------+--------------------------------------------------------+---------+
| generate-tasksdk-datamodels | Generate
Datamodels for TaskSDK client | * |
diff --git a/dev/breeze/doc/images/output-commands.svg
b/dev/breeze/doc/images/output-commands.svg
index 1a4becaa2d6..2d9668f5a21 100644
--- a/dev/breeze/doc/images/output-commands.svg
+++ b/dev/breeze/doc/images/output-commands.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 123.19999999999999"
xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2148.4"
xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -36,11 +36,14 @@
.breeze-help-r2 { fill: #d0b344 }
.breeze-help-r3 { fill: #c5c8c6;font-weight: bold }
.breeze-help-r4 { fill: #68a0b3;font-weight: bold }
+.breeze-help-r5 { fill: #868887 }
+.breeze-help-r6 { fill: #98a84b;font-weight: bold }
+.breeze-help-r7 { fill: #8d7b39 }
</style>
<defs>
<clipPath id="breeze-help-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="72.19999999999999" />
+ <rect x="0" y="0" width="1463.0" height="2097.4" />
</clipPath>
<clipPath id="breeze-help-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -48,9 +51,258 @@
<clipPath id="breeze-help-line-1">
<rect x="0" y="25.9" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-help-line-2">
+ <rect x="0" y="50.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-3">
+ <rect x="0" y="74.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-4">
+ <rect x="0" y="99.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-5">
+ <rect x="0" y="123.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-6">
+ <rect x="0" y="147.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-7">
+ <rect x="0" y="172.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-8">
+ <rect x="0" y="196.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-9">
+ <rect x="0" y="221.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-10">
+ <rect x="0" y="245.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-11">
+ <rect x="0" y="269.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-12">
+ <rect x="0" y="294.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-13">
+ <rect x="0" y="318.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-14">
+ <rect x="0" y="343.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-15">
+ <rect x="0" y="367.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-16">
+ <rect x="0" y="391.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-17">
+ <rect x="0" y="416.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-18">
+ <rect x="0" y="440.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-19">
+ <rect x="0" y="465.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-20">
+ <rect x="0" y="489.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-21">
+ <rect x="0" y="513.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-22">
+ <rect x="0" y="538.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-23">
+ <rect x="0" y="562.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-24">
+ <rect x="0" y="587.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-25">
+ <rect x="0" y="611.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-26">
+ <rect x="0" y="635.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-27">
+ <rect x="0" y="660.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-28">
+ <rect x="0" y="684.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-29">
+ <rect x="0" y="709.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-30">
+ <rect x="0" y="733.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-31">
+ <rect x="0" y="757.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-32">
+ <rect x="0" y="782.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-33">
+ <rect x="0" y="806.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-34">
+ <rect x="0" y="831.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-35">
+ <rect x="0" y="855.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-36">
+ <rect x="0" y="879.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-37">
+ <rect x="0" y="904.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-38">
+ <rect x="0" y="928.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-39">
+ <rect x="0" y="953.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-40">
+ <rect x="0" y="977.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-41">
+ <rect x="0" y="1001.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-42">
+ <rect x="0" y="1026.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-43">
+ <rect x="0" y="1050.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-44">
+ <rect x="0" y="1075.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-45">
+ <rect x="0" y="1099.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-46">
+ <rect x="0" y="1123.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-47">
+ <rect x="0" y="1148.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-48">
+ <rect x="0" y="1172.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-49">
+ <rect x="0" y="1197.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-50">
+ <rect x="0" y="1221.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-51">
+ <rect x="0" y="1245.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-52">
+ <rect x="0" y="1270.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-53">
+ <rect x="0" y="1294.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-54">
+ <rect x="0" y="1319.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-55">
+ <rect x="0" y="1343.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-56">
+ <rect x="0" y="1367.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-57">
+ <rect x="0" y="1392.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-58">
+ <rect x="0" y="1416.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-59">
+ <rect x="0" y="1441.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-60">
+ <rect x="0" y="1465.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-61">
+ <rect x="0" y="1489.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-62">
+ <rect x="0" y="1514.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-63">
+ <rect x="0" y="1538.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-64">
+ <rect x="0" y="1563.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-65">
+ <rect x="0" y="1587.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-66">
+ <rect x="0" y="1611.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-67">
+ <rect x="0" y="1636.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-68">
+ <rect x="0" y="1660.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-69">
+ <rect x="0" y="1685.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-70">
+ <rect x="0" y="1709.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-71">
+ <rect x="0" y="1733.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-72">
+ <rect x="0" y="1758.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-73">
+ <rect x="0" y="1782.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-74">
+ <rect x="0" y="1807.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-75">
+ <rect x="0" y="1831.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-76">
+ <rect x="0" y="1855.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-77">
+ <rect x="0" y="1880.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-78">
+ <rect x="0" y="1904.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-79">
+ <rect x="0" y="1929.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-80">
+ <rect x="0" y="1953.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-81">
+ <rect x="0" y="1977.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-82">
+ <rect x="0" y="2002.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-83">
+ <rect x="0" y="2026.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-help-line-84">
+ <rect x="0" y="2051.1" width="1464" height="24.65"/>
+ </clipPath>
</defs>
- <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="1480" height="121.2" rx="8"/><text class="breeze-help-title"
fill="#c5c8c6" text-anchor="middle" x="740" y="27">Breeze commands</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="1480" height="2146.4" rx="8"/><text
class="breeze-help-title" fill="#c5c8c6" text-anchor="middle" x="740"
y="27">Breeze commands</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -63,6 +315,89 @@
<text class="breeze-help-r1" x="1464" y="20" textLength="12.2"
clip-path="url(#breeze-help-line-0)">
</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="97.6"
clip-path="url(#breeze-help-line-4)">--python</text><text
class="breeze-help-r6" x="719.8" y="117.6" textLength="24.4"
clip-path="url(#breeze-help-line-4)">-p</text><text class="breeze-help-r1"
x="768.6" y="117.6" textLength="671"
clip-path="url(#breeze-help-line-4)">Python major/minor version u
[...]
+</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-r1"
x="768.6" y="142" textLength="671"
clip-path="url(#breeze-help-line-5)">images.                                             &
[...]
+</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-r7"
x="768.6" y="166.4" textLength="671"
clip-path="url(#breeze-help-line-6)">(>3.9< | 3.10 | 3.11 | 3.12)                           </text><text
class="breeze-help-r5" x="1451.8" y [...]
+</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-r5"
x="768.6" y="190.8" textLength="671"
clip-path="url(#breeze-help-line-7)">[default: 3.9]                                         </text><t
[...]
+</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-r4"
x="24.4" y="215.2" textLength="158.6"
clip-path="url(#breeze-help-line-8)">--integration</text><text
class="breeze-help-r1" x="768.6" y="215.2" textLength="671"
clip-path="url(#breeze-help-line-8)">Core Integrations to enable when running (can be more  </text><text
class="breeze-help-r5" x="1451.8 [...]
+</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-r1"
x="768.6" y="239.6" textLength="671"
clip-path="url(#breeze-help-line-9)">than one).                                           &
[...]
+</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-r7"
x="768.6" y="264" textLength="671"
clip-path="url(#breeze-help-line-10)">(all | all-testable | cassandra | celery | drill |     </text><text
class="breeze-help-r5" x="1451.8" y="264" textLength="12.2"
clip-path="url(#breeze-help-line-10)">│</text><text class="breeze-help-r1" x="
[...]
+</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-r7"
x="768.6" y="288.4" textLength="671"
clip-path="url(#breeze-help-line-11)">kafka | kerberos | keycloak | mongo | mssql |          </text><text
class="breeze-help-r5" x="1451.8" y="288.4" textLength="12.2"
clip-path="url(#breeze-help-line-11)">│</text>< [...]
+</text><text class="breeze-help-r5" x="0" y="312.8" textLength="12.2"
clip-path="url(#breeze-help-line-12)">│</text><text class="breeze-help-r7"
x="768.6" y="312.8" textLength="671"
clip-path="url(#breeze-help-line-12)">openlineage | otel | pinot | qdrant | redis | statsd | </text><text
class="breeze-help-r5" x="1451.8" y="312.8" textLength="12.2"
clip-path="url(#breeze-help-line-12)">│</text><text class="breeze-help-r1"
x="1464 [...]
+</text><text class="breeze-help-r5" x="0" y="337.2" textLength="12.2"
clip-path="url(#breeze-help-line-13)">│</text><text class="breeze-help-r7"
x="768.6" y="337.2" textLength="671"
clip-path="url(#breeze-help-line-13)">trino | ydb)                                         
[...]
+</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="317.2"
clip-path="url(#breeze-help-line-14)">--standalone-dag-processor</text><text
class="breeze-help-r1" x="341.6" y="361.6" textLength="12.2"
clip-path="url(#breeze-help-line-14)">/</text><text class="breeze-help-r4"
x="353.8" y="361.6" textLength="341.6"
clip-path="url(#breeze-help-line-14)">--no-standalone-dag [...]
+</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-r4"
x="24.4" y="386" textLength="12.2"
clip-path="url(#breeze-help-line-15)">r</text><text class="breeze-help-r1"
x="768.6" y="386" textLength="671"
clip-path="url(#breeze-help-line-15)">(required for Airflow 3).                     
[...]
+</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-r5"
x="768.6" y="410.4" textLength="671"
clip-path="url(#breeze-help-line-16)">[default: standalone-dag-processor]                    </text><text
class="breeze-help-r5" x="1451.8" y="410.4" textLength="12.2"
clip-path="url(#breeze-help-line-16)" [...]
+</text><text class="breeze-help-r5" x="0" y="434.8" textLength="1464"
clip-path="url(#breeze-help-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="434.8" textLength="12.2"
clip-path="url(#breeze-help-line-17)">
+</text><text class="breeze-help-r5" x="0" y="459.2" textLength="24.4"
clip-path="url(#breeze-help-line-18)">╭─</text><text class="breeze-help-r5"
x="24.4" y="459.2" textLength="463.6"
clip-path="url(#breeze-help-line-18)"> Docker Compose selection and cleanup </text><text
class="breeze-help-r5" x="488" y="459.2" textLength="951.6"
clip-path="url(#breeze-help-line-18)">──────────────────────────────────────────────────────────────────────────────</text><text
[...]
+</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="170.8"
clip-path="url(#breeze-help-line-19)">--project-name</text><text
class="breeze-help-r1" x="244" y="483.6" textLength="1195.6"
clip-path="url(#breeze-help-line-19)">Name of the docker-compose project to bring down. The `docker-compose` is for legacy&
[...]
+</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="512.4"
clip-path="url(#breeze-help-line-20)">project name and you can use `breeze down </text><text
class="breeze-help-r4" x="756.4" y="508" textLength="170.8"
clip-path="url(#breeze-help-line-20)">--project-name</text><text
class="breeze-help-r1" x="927.2" y="508" textLength="512 [...]
+</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-r1"
x="244" y="532.4" textLength="1195.6"
clip-path="url(#breeze-help-line-21)">belonging to it.                                         
[...]
+</text><text class="breeze-help-r5" x="0" y="556.8" textLength="12.2"
clip-path="url(#breeze-help-line-22)">│</text><text class="breeze-help-r7"
x="244" y="556.8" textLength="1195.6"
clip-path="url(#breeze-help-line-22)">(breeze | pre-commit | docker-compose)                                   
[...]
+</text><text class="breeze-help-r5" x="0" y="581.2" textLength="12.2"
clip-path="url(#breeze-help-line-23)">│</text><text class="breeze-help-r5"
x="244" y="581.2" textLength="1195.6"
clip-path="url(#breeze-help-line-23)">[default: breeze]                                         
[...]
+</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="158.6"
clip-path="url(#breeze-help-line-24)">--docker-host</text><text
class="breeze-help-r1" x="244" y="605.6" textLength="915"
clip-path="url(#breeze-help-line-24)">Optional - docker host to use when running docker commands. When set, the `</text><t
[...]
+</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="244" y="630" textLength="1195.6"
clip-path="url(#breeze-help-line-25)">ignored when building images.                                      
[...]
+</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-r7"
x="244" y="654.4" textLength="1195.6"
clip-path="url(#breeze-help-line-26)">(TEXT)                                            &
[...]
+</text><text class="breeze-help-r5" x="0" y="678.8" textLength="1464"
clip-path="url(#breeze-help-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="678.8" textLength="12.2"
clip-path="url(#breeze-help-line-27)">
+</text><text class="breeze-help-r5" x="0" y="703.2" textLength="24.4"
clip-path="url(#breeze-help-line-28)">╭─</text><text class="breeze-help-r5"
x="24.4" y="703.2" textLength="122"
clip-path="url(#breeze-help-line-28)"> Database </text><text
class="breeze-help-r5" x="146.4" y="703.2" textLength="1293.2"
clip-path="url(#breeze-help-line-28)">──────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
class="breeze-help- [...]
+</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="109.8"
clip-path="url(#breeze-help-line-29)">--backend</text><text
class="breeze-help-r6" x="268.4" y="727.6" textLength="24.4"
clip-path="url(#breeze-help-line-29)">-b</text><text class="breeze-help-r1"
x="488" y="727.6" textLength="951.6"
clip-path="url(#breeze-help-line-29)">Database backend to us
[...]
+</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-r1"
x="488" y="752" textLength="951.6"
clip-path="url(#breeze-help-line-30)">invalid database configuration, meaning there will be no database available,  </text><text
class="breeze-help-r5" x="1451.8" y="752" textLength="12.2"
clip-path="url(#breeze-help-line-30)">│</text><text class="breeze-help [...]
+</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-r1"
x="488" y="776.4" textLength="951.6"
clip-path="url(#breeze-help-line-31)">and any attempts to connect to the Airflow database will fail.                </text><text
class="breeze-help-r5" x="1451.8" y="776.4" textLen [...]
+</text><text class="breeze-help-r5" x="0" y="800.8" textLength="12.2"
clip-path="url(#breeze-help-line-32)">│</text><text class="breeze-help-r7"
x="488" y="800.8" textLength="951.6"
clip-path="url(#breeze-help-line-32)">(>sqlite< | mysql | postgres | none)                                 &#
[...]
+</text><text class="breeze-help-r5" x="0" y="825.2" textLength="12.2"
clip-path="url(#breeze-help-line-33)">│</text><text class="breeze-help-r5"
x="488" y="825.2" textLength="951.6"
clip-path="url(#breeze-help-line-33)">[default: sqlite]                                         
[...]
+</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="219.6"
clip-path="url(#breeze-help-line-34)">--postgres-version</text><text
class="breeze-help-r6" x="268.4" y="849.6" textLength="24.4"
clip-path="url(#breeze-help-line-34)">-P</text><text class="breeze-help-r1"
x="488" y="849.6" textLength="305"
clip-path="url(#breeze-help-line-34)">Version of Postgres& [...]
+</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="183"
clip-path="url(#breeze-help-line-35)">--mysql-version</text><text
class="breeze-help-r6" x="268.4" y="874" textLength="24.4"
clip-path="url(#breeze-help-line-35)">-M</text><text class="breeze-help-r1"
x="488" y="874" textLength="268.4"
clip-path="url(#breeze-help-line-35)">Version of MySQL used.</te
[...]
+</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-r4"
x="24.4" y="898.4" textLength="122"
clip-path="url(#breeze-help-line-36)">--db-reset</text><text
class="breeze-help-r6" x="268.4" y="898.4" textLength="24.4"
clip-path="url(#breeze-help-line-36)">-d</text><text class="breeze-help-r1"
x="292.8" y="898.4" textLength="12.2"
clip-path="url(#breeze-help-line-36)">/</text><text class="breeze-help-r4"
[...]
+</text><text class="breeze-help-r5" x="0" y="922.8" textLength="1464"
clip-path="url(#breeze-help-line-37)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="922.8" textLength="12.2"
clip-path="url(#breeze-help-line-37)">
+</text><text class="breeze-help-r5" x="0" y="947.2" textLength="24.4"
clip-path="url(#breeze-help-line-38)">╭─</text><text class="breeze-help-r5"
x="24.4" y="947.2" textLength="488"
clip-path="url(#breeze-help-line-38)"> Build CI image (before entering shell) </text><text
class="breeze-help-r5" x="512.4" y="947.2" textLength="927.2"
clip-path="url(#breeze-help-line-38)">────────────────────────────────────────────────────────────────────────────</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-r4"
x="24.4" y="971.6" textLength="231.8"
clip-path="url(#breeze-help-line-39)">--github-repository</text><text
class="breeze-help-r6" x="292.8" y="971.6" textLength="24.4"
clip-path="url(#breeze-help-line-39)">-g</text><text class="breeze-help-r1"
x="341.6" y="971.6" textLength="585.6"
clip-path="url(#breeze-help-line-39)">GitHub repository [...]
+</text><text class="breeze-help-r5" x="0" y="996" textLength="12.2"
clip-path="url(#breeze-help-line-40)">│</text><text class="breeze-help-r4"
x="24.4" y="996" textLength="109.8"
clip-path="url(#breeze-help-line-40)">--builder</text><text
class="breeze-help-r1" x="341.6" y="996" textLength="756.4"
clip-path="url(#breeze-help-line-40)">Buildx builder used to perform `docker buildx build` commands.</text><text
class="breeze-help-r7" x="1110.2" y="996 [...]
+</text><text class="breeze-help-r5" x="0" y="1020.4" textLength="12.2"
clip-path="url(#breeze-help-line-41)">│</text><text class="breeze-help-r5"
x="341.6" y="1020.4" textLength="756.4"
clip-path="url(#breeze-help-line-41)">[default: autodetect]                                        &#
[...]
+</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="97.6"
clip-path="url(#breeze-help-line-42)">--use-uv</text><text
class="breeze-help-r1" x="122" y="1044.8" textLength="12.2"
clip-path="url(#breeze-help-line-42)">/</text><text class="breeze-help-r4"
x="134.2" y="1044.8" textLength="134.2"
clip-path="url(#breeze-help-line-42)">--no-use-uv</text><text class="breez [...]
+</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="207.4"
clip-path="url(#breeze-help-line-43)">--uv-http-timeout</text><text
class="breeze-help-r1" x="341.6" y="1069.2" textLength="829.6"
clip-path="url(#breeze-help-line-43)">Timeout for requests that UV makes (only used in case of UV builds).</text><te
[...]
+</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-r5"
x="341.6" y="1093.6" textLength="829.6"
clip-path="url(#breeze-help-line-44)">[default: 300; x>=1]                                       &
[...]
+</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="183"
clip-path="url(#breeze-help-line-46)"> Other options </text><text
class="breeze-help-r5" x="207.4" y="1142.4" textLength="1232.2"
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="256.2"
clip-path="url(#breeze-help-line-47)">--forward-credentials</text><text
class="breeze-help-r6" x="305" y="1166.8" textLength="24.4"
clip-path="url(#breeze-help-line-47)">-f</text><text class="breeze-help-r1"
x="353.8" y="1166.8" textLength="634.4"
clip-path="url(#breeze-help-line-47)">Forward local [...]
+</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="122"
clip-path="url(#breeze-help-line-48)">--max-time</text><text
class="breeze-help-r1" x="353.8" y="1191.2" textLength="1049.2"
clip-path="url(#breeze-help-line-48)">Maximum time that the command should take - if it takes longer, the command 
[...]
+</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-r7"
x="353.8" y="1215.6" textLength="1049.2"
clip-path="url(#breeze-help-line-49)">(INTEGER RANGE)                                         &
[...]
+</text><text class="breeze-help-r5" x="0" y="1240" textLength="1464"
clip-path="url(#breeze-help-line-50)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="1240" textLength="12.2"
clip-path="url(#breeze-help-line-50)">
+</text><text class="breeze-help-r5" x="0" y="1264.4" textLength="24.4"
clip-path="url(#breeze-help-line-51)">╭─</text><text class="breeze-help-r5"
x="24.4" y="1264.4" textLength="195.2"
clip-path="url(#breeze-help-line-51)"> Common options </text><text
class="breeze-help-r5" x="219.6" y="1264.4" textLength="1220"
clip-path="url(#breeze-help-line-51)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
class="bree [...]
+</text><text class="breeze-help-r5" x="0" y="1288.8" textLength="12.2"
clip-path="url(#breeze-help-line-52)">│</text><text class="breeze-help-r4"
x="24.4" y="1288.8" textLength="97.6"
clip-path="url(#breeze-help-line-52)">--answer</text><text
class="breeze-help-r6" x="158.6" y="1288.8" textLength="24.4"
clip-path="url(#breeze-help-line-52)">-a</text><text class="breeze-help-r1"
x="207.4" y="1288.8" textLength="317.2"
clip-path="url(#breeze-help-line-52)">Force answer to qu [...]
+</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="109.8"
clip-path="url(#breeze-help-line-53)">--dry-run</text><text
class="breeze-help-r6" x="158.6" y="1313.2" textLength="24.4"
clip-path="url(#breeze-help-line-53)">-D</text><text class="breeze-help-r1"
x="207.4" y="1313.2" textLength="719.8"
clip-path="url(#breeze-help-line-53)">If dry-run is se [...]
+</text><text class="breeze-help-r5" x="0" y="1337.6" textLength="12.2"
clip-path="url(#breeze-help-line-54)">│</text><text class="breeze-help-r4"
x="24.4" y="1337.6" textLength="109.8"
clip-path="url(#breeze-help-line-54)">--verbose</text><text
class="breeze-help-r6" x="158.6" y="1337.6" textLength="24.4"
clip-path="url(#breeze-help-line-54)">-v</text><text class="breeze-help-r1"
x="207.4" y="1337.6" textLength="585.6"
clip-path="url(#breeze-help-line-54)">Print verbose informa [...]
+</text><text class="breeze-help-r5" x="0" y="1362" textLength="12.2"
clip-path="url(#breeze-help-line-55)">│</text><text class="breeze-help-r4"
x="24.4" y="1362" textLength="73.2"
clip-path="url(#breeze-help-line-55)">--help</text><text class="breeze-help-r6"
x="158.6" y="1362" textLength="24.4"
clip-path="url(#breeze-help-line-55)">-h</text><text class="breeze-help-r1"
x="207.4" y="1362" textLength="329.4"
clip-path="url(#breeze-help-line-55)">Show this message and e
[...]
+</text><text class="breeze-help-r5" x="0" y="1386.4" textLength="1464"
clip-path="url(#breeze-help-line-56)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="1386.4" textLength="12.2"
clip-path="url(#breeze-help-line-56)">
+</text><text class="breeze-help-r5" x="0" y="1410.8" textLength="24.4"
clip-path="url(#breeze-help-line-57)">╭─</text><text class="breeze-help-r5"
x="24.4" y="1410.8" textLength="244"
clip-path="url(#breeze-help-line-57)"> Developer commands </text><text
class="breeze-help-r5" x="268.4" y="1410.8" textLength="1171.2"
clip-path="url(#breeze-help-line-57)">────────────────────────────────────────────────────────────────────────────────────────────────</text><text
class="bree [...]
+</text><text class="breeze-help-r5" x="0" y="1435.2" textLength="12.2"
clip-path="url(#breeze-help-line-58)">│</text><text class="breeze-help-r4"
x="24.4" y="1435.2" textLength="280.6"
clip-path="url(#breeze-help-line-58)">start-airflow          </text><text
class="breeze-help-r1" x="329.4" y="1435.2" textLength="1110.2"
clip-path="url(#breeze-help-line-58)">Enter breeze environment and starts all Airflow
[...]
+</text><text class="breeze-help-r5" x="0" y="1459.6" textLength="12.2"
clip-path="url(#breeze-help-line-59)">│</text><text class="breeze-help-r1"
x="329.4" y="1459.6" textLength="1110.2"
clip-path="url(#breeze-help-line-59)">assets if contents of www directory changed.                                &
[...]
+</text><text class="breeze-help-r5" x="0" y="1484" textLength="12.2"
clip-path="url(#breeze-help-line-60)">│</text><text class="breeze-help-r4"
x="24.4" y="1484" textLength="280.6"
clip-path="url(#breeze-help-line-60)">static-checks          </text><text
class="breeze-help-r1" x="329.4" y="1484" textLength="1110.2"
clip-path="url(#breeze-help-line-60)">Run static checks.          
[...]
+</text><text class="breeze-help-r5" x="0" y="1508.4" textLength="12.2"
clip-path="url(#breeze-help-line-61)">│</text><text class="breeze-help-r4"
x="24.4" y="1508.4" textLength="280.6"
clip-path="url(#breeze-help-line-61)">build-docs             </text><text
class="breeze-help-r1" x="329.4" y="1508.4" textLength="1110.2"
clip-path="url(#breeze-help-line-61)">Build documents.       
[...]
+</text><text class="breeze-help-r5" x="0" y="1532.8" textLength="12.2"
clip-path="url(#breeze-help-line-62)">│</text><text class="breeze-help-r4"
x="24.4" y="1532.8" textLength="280.6"
clip-path="url(#breeze-help-line-62)">down                   </text><text
class="breeze-help-r1" x="329.4" y="1532.8" textLength="1110.2"
clip-path="url(#breeze-help-line-62)">Stop running breeze e [...]
+</text><text class="breeze-help-r5" x="0" y="1557.2" textLength="12.2"
clip-path="url(#breeze-help-line-63)">│</text><text class="breeze-help-r4"
x="24.4" y="1557.2" textLength="280.6"
clip-path="url(#breeze-help-line-63)">shell                  </text><text
class="breeze-help-r1" x="329.4" y="1557.2" textLength="1110.2"
clip-path="url(#breeze-help-line-63)">Enter breeze environment. 
[...]
+</text><text class="breeze-help-r5" x="0" y="1581.6" textLength="12.2"
clip-path="url(#breeze-help-line-64)">│</text><text class="breeze-help-r4"
x="24.4" y="1581.6" textLength="280.6"
clip-path="url(#breeze-help-line-64)">exec                   </text><text
class="breeze-help-r1" x="329.4" y="1581.6" textLength="1110.2"
clip-path="url(#breeze-help-line-64)">Joins the interactive  [...]
+</text><text class="breeze-help-r5" x="0" y="1606" textLength="12.2"
clip-path="url(#breeze-help-line-65)">│</text><text class="breeze-help-r4"
x="24.4" y="1606" textLength="280.6"
clip-path="url(#breeze-help-line-65)">compile-ui-assets      </text><text
class="breeze-help-r1" x="329.4" y="1606" textLength="1110.2"
clip-path="url(#breeze-help-line-65)">Compiles ui assets.             
[...]
+</text><text class="breeze-help-r5" x="0" y="1630.4" textLength="12.2"
clip-path="url(#breeze-help-line-66)">│</text><text class="breeze-help-r4"
x="24.4" y="1630.4" textLength="280.6"
clip-path="url(#breeze-help-line-66)">cleanup                </text><text
class="breeze-help-r1" x="329.4" y="1630.4" textLength="1110.2"
clip-path="url(#breeze-help-line-66)">Cleans the cache of parameters,
[...]
+</text><text class="breeze-help-r5" x="0" y="1654.8" textLength="12.2"
clip-path="url(#breeze-help-line-67)">│</text><text class="breeze-help-r4"
x="24.4" y="1654.8" textLength="280.6"
clip-path="url(#breeze-help-line-67)">generate-migration-file</text><text
class="breeze-help-r1" x="329.4" y="1654.8" textLength="1110.2"
clip-path="url(#breeze-help-line-67)">Autogenerate the alembic migration file for the ORM changes.     &
[...]
+</text><text class="breeze-help-r5" x="0" y="1679.2" textLength="12.2"
clip-path="url(#breeze-help-line-68)">│</text><text class="breeze-help-r4"
x="24.4" y="1679.2" textLength="280.6"
clip-path="url(#breeze-help-line-68)">doctor                 </text><text
class="breeze-help-r1" x="329.4" y="1679.2" textLength="1110.2"
clip-path="url(#breeze-help-line-68)">Auto-healing of breeze  &#
[...]
+</text><text class="breeze-help-r5" x="0" y="1703.6" textLength="1464"
clip-path="url(#breeze-help-line-69)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="1703.6" textLength="12.2"
clip-path="url(#breeze-help-line-69)">
+</text><text class="breeze-help-r5" x="0" y="1728" textLength="24.4"
clip-path="url(#breeze-help-line-70)">╭─</text><text class="breeze-help-r5"
x="24.4" y="1728" textLength="219.6"
clip-path="url(#breeze-help-line-70)"> Testing commands </text><text
class="breeze-help-r5" x="244" y="1728" textLength="1195.6"
clip-path="url(#breeze-help-line-70)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text
class="breeze-hel [...]
+</text><text class="breeze-help-r5" x="0" y="1752.4" textLength="12.2"
clip-path="url(#breeze-help-line-71)">│</text><text class="breeze-help-r4"
x="24.4" y="1752.4" textLength="183"
clip-path="url(#breeze-help-line-71)">testing        </text><text
class="breeze-help-r1" x="231.8" y="1752.4" textLength="1207.8"
clip-path="url(#breeze-help-line-71)">Tools that developers can use to run tests    
[...]
+</text><text class="breeze-help-r5" x="0" y="1776.8" textLength="12.2"
clip-path="url(#breeze-help-line-72)">│</text><text class="breeze-help-r4"
x="24.4" y="1776.8" textLength="183"
clip-path="url(#breeze-help-line-72)">k8s            </text><text
class="breeze-help-r1" x="231.8" y="1776.8" textLength="1207.8"
clip-path="url(#breeze-help-line-72)">Tools that developers use to run Kubernetes te
[...]
+</text><text class="breeze-help-r5" x="0" y="1801.2" textLength="1464"
clip-path="url(#breeze-help-line-73)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="1801.2" textLength="12.2"
clip-path="url(#breeze-help-line-73)">
+</text><text class="breeze-help-r5" x="0" y="1825.6" textLength="24.4"
clip-path="url(#breeze-help-line-74)">╭─</text><text class="breeze-help-r5"
x="24.4" y="1825.6" textLength="195.2"
clip-path="url(#breeze-help-line-74)"> Image commands </text><text
class="breeze-help-r5" x="219.6" y="1825.6" textLength="1220"
clip-path="url(#breeze-help-line-74)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
class="bree [...]
+</text><text class="breeze-help-r5" x="0" y="1850" textLength="12.2"
clip-path="url(#breeze-help-line-75)">│</text><text class="breeze-help-r4"
x="24.4" y="1850" textLength="207.4"
clip-path="url(#breeze-help-line-75)">ci-image         </text><text
class="breeze-help-r1" x="256.2" y="1850" textLength="1183.4"
clip-path="url(#breeze-help-line-75)">Tools that developers can use to manually manage CI i
[...]
+</text><text class="breeze-help-r5" x="0" y="1874.4" textLength="12.2"
clip-path="url(#breeze-help-line-76)">│</text><text class="breeze-help-r4"
x="24.4" y="1874.4" textLength="207.4"
clip-path="url(#breeze-help-line-76)">prod-image       </text><text
class="breeze-help-r1" x="256.2" y="1874.4" textLength="1183.4"
clip-path="url(#breeze-help-line-76)">Tools that developers can use to manually manage PROD ima
[...]
+</text><text class="breeze-help-r5" x="0" y="1898.8" textLength="1464"
clip-path="url(#breeze-help-line-77)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="1898.8" textLength="12.2"
clip-path="url(#breeze-help-line-77)">
+</text><text class="breeze-help-r5" x="0" y="1923.2" textLength="24.4"
clip-path="url(#breeze-help-line-78)">╭─</text><text class="breeze-help-r5"
x="24.4" y="1923.2" textLength="353.8"
clip-path="url(#breeze-help-line-78)"> Release management commands </text><text
class="breeze-help-r5" x="378.2" y="1923.2" textLength="1061.4"
clip-path="url(#breeze-help-line-78)">───────────────────────────────────────────────────────────────────────────────────────</text><text
clas [...]
+</text><text class="breeze-help-r5" x="0" y="1947.6" textLength="12.2"
clip-path="url(#breeze-help-line-79)">│</text><text class="breeze-help-r4"
x="24.4" y="1947.6" textLength="280.6"
clip-path="url(#breeze-help-line-79)">release-management     </text><text
class="breeze-help-r1" x="329.4" y="1947.6" textLength="1110.2"
clip-path="url(#breeze-help-line-79)">Tools that release managers can use to prepare and manage
[...]
+</text><text class="breeze-help-r5" x="0" y="1972" textLength="12.2"
clip-path="url(#breeze-help-line-80)">│</text><text class="breeze-help-r4"
x="24.4" y="1972" textLength="280.6"
clip-path="url(#breeze-help-line-80)">sbom                   </text><text
class="breeze-help-r1" x="329.4" y="1972" textLength="1110.2"
clip-path="url(#breeze-help-line-80)">Tools that release managers
[...]
+</text><text class="breeze-help-r5" x="0" y="1996.4" textLength="1464"
clip-path="url(#breeze-help-line-81)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="1996.4" textLength="12.2"
clip-path="url(#breeze-help-line-81)">
+</text><text class="breeze-help-r5" x="0" y="2020.8" textLength="24.4"
clip-path="url(#breeze-help-line-82)">╭─</text><text class="breeze-help-r5"
x="24.4" y="2020.8" textLength="195.2"
clip-path="url(#breeze-help-line-82)"> Other commands </text><text
class="breeze-help-r5" x="219.6" y="2020.8" textLength="1220"
clip-path="url(#breeze-help-line-82)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
class="bree [...]
+</text><text class="breeze-help-r5" x="0" y="2045.2" textLength="12.2"
clip-path="url(#breeze-help-line-83)">│</text><text class="breeze-help-r4"
x="24.4" y="2045.2" textLength="122"
clip-path="url(#breeze-help-line-83)">setup     </text><text
class="breeze-help-r1" x="170.8" y="2045.2" textLength="1268.8"
clip-path="url(#breeze-help-line-83)">Tools that developers can use to configure Breeze      &
[...]
+</text><text class="breeze-help-r5" x="0" y="2069.6" textLength="12.2"
clip-path="url(#breeze-help-line-84)">│</text><text class="breeze-help-r4"
x="24.4" y="2069.6" textLength="122"
clip-path="url(#breeze-help-line-84)">ci        </text><text
class="breeze-help-r1" x="170.8" y="2069.6" textLength="1268.8"
clip-path="url(#breeze-help-line-84)">Tools that CI workflows use to cleanup/manage CI environment 
[...]
+</text><text class="breeze-help-r5" x="0" y="2094" textLength="1464"
clip-path="url(#breeze-help-line-85)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-help-r1" x="1464" y="2094" textLength="12.2"
clip-path="url(#breeze-help-line-85)">
</text>
</g>
</g>
diff --git a/dev/breeze/doc/images/output_static-checks.svg
b/dev/breeze/doc/images/output_static-checks.svg
index b2aab5fd8eb..4dd66c187ff 100644
--- a/dev/breeze/doc/images/output_static-checks.svg
+++ b/dev/breeze/doc/images/output_static-checks.svg
@@ -357,9 +357,9 @@
</text><text class="breeze-static-checks-r5" x="0" y="971.6" textLength="12.2"
clip-path="url(#breeze-static-checks-line-39)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="971.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-39)">codespell | compile-fab-assets | compile-ui-assets | compile-ui-assets-dev |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="971.6" textLength="12.2"
clip-path [...]
</text><text class="breeze-static-checks-r5" x="0" y="996" textLength="12.2"
clip-path="url(#breeze-static-checks-line-40)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="996" textLength="988.2"
clip-path="url(#breeze-static-checks-line-40)">create-missing-init-py-files-tests | debug-statements | detect-private-key |     </text><text
class="breeze-static-checks-r5" x="1451.8" y="996" textLength="12.2"
clip-path="url(#breeze-st [...]
</text><text class="breeze-static-checks-r5" x="0" y="1020.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1020.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-41)">doctoc | end-of-file-fixer | fix-encoding-pragma | flynt |                       <
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1044.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1044.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-42)">generate-airflow-diagrams | generate-openapi-spec | generate-pypi-readme |       </text><text
class="breeze-static-checks-r5" x="1451.8" y="1044.8" textLength="12.2" clip-p
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1069.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-43)">generate-tasksdk-datamodels | generate-volumes-for-sources | identity |          </text><text
class="breeze-static-checks-r5" x="1451.8" y="1069.2" textLengt [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1093.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1093.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-44)">insert-license | kubeconform | lint-chart-schema | lint-dockerfile |             </text><text
class="breeze-static-checks-r5" x="145 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1044.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1044.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-42)">generate-airflow-diagrams | generate-openapi-spec | generate-openapi-spec-fab |  </text><text
class="breeze-static-checks-r5" x="1451.8" y="1044.8" textLength="12.2"
clip-path="url(#breeze-static-c [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1069.2"
textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2"
clip-path="url(#breeze-static-checks-line-43)">generate-pypi-readme | generate-tasksdk-datamodels | generate-volumes-for-sources</text><text
class="breeze-static-checks-r5" x="1451.8" y="1069.2" textLength="12.2"
clip-path="url(#breeze-static-checks-line-43)" [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1093.6"
textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1093.6" textLength="988.2"
clip-path="url(#breeze-static-checks-line-44)">| identity | insert-license | kubeconform | lint-chart-schema | lint-dockerfile |</text><text
class="breeze-static-checks-r5" x="1451.8" y="1093.6" textLength="12.2"
clip-path="url(# [...]
</text><text class="breeze-static-checks-r5" x="0" y="1118" textLength="12.2"
clip-path="url(#breeze-static-checks-line-45)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1118" textLength="988.2"
clip-path="url(#breeze-static-checks-line-45)">lint-helm-chart | lint-json-schema | lint-markdown | mixed-line-ending |         </text><text
class="breeze-static-checks-r5" x="1451.8" y="1118" textLength [...]
</text><text class="breeze-static-checks-r5" x="0" y="1142.4"
textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1142.4" textLength="988.2"
clip-path="url(#breeze-static-checks-line-46)">mypy-airflow-core | mypy-airflow-ctl | mypy-dev | mypy-devel-common |            </text><text
class="breeze-static-checks-r5" x="1451.8" [...]
</text><text class="breeze-static-checks-r5" x="0" y="1166.8"
textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text
class="breeze-static-checks-r7" x="451.4" y="1166.8" textLength="988.2"
clip-path="url(#breeze-static-checks-line-47)">mypy-providers | mypy-task-sdk | pretty-format-json | pylint | python-no-log-warn</text><text
class="breeze-static-checks-r5" x="1451.8" y="1166.8" textLength="12.2"
clip-path="url(#breeze-sta [...]
diff --git a/dev/breeze/doc/images/output_static-checks.txt
b/dev/breeze/doc/images/output_static-checks.txt
index 5ba1d4efcba..3f8a96af044 100644
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ b/dev/breeze/doc/images/output_static-checks.txt
@@ -1 +1 @@
-7f396adad6b3df5ee04aeef4fc62f6ad
+f90752bd76c0617a4f6e9eb1d208e4f5
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index a62664c814f..acaa592acd5 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -101,6 +101,7 @@ PRE_COMMIT_LIST = [
"flynt",
"generate-airflow-diagrams",
"generate-openapi-spec",
+ "generate-openapi-spec-fab",
"generate-pypi-readme",
"generate-tasksdk-datamodels",
"generate-volumes-for-sources",
diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index ecf4b72d13d..6bdb8cf7450 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -1182,6 +1182,8 @@ class SelectiveChecks:
# Skip those tests on all "release" branches
pre_commits_to_skip.update(
(
+ "compile-fab-assets",
+ "generate-openapi-spec-fab",
"check-airflow-provider-compatibility",
"check-extra-packages-references",
"check-provider-yaml-valid",
diff --git a/dev/breeze/tests/test_selective_checks.py
b/dev/breeze/tests/test_selective_checks.py
index 11997e9fdfd..2b90a3e2d9e 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -162,7 +162,8 @@ ALL_SKIPPED_COMMITS_IF_NOT_IMPORTANT_FILES_CHANGED = (
All_SKIPPED_COMMITS_IF_NON_MAIN_BRANCH = (
"check-airflow-provider-compatibility,check-extra-packages-references,check-provider-yaml-valid,"
- "identity,lint-helm-chart,mypy-airflow-core,mypy-airflow-ctl,mypy-dev,"
+ "compile-fab-assets,generate-openapi-spec-fab,identity,"
+ "lint-helm-chart,mypy-airflow-core,mypy-airflow-ctl,mypy-dev,"
"mypy-devel-common,mypy-providers,mypy-task-sdk,validate-operators-init"
)
diff --git a/scripts/ci/pre_commit/update_fastapi_api_spec.py
b/scripts/ci/pre_commit/generate_openapi_spec.py
similarity index 93%
copy from scripts/ci/pre_commit/update_fastapi_api_spec.py
copy to scripts/ci/pre_commit/generate_openapi_spec.py
index 3d7731c7ef2..1dc3aa6f8c7 100755
--- a/scripts/ci/pre_commit/update_fastapi_api_spec.py
+++ b/scripts/ci/pre_commit/generate_openapi_spec.py
@@ -30,7 +30,7 @@ from common_precommit_utils import (
initialize_breeze_precommit(__name__, __file__)
cmd_result = run_command_via_breeze_shell(
- ["python3",
"/opt/airflow/scripts/in_container/run_update_fastapi_api_spec.py"],
+ ["python3",
"/opt/airflow/scripts/in_container/run_generate_openapi_spec.py"],
backend="postgres",
skip_environment_initialization=False,
)
diff --git a/scripts/ci/pre_commit/update_fastapi_api_spec.py
b/scripts/ci/pre_commit/generate_openapi_spec_fab.py
similarity index 93%
copy from scripts/ci/pre_commit/update_fastapi_api_spec.py
copy to scripts/ci/pre_commit/generate_openapi_spec_fab.py
index 3d7731c7ef2..5e087eca8b5 100755
--- a/scripts/ci/pre_commit/update_fastapi_api_spec.py
+++ b/scripts/ci/pre_commit/generate_openapi_spec_fab.py
@@ -30,7 +30,7 @@ from common_precommit_utils import (
initialize_breeze_precommit(__name__, __file__)
cmd_result = run_command_via_breeze_shell(
- ["python3",
"/opt/airflow/scripts/in_container/run_update_fastapi_api_spec.py"],
+ ["python3",
"/opt/airflow/scripts/in_container/run_generate_openapi_spec_fab.py"],
backend="postgres",
skip_environment_initialization=False,
)
diff --git a/scripts/in_container/in_container_utils.py
b/scripts/in_container/in_container_utils.py
index ad19e7bfa1a..2de8bd82646 100644
--- a/scripts/in_container/in_container_utils.py
+++ b/scripts/in_container/in_container_utils.py
@@ -18,13 +18,19 @@ from __future__ import annotations
import shlex
import subprocess
+import sys
import textwrap
from contextlib import contextmanager
from pathlib import Path
+from typing import TYPE_CHECKING
import rich_click as click
from rich.console import Console
+if TYPE_CHECKING:
+ from fastapi import FastAPI
+
+
click.rich_click.COLOR_SYSTEM = "standard"
console = Console(width=400, color_system="standard")
@@ -56,3 +62,48 @@ def run_command(cmd: list[str], github_actions: bool,
**kwargs) -> subprocess.Co
console.print(f"[red]Command failed: {' '.join([shlex.quote(entry) for
entry in cmd])}[/]")
console.print("[red]Please unfold the above group and to investigate
the issue[/]")
return result
+
+
+def generate_openapi_file(app: FastAPI, file_path: Path, prefix: str = "",
only_ui: bool = False):
+ import yaml
+ from fastapi.openapi.utils import get_openapi
+ from fastapi.routing import APIRoute
+
+ if only_ui:
+ for route in app.routes:
+ if not isinstance(route, APIRoute):
+ continue
+ route.include_in_schema = route.path.startswith("/ui/")
+
+ with file_path.open("w+") as f:
+ openapi_schema = get_openapi(
+ title=app.title,
+ version=app.version,
+ openapi_version=app.openapi_version,
+ description=app.description,
+ routes=app.routes,
+ )
+ if prefix:
+ openapi_schema["paths"] = {
+ prefix + path: path_dict for path, path_dict in
openapi_schema["paths"].items()
+ }
+ yaml.dump(
+ openapi_schema,
+ f,
+ default_flow_style=False,
+ sort_keys=False,
+ )
+
+
+def validate_openapi_file(file_path: Path) -> bool:
+ import yaml
+ from openapi_spec_validator import validate_spec
+
+ with file_path.open() as f:
+ openapi_schema = yaml.safe_load(f)
+ try:
+ validate_spec(openapi_schema)
+ except Exception as e:
+ print(f"[ERROR] OpenAPI validation failed for {file_path}: {e}",
file=sys.stderr)
+ sys.exit(1)
+ return True
diff --git a/scripts/in_container/run_update_fastapi_api_spec.py
b/scripts/in_container/run_generate_openapi_spec.py
similarity index 50%
rename from scripts/in_container/run_update_fastapi_api_spec.py
rename to scripts/in_container/run_generate_openapi_spec.py
index 1dd692280c4..1caea62e67d 100755
--- a/scripts/in_container/run_update_fastapi_api_spec.py
+++ b/scripts/in_container/run_generate_openapi_spec.py
@@ -17,24 +17,17 @@
# under the License.
from __future__ import annotations
+import os
import sys
from pathlib import Path
-from typing import TYPE_CHECKING
-
-import yaml
-from fastapi.openapi.utils import get_openapi
-from fastapi.routing import APIRoute
-from openapi_spec_validator import validate_spec
from airflow.api_fastapi.app import AUTH_MANAGER_FASTAPI_APP_PREFIX, create_app
from airflow.api_fastapi.auth.managers.simple import __file__ as
SIMPLE_AUTH_MANAGER_PATH
from airflow.api_fastapi.auth.managers.simple.simple_auth_manager import
SimpleAuthManager
from airflow.api_fastapi.core_api import __file__ as CORE_API_PATH
-from airflow.providers.fab.auth_manager.api_fastapi import __file__ as
FAB_AUTH_MANAGER_API_PATH
-from airflow.providers.fab.auth_manager.fab_auth_manager import FabAuthManager
-if TYPE_CHECKING:
- from fastapi import FastAPI
+sys.path.insert(0, str(Path(__file__).parent.resolve()))
+from in_container_utils import console, generate_openapi_file,
validate_openapi_file
OPENAPI_SPEC_FILE = Path(CORE_API_PATH).parent / "openapi" /
"v1-rest-api-generated.yaml"
# We need a "combined" spec file to generate the UI code with, but we don't
want to include this in the repo
@@ -43,68 +36,31 @@ OPENAPI_UI_SPEC_FILE = Path(CORE_API_PATH).parent /
"openapi" / "_private_ui.yam
SIMPLE_AUTH_MANAGER_OPENAPI_SPEC_FILE = (
Path(SIMPLE_AUTH_MANAGER_PATH).parent / "openapi" /
"v1-simple-auth-manager-generated.yaml"
)
-FAB_AUTH_MANAGER_OPENAPI_SPEC_FILE = (
- Path(FAB_AUTH_MANAGER_API_PATH).parent / "openapi" /
"v1-fab-auth-manager-generated.yaml"
-)
-
-
-def generate_file(app: FastAPI, file_path: Path, prefix: str = "", only_ui:
bool = False):
- if only_ui:
- for route in app.routes:
- if not isinstance(route, APIRoute):
- continue
- route.include_in_schema = route.path.startswith("/ui/")
-
- with file_path.open("w+") as f:
- openapi_schema = get_openapi(
- title=app.title,
- version=app.version,
- openapi_version=app.openapi_version,
- description=app.description,
- routes=app.routes,
- )
- if prefix:
- openapi_schema["paths"] = {
- prefix + path: path_dict for path, path_dict in
openapi_schema["paths"].items()
- }
- yaml.dump(
- openapi_schema,
- f,
- default_flow_style=False,
- sort_keys=False,
- )
-
-
-def validate_openapi_file(file_path: Path) -> bool:
- with file_path.open() as f:
- openapi_schema = yaml.safe_load(f)
- try:
- validate_spec(openapi_schema)
- except Exception as e:
- print(f"[ERROR] OpenAPI validation failed for {file_path}: {e}",
file=sys.stderr)
- sys.exit(1)
- return True
-
# Generate main application openapi spec
-generate_file(app=create_app(), file_path=OPENAPI_SPEC_FILE)
+# Set the auth manager as SAM. No need to use another one to generate fastapi
spec
+os.environ["AIRFLOW__CORE__AUTH_MANAGER"] = (
+
"airflow.api_fastapi.auth.managers.simple.simple_auth_manager.SimpleAuthManager"
+)
+generate_openapi_file(app=create_app(), file_path=OPENAPI_SPEC_FILE)
validate_openapi_file(OPENAPI_SPEC_FILE)
-generate_file(app=create_app(), file_path=OPENAPI_UI_SPEC_FILE, only_ui=True)
+generate_openapi_file(app=create_app(), file_path=OPENAPI_UI_SPEC_FILE,
only_ui=True)
validate_openapi_file(OPENAPI_UI_SPEC_FILE)
# Generate simple auth manager openapi spec
simple_auth_manager_app = SimpleAuthManager().get_fastapi_app()
if simple_auth_manager_app:
- generate_file(
+ generate_openapi_file(
app=simple_auth_manager_app,
file_path=SIMPLE_AUTH_MANAGER_OPENAPI_SPEC_FILE,
prefix=AUTH_MANAGER_FASTAPI_APP_PREFIX,
)
validate_openapi_file(SIMPLE_AUTH_MANAGER_OPENAPI_SPEC_FILE)
-
-# Generate FAB auth manager openapi spec
-fab_auth_manager_app = FabAuthManager().get_fastapi_app()
-if fab_auth_manager_app:
- generate_file(app=fab_auth_manager_app,
file_path=FAB_AUTH_MANAGER_OPENAPI_SPEC_FILE)
- validate_openapi_file(FAB_AUTH_MANAGER_OPENAPI_SPEC_FILE)
+ console.print("[green]OpenAPI spec for SimpleAuthManager generated
successfully.[/]")
+else:
+ console.print(
+ "[red]Failed to generate OpenAPI spec for SimpleAuthManager. "
+ "The app is not available or the generation failed.[/]"
+ )
+ sys.exit(1)
diff --git a/scripts/ci/pre_commit/update_fastapi_api_spec.py
b/scripts/in_container/run_generate_openapi_spec_fab.py
similarity index 50%
rename from scripts/ci/pre_commit/update_fastapi_api_spec.py
rename to scripts/in_container/run_generate_openapi_spec_fab.py
index 3d7731c7ef2..271b1a593e9 100755
--- a/scripts/ci/pre_commit/update_fastapi_api_spec.py
+++ b/scripts/in_container/run_generate_openapi_spec_fab.py
@@ -20,19 +20,24 @@ from __future__ import annotations
import sys
from pathlib import Path
-sys.path.insert(0, str(Path(__file__).parent.resolve()))
-from common_precommit_utils import (
- initialize_breeze_precommit,
- run_command_via_breeze_shell,
- validate_cmd_result,
-)
+from airflow.providers.fab.auth_manager.api_fastapi import __file__ as
FAB_AUTH_MANAGER_API_PATH
+from airflow.providers.fab.auth_manager.fab_auth_manager import FabAuthManager
+from airflow.providers_manager import ProvidersManager
-initialize_breeze_precommit(__name__, __file__)
+sys.path.insert(0, str(Path(__file__).parent.resolve()))
+from in_container_utils import console, generate_openapi_file,
validate_openapi_file
-cmd_result = run_command_via_breeze_shell(
- ["python3",
"/opt/airflow/scripts/in_container/run_update_fastapi_api_spec.py"],
- backend="postgres",
- skip_environment_initialization=False,
+FAB_AUTH_MANAGER_OPENAPI_SPEC_FILE = (
+ Path(FAB_AUTH_MANAGER_API_PATH).parent / "openapi" /
"v2-fab-auth-manager-generated.yaml"
)
-validate_cmd_result(cmd_result)
+ProvidersManager().initialize_providers_configuration()
+
+# Generate FAB auth manager openapi spec
+fab_auth_manager_app = FabAuthManager().get_fastapi_app()
+if fab_auth_manager_app:
+ generate_openapi_file(app=fab_auth_manager_app,
file_path=FAB_AUTH_MANAGER_OPENAPI_SPEC_FILE)
+ validate_openapi_file(FAB_AUTH_MANAGER_OPENAPI_SPEC_FILE)
+else:
+ console.print("[red]FAB auth manager app not found. Skipping OpenAPI spec
generation.[/]")
+ sys.exit(1)