This is an automated email from the ASF dual-hosted git repository.

ephraimanierobi pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit 533684534c84288a6f5dc20cd06037fa4daa7e74
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&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;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:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
-</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,&#160;contains&#160;comma-separated&#160;list&#160;of&#160;package&#160;ids&#160;that&#160;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,&#160;contains&#160;space&#160;separated&#160;list&#160;of&#160;package&#160;ids&#160;that&#1
 [...]
 </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&#160;building,&#160;and&#160;document&#160;publishing.&#160;It&#160;is&#160;an&#160;easier&#160;alternative&#160;to&#160;adding&#160;&#160;&#160;&#160;</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&#160;packages&#160;as&#160;arguments&#160;to&#160;every&#160;command.&#160;This&#160;overrides&#160;the&#160;packages&#160;passed&#160;as&#160;&#160;</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.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
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:&#160;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:&#160;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&#160;to&#160;use&#160;for&#160;debugging&#160;Airflow&#160;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)">&#160;Common&#160;options&#160;</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&#160;all&#160;user&#160;roles&#160;for&#160;testing&#160;with&#160;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&#160;always&#160;has&#160;all&#160;roles&#160;available.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
+</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",

Reply via email to