This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/v3-1-test by this push:
new 840c74663b8 [v3-1-test] Breeze: Automatically set CHOKIDAR_USEPOLLING
for WSL users in --dev-mode (#57846) (#58080) (#58345)
840c74663b8 is described below
commit 840c74663b899b864d9fbcdc22c00990f517941f
Author: Jarek Potiuk <[email protected]>
AuthorDate: Sat Nov 15 16:51:30 2025 +0100
[v3-1-test] Breeze: Automatically set CHOKIDAR_USEPOLLING for WSL users in
--dev-mode (#57846) (#58080) (#58345)
* Docs: Add note for WSL users about CHOKIDAR_USEPOLLING for UI hot
reloading (#57846)
* Breeze: Automatically set CHOKIDAR_USEPOLLING for WSL users in --dev-mode
(#57846)
* Breeze: Automatically set CHOKIDAR_USEPOLLING for WSL users in --dev-mode
(#57846)
* Update dev/breeze/src/airflow_breeze/commands/developer_commands.py
---------
(cherry picked from commit e2f31e9835130175dc9e6e488224fcc153685c75)
Co-authored-by: Lohith M <[email protected]>
Co-authored-by: LIU ZHE YOU <[email protected]>
---
dev/breeze/doc/images/output_build-docs.svg | 2 +-
dev/breeze/doc/images/output_build-docs.txt | 2 +-
dev/breeze/doc/images/output_start-airflow.svg | 24 ++++++++++------
dev/breeze/doc/images/output_start-airflow.txt | 2 +-
.../airflow_breeze/commands/developer_commands.py | 33 ++++++++++++++++++++--
.../commands/developer_commands_config.py | 4 +--
6 files changed, 51 insertions(+), 16 deletions(-)
diff --git a/dev/breeze/doc/images/output_build-docs.svg
b/dev/breeze/doc/images/output_build-docs.svg
index c441908dd96..ee242c74903 100644
--- a/dev/breeze/doc/images/output_build-docs.svg
+++ b/dev/breeze/doc/images/output_build-docs.svg
@@ -262,7 +262,7 @@
</text><text class="breeze-build-docs-r5" x="0" y="996" textLength="12.2"
clip-path="url(#breeze-build-docs-line-40)">│</text><text
class="breeze-build-docs-r4" x="24.4" y="996" textLength="231.8"
clip-path="url(#breeze-build-docs-line-40)">--github-repository</text><text
class="breeze-build-docs-r6" x="292.8" y="996" textLength="24.4"
clip-path="url(#breeze-build-docs-line-40)">-g</text><text
class="breeze-build-docs-r1" x="341.6" y="996" textLength="585.6"
clip-path="url(#breeze-build- [...]
</text><text class="breeze-build-docs-r5" x="0" y="1020.4" textLength="12.2"
clip-path="url(#breeze-build-docs-line-41)">│</text><text
class="breeze-build-docs-r4" x="24.4" y="1020.4" textLength="109.8"
clip-path="url(#breeze-build-docs-line-41)">--builder</text><text
class="breeze-build-docs-r1" x="341.6" y="1020.4" textLength="756.4"
clip-path="url(#breeze-build-docs-line-41)">Buildx builder used to perform `docker buildx build` commands.</text><
[...]
</text><text class="breeze-build-docs-r5" x="0" y="1044.8" textLength="12.2"
clip-path="url(#breeze-build-docs-line-42)">│</text><text
class="breeze-build-docs-r5" x="341.6" y="1044.8" textLength="756.4"
clip-path="url(#breeze-build-docs-line-42)">[default: autodetect]                                    &#
[...]
-</text><text class="breeze-build-docs-r5" x="0" y="1069.2" textLength="12.2"
clip-path="url(#breeze-build-docs-line-43)">│</text><text
class="breeze-build-docs-r4" x="24.4" y="1069.2" textLength="244"
clip-path="url(#breeze-build-docs-line-43)">--distributions-list</text><text
class="breeze-build-docs-r1" x="341.6" y="1069.2" textLength="1098"
clip-path="url(#breeze-build-docs-line-43)">Optional, contains comma-separated list of package ids that ar
[...]
+</text><text class="breeze-build-docs-r5" x="0" y="1069.2" textLength="12.2"
clip-path="url(#breeze-build-docs-line-43)">│</text><text
class="breeze-build-docs-r4" x="24.4" y="1069.2" textLength="244"
clip-path="url(#breeze-build-docs-line-43)">--distributions-list</text><text
class="breeze-build-docs-r1" x="341.6" y="1069.2" textLength="1098"
clip-path="url(#breeze-build-docs-line-43)">Optional, contains space separated list of package ids that
[...]
</text><text class="breeze-build-docs-r5" x="0" y="1093.6" textLength="12.2"
clip-path="url(#breeze-build-docs-line-44)">│</text><text
class="breeze-build-docs-r1" x="341.6" y="1093.6" textLength="1098"
clip-path="url(#breeze-build-docs-line-44)">documentation building, and document publishing. It is an easier alternative to adding    </text><text
class="breeze-build-docs-r5" x="1451.8" y="1093.6" textLength="12.2 [...]
</text><text class="breeze-build-docs-r5" x="0" y="1118" textLength="12.2"
clip-path="url(#breeze-build-docs-line-45)">│</text><text
class="breeze-build-docs-r1" x="341.6" y="1118" textLength="1098"
clip-path="url(#breeze-build-docs-line-45)">individual packages as arguments to every command. This overrides the packages passed as  </text><text
class="breeze-build-docs-r5" x="1451.8" y="1118" textLength="12.2" clip-path
[...]
</text><text class="breeze-build-docs-r5" x="0" y="1142.4" textLength="12.2"
clip-path="url(#breeze-build-docs-line-46)">│</text><text
class="breeze-build-docs-r1" x="341.6" y="1142.4" textLength="1098"
clip-path="url(#breeze-build-docs-line-46)">arguments.                                       &
[...]
diff --git a/dev/breeze/doc/images/output_build-docs.txt
b/dev/breeze/doc/images/output_build-docs.txt
index e05839d9dff..7c465674b0f 100644
--- a/dev/breeze/doc/images/output_build-docs.txt
+++ b/dev/breeze/doc/images/output_build-docs.txt
@@ -1 +1 @@
-e0f17f59eae9cb8c4a5a66762a9ba990
+e85cc9911cbd648287a9b2b6e4291edd
diff --git a/dev/breeze/doc/images/output_start-airflow.svg
b/dev/breeze/doc/images/output_start-airflow.svg
index a7550f0bd01..0ae41ac2a1e 100644
--- a/dev/breeze/doc/images/output_start-airflow.svg
+++ b/dev/breeze/doc/images/output_start-airflow.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 3710.0"
xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 3758.7999999999997"
xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -43,7 +43,7 @@
<defs>
<clipPath id="breeze-start-airflow-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="3659.0" />
+ <rect x="0" y="0" width="1463.0" height="3707.7999999999997" />
</clipPath>
<clipPath id="breeze-start-airflow-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -492,9 +492,15 @@
<clipPath id="breeze-start-airflow-line-148">
<rect x="0" y="3612.7" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-start-airflow-line-149">
+ <rect x="0" y="3637.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-start-airflow-line-150">
+ <rect x="0" y="3661.5" 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="3708" rx="8"/><text
class="breeze-start-airflow-title" fill="#c5c8c6" text-anchor="middle" x="740"
y="27">Command: start-airflow</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="1480" height="3756.8" rx="8"/><text
class="breeze-start-airflow-title" fill="#c5c8c6" text-anchor="middle" x="740"
y="27">Command: start-airflow</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -649,11 +655,13 @@
</text><text class="breeze-start-airflow-r5" x="0" y="3484.8"
textLength="12.2" clip-path="url(#breeze-start-airflow-line-142)">│</text><text
class="breeze-start-airflow-r4" x="24.4" y="3484.8" textLength="122"
clip-path="url(#breeze-start-airflow-line-142)">--debugger</text><text
class="breeze-start-airflow-r1" x="195.2" y="3484.8" textLength="597.8"
clip-path="url(#breeze-start-airflow-line-142)">Debugger to use for debugging Airflow components.</text><tex
[...]
</text><text class="breeze-start-airflow-r5" x="0" y="3509.2"
textLength="1464"
clip-path="url(#breeze-start-airflow-line-143)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-start-airflow-r1" x="1464" y="3509.2" textLength="12.2"
clip-path="url(#breeze-start-airflow-line-143)">
</text><text class="breeze-start-airflow-r5" x="0" y="3533.6"
textLength="24.4"
clip-path="url(#breeze-start-airflow-line-144)">╭─</text><text
class="breeze-start-airflow-r5" x="24.4" y="3533.6" textLength="195.2"
clip-path="url(#breeze-start-airflow-line-144)"> Common options </text><text
class="breeze-start-airflow-r5" x="219.6" y="3533.6" textLength="1220"
clip-path="url(#breeze-start-airflow-line-144)">───────────────────────────────────────────────────────────────────
[...]
-</text><text class="breeze-start-airflow-r5" x="0" y="3558" textLength="12.2"
clip-path="url(#breeze-start-airflow-line-145)">│</text><text
class="breeze-start-airflow-r4" x="24.4" y="3558" textLength="97.6"
clip-path="url(#breeze-start-airflow-line-145)">--answer</text><text
class="breeze-start-airflow-r6" x="158.6" y="3558" textLength="24.4"
clip-path="url(#breeze-start-airflow-line-145)">-a</text><text
class="breeze-start-airflow-r1" x="207.4" y="3558" textLength="317.2"
clip-path="ur [...]
-</text><text class="breeze-start-airflow-r5" x="0" y="3582.4"
textLength="12.2" clip-path="url(#breeze-start-airflow-line-146)">│</text><text
class="breeze-start-airflow-r4" x="24.4" y="3582.4" textLength="109.8"
clip-path="url(#breeze-start-airflow-line-146)">--dry-run</text><text
class="breeze-start-airflow-r6" x="158.6" y="3582.4" textLength="24.4"
clip-path="url(#breeze-start-airflow-line-146)">-D</text><text
class="breeze-start-airflow-r1" x="207.4" y="3582.4" textLength="719.8" cli
[...]
-</text><text class="breeze-start-airflow-r5" x="0" y="3606.8"
textLength="12.2" clip-path="url(#breeze-start-airflow-line-147)">│</text><text
class="breeze-start-airflow-r4" x="24.4" y="3606.8" textLength="109.8"
clip-path="url(#breeze-start-airflow-line-147)">--verbose</text><text
class="breeze-start-airflow-r6" x="158.6" y="3606.8" textLength="24.4"
clip-path="url(#breeze-start-airflow-line-147)">-v</text><text
class="breeze-start-airflow-r1" x="207.4" y="3606.8" textLength="585.6" cli
[...]
-</text><text class="breeze-start-airflow-r5" x="0" y="3631.2"
textLength="12.2" clip-path="url(#breeze-start-airflow-line-148)">│</text><text
class="breeze-start-airflow-r4" x="24.4" y="3631.2" textLength="73.2"
clip-path="url(#breeze-start-airflow-line-148)">--help</text><text
class="breeze-start-airflow-r6" x="158.6" y="3631.2" textLength="24.4"
clip-path="url(#breeze-start-airflow-line-148)">-h</text><text
class="breeze-start-airflow-r1" x="207.4" y="3631.2" textLength="329.4" clip-pa
[...]
-</text><text class="breeze-start-airflow-r5" x="0" y="3655.6"
textLength="1464"
clip-path="url(#breeze-start-airflow-line-149)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-start-airflow-r1" x="1464" y="3655.6" textLength="12.2"
clip-path="url(#breeze-start-airflow-line-149)">
+</text><text class="breeze-start-airflow-r5" x="0" y="3558" textLength="12.2"
clip-path="url(#breeze-start-airflow-line-145)">│</text><text
class="breeze-start-airflow-r4" x="24.4" y="3558" textLength="219.6"
clip-path="url(#breeze-start-airflow-line-145)">--create-all-roles</text><text
class="breeze-start-airflow-r1" x="317.2" y="3558" textLength="1122.4"
clip-path="url(#breeze-start-airflow-line-145)">Creates all user roles for testing with FabAuthMan
[...]
+</text><text class="breeze-start-airflow-r5" x="0" y="3582.4"
textLength="12.2" clip-path="url(#breeze-start-airflow-line-146)">│</text><text
class="breeze-start-airflow-r1" x="317.2" y="3582.4" textLength="1122.4"
clip-path="url(#breeze-start-airflow-line-146)">SimpleAuthManager always has all roles available.                          
[...]
+</text><text class="breeze-start-airflow-r5" x="0" y="3606.8"
textLength="12.2" clip-path="url(#breeze-start-airflow-line-147)">│</text><text
class="breeze-start-airflow-r4" x="24.4" y="3606.8" textLength="97.6"
clip-path="url(#breeze-start-airflow-line-147)">--answer</text><text
class="breeze-start-airflow-r6" x="268.4" y="3606.8" textLength="24.4"
clip-path="url(#breeze-start-airflow-line-147)">-a</text><text
class="breeze-start-airflow-r1" x="317.2" y="3606.8" textLength="317.2" clip-
[...]
+</text><text class="breeze-start-airflow-r5" x="0" y="3631.2"
textLength="12.2" clip-path="url(#breeze-start-airflow-line-148)">│</text><text
class="breeze-start-airflow-r4" x="24.4" y="3631.2" textLength="109.8"
clip-path="url(#breeze-start-airflow-line-148)">--dry-run</text><text
class="breeze-start-airflow-r6" x="268.4" y="3631.2" textLength="24.4"
clip-path="url(#breeze-start-airflow-line-148)">-D</text><text
class="breeze-start-airflow-r1" x="317.2" y="3631.2" textLength="719.8" cli
[...]
+</text><text class="breeze-start-airflow-r5" x="0" y="3655.6"
textLength="12.2" clip-path="url(#breeze-start-airflow-line-149)">│</text><text
class="breeze-start-airflow-r4" x="24.4" y="3655.6" textLength="109.8"
clip-path="url(#breeze-start-airflow-line-149)">--verbose</text><text
class="breeze-start-airflow-r6" x="268.4" y="3655.6" textLength="24.4"
clip-path="url(#breeze-start-airflow-line-149)">-v</text><text
class="breeze-start-airflow-r1" x="317.2" y="3655.6" textLength="585.6" cli
[...]
+</text><text class="breeze-start-airflow-r5" x="0" y="3680" textLength="12.2"
clip-path="url(#breeze-start-airflow-line-150)">│</text><text
class="breeze-start-airflow-r4" x="24.4" y="3680" textLength="73.2"
clip-path="url(#breeze-start-airflow-line-150)">--help</text><text
class="breeze-start-airflow-r6" x="268.4" y="3680" textLength="24.4"
clip-path="url(#breeze-start-airflow-line-150)">-h</text><text
class="breeze-start-airflow-r1" x="317.2" y="3680" textLength="329.4"
clip-path="url( [...]
+</text><text class="breeze-start-airflow-r5" x="0" y="3704.4"
textLength="1464"
clip-path="url(#breeze-start-airflow-line-151)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-start-airflow-r1" x="1464" y="3704.4" textLength="12.2"
clip-path="url(#breeze-start-airflow-line-151)">
</text>
</g>
</g>
diff --git a/dev/breeze/doc/images/output_start-airflow.txt
b/dev/breeze/doc/images/output_start-airflow.txt
index 2714baae8ce..f3298f2b357 100644
--- a/dev/breeze/doc/images/output_start-airflow.txt
+++ b/dev/breeze/doc/images/output_start-airflow.txt
@@ -1 +1 @@
-8f41f727793efa5a6fad7382632b47e9
+a28b9a18b9364f00ca72c9906a1acf6b
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands.py
b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
index dd7ab42c529..d248f95e6f2 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
@@ -17,6 +17,7 @@
from __future__ import annotations
import os
+import platform
import re
import shlex
import shutil
@@ -129,6 +130,18 @@ from airflow_breeze.utils.shared_options import
get_dry_run, get_verbose, set_fo
CELERY_INTEGRATION = "celery"
+def is_wsl() -> bool:
+ """Detect if we are running inside WSL."""
+ if platform.system().lower() != "linux":
+ return False
+ try:
+ with open("/proc/version") as f:
+ version_info = f.read().lower()
+ return "microsoft" in version_info or "wsl" in version_info
+ except FileNotFoundError:
+ return False
+
+
def _determine_constraint_branch_used(airflow_constraints_reference: str,
use_airflow_version: str | None):
"""
Determine which constraints reference to use.
@@ -503,6 +516,12 @@ option_executor_start_airflow = click.option(
"(mutually exclusive with --skip-assets-compilation).",
is_flag=True,
)
[email protected](
+ "--create-all-roles",
+ help="Creates all user roles for testing with FabAuthManager (viewer,
user, op, admin). "
+ "SimpleAuthManager always has all roles available.",
+ is_flag=True,
+)
@click.argument("extra-args", nargs=-1, type=click.UNPROCESSED)
@option_airflow_constraints_location
@option_airflow_constraints_mode_ci
@@ -565,6 +584,7 @@ def start_airflow(
debug_components: tuple[str, ...],
debugger: str,
dev_mode: bool,
+ create_all_roles: bool,
docker_host: str | None,
executor: str | None,
extra_args: tuple,
@@ -603,6 +623,14 @@ def start_airflow(
"[warning]You cannot skip asset compilation in dev mode! Assets
will be compiled!"
)
skip_assets_compilation = True
+
+ # Automatically enable file polling for hot reloading under WSL
+ if dev_mode and is_wsl():
+ os.environ["CHOKIDAR_USEPOLLING"] = "true"
+ get_console().print(
+ "[info]Detected WSL environment. Automatically enabled
CHOKIDAR_USEPOLLING for hot reloading."
+ )
+
if use_airflow_version is None and not skip_assets_compilation:
# Now with the /ui project, lets only do a static build of /www and
focus on the /ui
run_compile_ui_assets(dev=dev_mode, run_in_background=True,
force_clean=False)
@@ -637,6 +665,7 @@ def start_airflow(
debugger=debugger,
db_reset=db_reset,
dev_mode=dev_mode,
+ create_all_roles=create_all_roles,
docker_host=docker_host,
executor=executor,
extra_args=extra_args,
@@ -718,7 +747,7 @@ def start_airflow(
"--distributions-list",
envvar="DISTRIBUTIONS_LIST",
type=str,
- help="Optional, contains comma-separated list of package ids that are
processed for documentation "
+ help="Optional, contains space separated list of package ids that are
processed for documentation "
"building, and document publishing. It is an easier alternative to adding
individual packages as"
" arguments to every command. This overrides the packages passed as
arguments.",
)
@@ -777,7 +806,7 @@ def build_docs(
f"\n[info]Populating provider list from DISTRIBUTIONS_LIST env as
{distributions_list}"
)
# Override doc_packages with values from DISTRIBUTIONS_LIST
- docs_list_as_tuple = tuple(distributions_list.split(","))
+ docs_list_as_tuple = tuple(distributions_list.split(" "))
if doc_packages and docs_list_as_tuple:
get_console().print(
f"[warning]Both package arguments and --distributions-list /
DISTRIBUTIONS_LIST passed. "
diff --git
a/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
b/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
index 67ed4a81504..20696a4a760 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
@@ -285,9 +285,7 @@ DEVELOPER_PARAMETERS: dict[str, list[dict[str, str |
list[str]]]] = {
},
{
"name": "Other options",
- "options": [
- "--forward-credentials",
- ],
+ "options": ["--forward-credentials", "--create-all-roles"],
},
{
"name": "Debugging options",