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

potiuk pushed a commit to branch v2-3-test
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit ef8ec274b3265687c40f2f7a3c846eb0af412bcc
Author: Jarek Potiuk <[email protected]>
AuthorDate: Fri Jul 29 13:24:56 2022 +0200

    Adjust limits when constructing cross-provider dependencies (#25364)
    
    When we are constructing cross-provider dependencies, we should adjust
    the limits to account for some apache-airflow packages that are not yet
    released.
    
    The adjustment is to add ".*" after the version number when
    dependency is lower-bound with `>=`. It's not explicitly mentioned in
    PEP 440 - it is only mentioned there that it works for
    equality, but since `>=` is also part of `equal` it also
    works there.
    
    Example is a common-sql package that might be limited to `>=1.1.0`
    in google provider as part of the change, but it might not yet be released
    as it is being released together with the package it is needed by.
    
    We  need to adjust the version whenever in our providers we
    refer to other providers with >= install clause because  `--pre`
    flag in `pip` only allows to install direct pre-release (and
    development) dependencies but it does not modify requirements of
    those package to also include pre-releases as transitive dependency.
    
    Also, we need to remove the limits in `devel` dependencies because
    the packages are not yet released at the moment we use those
    dependencies, so the limits in `devel` should be removed, allowing
    the developers to install Airflow without those devel packages.
    
    Also a bug was found that would prevent to generate
    the dependencies in case provider.yaml file only changed (bad
    specification of .pre-commit include)
    
    (cherry picked from commit 5e423f5fc026a37793ec617a94533aa82a30b4ea)
---
 .pre-commit-config.yaml                            |  37 +---
 STATIC_CODE_CHECKS.rst                             |   9 +-
 dev/breeze/src/airflow_breeze/pre_commit_ids.py    |   3 +-
 dev/provider_packages/prepare_provider_packages.py | 128 ++++++------
 images/breeze/output-commands-hash.txt             |   2 +-
 images/breeze/output-static-checks.svg             | 224 ++++++++++-----------
 setup.py                                           |  19 +-
 7 files changed, 207 insertions(+), 215 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index af8736c3e7..0142eb6995 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -19,6 +19,7 @@ default_stages: [commit, push]
 default_language_version:
   # force all unspecified python hooks to run python3
   python: python3
+  node: 18.6.0
 minimum_pre_commit_version: "2.0.0"
 repos:
   - repo: meta
@@ -343,7 +344,7 @@ repos:
         # This check might be removed when min-airflow-version in providers is 
2.2
       - id: check-airflow-2-2-compatibility
         name: Check that providers are 2.2 compatible.
-        entry: ./scripts/ci/pre_commit/pre_commit_check_2_1_compatibility.py
+        entry: ./scripts/ci/pre_commit/pre_commit_check_2_2_compatibility.py
         language: python
         pass_filenames: true
         files: ^airflow/providers/.*\.py$
@@ -352,7 +353,7 @@ repos:
         name: Update output of breeze commands in BREEZE.rst
         entry: ./scripts/ci/pre_commit/pre_commit_breeze_cmd_line.py
         language: python
-        files: ^BREEZE\.rst$|^dev/breeze/.*$
+        files: ^BREEZE\.rst$|^dev/breeze/.*$|^\.pre-commit-config\.yml$
         pass_filenames: false
         additional_dependencies: ['rich>=12.4.4', 'rich-click>=1.5']
       - id: update-local-yml-file
@@ -368,13 +369,6 @@ repos:
         language: system
         files: ^setup\.cfg$
         pass_filenames: false
-      - id: update-providers-dependencies
-        name: Update cross-dependencies for providers packages
-        entry: 
./scripts/ci/pre_commit/pre_commit_build_providers_dependencies.sh
-        language: python
-        files: ^airflow/providers/.*\.py$|^tests/providers/.*\.py$
-        pass_filenames: false
-        additional_dependencies: ['setuptools']
       - id: update-extras
         name: Update extras in documentation
         entry: ./scripts/ci/pre_commit/pre_commit_insert_extras.py
@@ -582,14 +576,12 @@ repos:
         name: stylelint
         entry: "stylelint"
         language: node
-        language_version: 18.6.0
         files: ^airflow/www/.*\.(css|scss|sass)$
         # Keep dependency versions in sync w/ airflow/www/package.json
         additional_dependencies: ['[email protected]', 
'[email protected]']
       - id: compile-www-assets
         name: Compile www assets
         language: node
-        language_version: 18.6.0
         stages: ['manual']
         'types_or': [javascript, tsx, ts]
         files: ^airflow/www/
@@ -641,14 +633,6 @@ repos:
         additional_dependencies: ['pyyaml', 'jinja2', 'black==22.3.0', 
'tabulate', 'rich>=12.4.4']
         require_serial: true
         pass_filenames: false
-      - id: check-airflow-providers-have-extras
-        name: Checks providers available when declared by extras in setup.py
-        language: python
-        entry: 
./scripts/ci/pre_commit/pre_commit_check_extras_have_providers.py
-        files: ^setup\.py$|^airflow/providers/.*\.py$
-        pass_filenames: false
-        require_serial: true
-        additional_dependencies: ['rich>=12.4.4']
       - id: update-breeze-readme-config-hash
         name: Update Breeze README.md with config files hash
         language: python
@@ -669,7 +653,7 @@ repos:
         entry: ./scripts/ci/pre_commit/pre_commit_check_system_tests.py
         language: python
         files: ^tests/system/.*/example_[^/]*.py$
-        exclude: 
^tests/system/providers/google/bigquery/example_bigquery_queries\.py$
+        exclude: 
^tests/system/providers/google/cloud/bigquery/example_bigquery_queries\.py$
         pass_filenames: true
         additional_dependencies: ['rich>=12.4.4']
       - id: lint-markdown
@@ -677,7 +661,6 @@ repos:
         description: Checks the style of Markdown files.
         entry: markdownlint
         language: node
-        language_version: 18.6.0
         types: [markdown]
         files: \.(md|mdown|markdown)$
         additional_dependencies: ['markdownlint-cli']
@@ -818,18 +801,16 @@ repos:
       - id: lint-javascript
         name: ESLint against airflow/ui
         language: node
-        language_version: 18.6.0
         'types_or': [javascript, tsx, ts]
         files: ^airflow/ui/
         entry: ./scripts/ci/pre_commit/pre_commit_ui_lint.py
         pass_filenames: false
         additional_dependencies: ['[email protected]']
-      - id: lint-javascript
-        name: ESLint against current UI JavaScript files
+      - id: ts-compile-and-lint-javascript
+        name: TS types generation and ESLint against current UI files
         language: node
-        language_version: 18.6.0
-        'types_or': [javascript, tsx, ts]
-        files: ^airflow/www/static/js/
+        'types_or': [javascript, tsx, ts, yaml]
+        files: ^airflow/www/static/js/|^airflow/api_connexion/openapi/v1.yaml
         entry: ./scripts/ci/pre_commit/pre_commit_www_lint.py
         additional_dependencies: ['[email protected]']
         pass_filenames: false
@@ -879,5 +860,5 @@ repos:
         entry: ./scripts/ci/pre_commit/pre_commit_migration_reference.py
         pass_filenames: false
         files: 
^airflow/migrations/versions/.*\.py$|^docs/apache-airflow/migrations-ref\.rst$
-        additional_dependencies: ['rich>=12.4.4', 'inputimeout']
+        additional_dependencies: ['rich>=12.4.4', 'inputimeout', 
'markdown-it-py']
         ## ONLY ADD PRE-COMMITS HERE THAT REQUIRE CI IMAGE
diff --git a/STATIC_CODE_CHECKS.rst b/STATIC_CODE_CHECKS.rst
index 69cc38ec1b..4b1de0022e 100644
--- a/STATIC_CODE_CHECKS.rst
+++ b/STATIC_CODE_CHECKS.rst
@@ -140,8 +140,6 @@ require Breeze Docker image to be build locally.
 
+--------------------------------------------------------+------------------------------------------------------------------+---------+
 | check-airflow-config-yaml-consistent                   | Checks for 
consistency between config.yml and default_config.cfg |         |
 
+--------------------------------------------------------+------------------------------------------------------------------+---------+
-| check-airflow-providers-have-extras                    | Checks providers 
available when declared by extras in setup.py   |         |
-+--------------------------------------------------------+------------------------------------------------------------------+---------+
 | check-apache-license-rat                               | Check if licenses 
are OK for Apache                              |         |
 
+--------------------------------------------------------+------------------------------------------------------------------+---------+
 | check-base-operator-usage                              | * Check 
BaseOperator[Link] core imports                          |         |
@@ -254,8 +252,7 @@ require Breeze Docker image to be build locally.
 
+--------------------------------------------------------+------------------------------------------------------------------+---------+
 | lint-helm-chart                                        | Lint Helm Chart     
                                             |         |
 
+--------------------------------------------------------+------------------------------------------------------------------+---------+
-| lint-javascript                                        | * ESLint against 
airflow/ui                                      |         |
-|                                                        | * ESLint against 
current UI JavaScript files                     |         |
+| lint-javascript                                        | ESLint against 
airflow/ui                                        |         |
 
+--------------------------------------------------------+------------------------------------------------------------------+---------+
 | lint-json-schema                                       | * Lint JSON Schema 
files with JSON Schema                        |         |
 |                                                        | * Lint NodePort 
Service with JSON Schema                         |         |
@@ -294,6 +291,8 @@ require Breeze Docker image to be build locally.
 
+--------------------------------------------------------+------------------------------------------------------------------+---------+
 | trailing-whitespace                                    | Remove trailing 
whitespace at end of line                        |         |
 
+--------------------------------------------------------+------------------------------------------------------------------+---------+
+| ts-compile-and-lint-javascript                         | TS types generation 
and ESLint against current UI files          |         |
++--------------------------------------------------------+------------------------------------------------------------------+---------+
 | update-breeze-cmd-output                               | Update output of 
breeze commands in BREEZE.rst                   |         |
 
+--------------------------------------------------------+------------------------------------------------------------------+---------+
 | update-breeze-readme-config-hash                       | Update Breeze 
README.md with config files hash                   |         |
@@ -308,8 +307,6 @@ require Breeze Docker image to be build locally.
 
+--------------------------------------------------------+------------------------------------------------------------------+---------+
 | update-migration-references                            | Update migration 
ref doc                                         | *       |
 
+--------------------------------------------------------+------------------------------------------------------------------+---------+
-| update-providers-dependencies                          | Update 
cross-dependencies for providers packages                 |         |
-+--------------------------------------------------------+------------------------------------------------------------------+---------+
 | update-setup-cfg-file                                  | Update setup.cfg 
file with all licenses                          |         |
 
+--------------------------------------------------------+------------------------------------------------------------------+---------+
 | update-spelling-wordlist-to-be-sorted                  | Sort alphabetically 
and uniquify spelling_wordlist.txt           |         |
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py 
b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index 106c3d8969..9d338a6a3b 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -27,7 +27,6 @@ PRE_COMMIT_LIST = [
     'blacken-docs',
     'check-airflow-2-2-compatibility',
     'check-airflow-config-yaml-consistent',
-    'check-airflow-providers-have-extras',
     'check-apache-license-rat',
     'check-base-operator-usage',
     'check-boring-cyborg-configuration',
@@ -94,6 +93,7 @@ PRE_COMMIT_LIST = [
     'run-shellcheck',
     'static-check-autoflake',
     'trailing-whitespace',
+    'ts-compile-and-lint-javascript',
     'update-breeze-cmd-output',
     'update-breeze-readme-config-hash',
     'update-extras',
@@ -101,7 +101,6 @@ PRE_COMMIT_LIST = [
     'update-inlined-dockerfile-scripts',
     'update-local-yml-file',
     'update-migration-references',
-    'update-providers-dependencies',
     'update-setup-cfg-file',
     'update-spelling-wordlist-to-be-sorted',
     'update-supported-versions',
diff --git a/dev/provider_packages/prepare_provider_packages.py 
b/dev/provider_packages/prepare_provider_packages.py
index ca979bdc3d..243aaa19e6 100755
--- a/dev/provider_packages/prepare_provider_packages.py
+++ b/dev/provider_packages/prepare_provider_packages.py
@@ -37,6 +37,7 @@ from enum import Enum
 from functools import lru_cache
 from os.path import dirname, relpath
 from pathlib import Path
+from random import choice
 from shutil import copyfile
 from typing import Any, Dict, Generator, Iterable, List, NamedTuple, Optional, 
Set, Tuple, Union
 
@@ -91,19 +92,27 @@ AIRFLOW_PATH = AIRFLOW_SOURCES_ROOT_PATH / "airflow"
 DIST_PATH = AIRFLOW_SOURCES_ROOT_PATH / "dist"
 PROVIDERS_PATH = AIRFLOW_PATH / "providers"
 DOCUMENTATION_PATH = AIRFLOW_SOURCES_ROOT_PATH / "docs"
+
+DEPENDENCIES_JSON_FILE_PATH = AIRFLOW_SOURCES_ROOT_PATH / "generated" / 
"provider_dependencies.json"
+
 TARGET_PROVIDER_PACKAGES_PATH = AIRFLOW_SOURCES_ROOT_PATH / "provider_packages"
 GENERATED_AIRFLOW_PATH = TARGET_PROVIDER_PACKAGES_PATH / "airflow"
 GENERATED_PROVIDERS_PATH = GENERATED_AIRFLOW_PATH / "providers"
 
 PROVIDER_RUNTIME_DATA_SCHEMA_PATH = AIRFLOW_SOURCES_ROOT_PATH / "airflow" / 
"provider_info.schema.json"
 
+CROSS_PROVIDERS_DEPS = "cross-providers-deps"
+DEPS = "deps"
+
 sys.path.insert(0, str(AIRFLOW_SOURCES_ROOT_PATH))
 
+
+ALL_DEPENDENCIES = json.loads(DEPENDENCIES_JSON_FILE_PATH.read_text())
+
 # those imports need to come after the above sys.path.insert to make sure that 
Airflow
 # sources are importable without having to add the airflow sources to the 
PYTHONPATH before
 # running the script
-from setup import PROVIDERS_REQUIREMENTS  # type: ignore[attr-defined] # 
isort:skip # noqa
-from setup import PREINSTALLED_PROVIDERS  # type: ignore[attr-defined] # 
isort:skip # noqa
+from setup import PREINSTALLED_PROVIDERS, ALL_PROVIDERS  # type: 
ignore[attr-defined] # isort:skip # noqa
 
 # Note - we do not test protocols as they are not really part of the official 
API of
 # Apache Airflow
@@ -134,14 +143,6 @@ class EntityType(Enum):
     Secrets = "Secrets"
 
 
-def get_provider_packages() -> List[str]:
-    """
-    Returns all provider packages.
-
-    """
-    return list(PROVIDERS_REQUIREMENTS.keys())
-
-
 @click.group(context_settings={'help_option_names': ['-h', '--help'], 
'max_content_width': 500})
 def cli():
     ...
@@ -257,9 +258,6 @@ def 
get_target_providers_package_folder(provider_package_id: str) -> str:
     return os.path.join(get_target_providers_folder(), 
*provider_package_id.split("."))
 
 
-DEPENDENCIES_JSON_FILE = os.path.join(PROVIDERS_PATH, "dependencies.json")
-
-
 def get_pip_package_name(provider_package_id: str) -> str:
     """
     Returns PIP package name for the package id.
@@ -316,28 +314,21 @@ def get_install_requirements(provider_package_id: str, 
version_suffix: str) -> s
 
     :return: install requirements of the package
     """
-    dependencies = PROVIDERS_REQUIREMENTS[provider_package_id]
-    provider_yaml = get_provider_yaml(provider_package_id)
-    install_requires = []
-    if "additional-dependencies" in provider_yaml:
-        additional_dependencies = provider_yaml['additional-dependencies']
-        if version_suffix:
-            # In case we are preparing "rc" or dev0 packages, we should also
-            # make sure that cross-dependency with Airflow or Airflow 
Providers will
-            # contain the version suffix, otherwise we will have conflicting 
dependencies.
-            # For example if (in sftp) we have ssh>=2.0.1 and release 
ssh==2.0.1
-            # we want to turn this into ssh>=2.0.1.dev0 if we build dev0 
version of the packages
-            # or >=2.0.1rc1 if we build rc1 version of the packages.
-            for dependency in additional_dependencies:
-                if dependency.startswith("apache-airflow") and ">=" in 
dependency:
-                    dependency = (
-                        dependency + ("." if not 
version_suffix.startswith(".") else "") + version_suffix
-                    )
-                install_requires.append(dependency)
-        else:
-            install_requires.extend(additional_dependencies)
 
-    install_requires.extend(dependencies)
+    def apply_version_suffix(install_clause: str) -> str:
+        if install_clause.startswith("apache-airflow") and ">=" in 
install_clause and version_suffix != "":
+            # This is workaround for `pip` way of handling `--pre` 
installation switch. It apparently does
+            # not modify the meaning of `install_requires` to include also 
pre-releases, so we need to
+            # modify our internal provider and airflow package version 
references to include all pre-releases
+            # including all development releases. When you specify dependency 
as >= X.Y.Z, and you
+            # have packages X.Y.Zdev0 or X.Y.Zrc1 in a local file, such 
package is not considered
+            # as fulfilling the requirement even if `--pre` switch is used.
+            return install_clause + ".*"
+        return install_clause
+
+    install_requires = [
+        apply_version_suffix(clause) for clause in 
ALL_DEPENDENCIES[provider_package_id][DEPS]
+    ]
     prefix = "\n    "
     return prefix + prefix.join(install_requires)
 
@@ -361,24 +352,28 @@ def get_package_extras(provider_package_id: str) -> 
Dict[str, List[str]]:
     """
     if provider_package_id == 'providers':
         return {}
-    with open(DEPENDENCIES_JSON_FILE) as dependencies_file:
-        cross_provider_dependencies: Dict[str, List[str]] = 
json.load(dependencies_file)
-    extras_dict = (
-        {
-            module: [get_pip_package_name(module)]
-            for module in cross_provider_dependencies[provider_package_id]
-        }
-        if cross_provider_dependencies.get(provider_package_id)
-        else {}
-    )
+    extras_dict: Dict[str, List[str]] = {
+        module: [get_pip_package_name(module)]
+        for module in 
ALL_DEPENDENCIES[provider_package_id][CROSS_PROVIDERS_DEPS]
+    }
     provider_yaml_dict = get_provider_yaml(provider_package_id)
     additional_extras = provider_yaml_dict.get('additional-extras')
     if additional_extras:
-        for key in additional_extras:
-            if key in extras_dict:
-                extras_dict[key].append(additional_extras[key])
+        for entry in additional_extras:
+            name = entry['name']
+            dependencies = entry['dependencies']
+            if name in extras_dict:
+                # remove non-versioned dependencies if versioned ones are 
coming
+                existing_dependencies = set(extras_dict[name])
+                for new_dependency in dependencies:
+                    for dependency in existing_dependencies:
+                        # remove extra if exists as non-versioned one
+                        if new_dependency.startswith(dependency):
+                            extras_dict[name].remove(dependency)
+                            break
+                    extras_dict[name].append(new_dependency)
             else:
-                extras_dict[key] = additional_extras[key]
+                extras_dict[name] = dependencies
     return extras_dict
 
 
@@ -412,7 +407,7 @@ def render_template(
     return content
 
 
-PR_PATTERN = re.compile(r".*\(#([0-9]+)\)")
+PR_PATTERN = re.compile(r".*\(#(\d+)\)")
 
 
 class Change(NamedTuple):
@@ -659,9 +654,7 @@ def 
get_cross_provider_dependent_packages(provider_package_id: str) -> List[str]
     :param provider_package_id: package id
     :return: list of cross-provider dependencies
     """
-    with open(os.path.join(PROVIDERS_PATH, "dependencies.json")) as 
dependencies_file:
-        dependent_packages = 
json.load(dependencies_file).get(provider_package_id) or []
-    return dependent_packages
+    return ALL_DEPENDENCIES[provider_package_id][CROSS_PROVIDERS_DEPS]
 
 
 def make_sure_remote_apache_exists_and_fetch(git_update: bool, verbose: bool):
@@ -1028,11 +1021,7 @@ def get_provider_details(provider_package_id: str) -> 
ProviderPackageDetails:
 
 def get_provider_requirements(provider_package_id: str) -> List[str]:
     provider_yaml = get_provider_yaml(provider_package_id)
-    requirements = (
-        provider_yaml['additional-dependencies'].copy() if 
'additional-dependencies' in provider_yaml else []
-    )
-    requirements.extend(PROVIDERS_REQUIREMENTS[provider_package_id])
-    return requirements
+    return provider_yaml['dependencies']
 
 
 def get_provider_jinja_context(
@@ -1082,7 +1071,7 @@ def get_provider_jinja_context(
             provider_package_path=provider_details.source_provider_package_path
         ),
         "CROSS_PROVIDERS_DEPENDENCIES": cross_providers_dependencies,
-        "PIP_REQUIREMENTS": 
PROVIDERS_REQUIREMENTS[provider_details.provider_package_id],
+        "PIP_REQUIREMENTS": 
get_provider_requirements(provider_details.provider_package_id),
         "PROVIDER_TYPE": "Provider",
         "PROVIDERS_FOLDER": "providers",
         "PROVIDER_DESCRIPTION": provider_details.provider_description,
@@ -1144,12 +1133,23 @@ class TypeOfChange(Enum):
     SKIP = "s"
 
 
-def get_type_of_changes() -> TypeOfChange:
+def get_type_of_changes(answer: Optional[str]) -> TypeOfChange:
     """
     Ask user to specify type of changes (case-insensitive).
     :return: Type of change.
     """
     given_answer = ""
+    if answer and answer.lower() in ["yes", "y"]:
+        # Simulate all possible non-terminal answers
+        return choice(
+            [
+                TypeOfChange.DOCUMENTATION,
+                TypeOfChange.BUGFIX,
+                TypeOfChange.FEATURE,
+                TypeOfChange.BREAKING_CHANGE,
+                TypeOfChange.SKIP,
+            ]
+        )
     while given_answer not in [*[t.value for t in TypeOfChange], "q"]:
         console.print(
             "[yellow]Type of change (d)ocumentation, (b)ugfix, (f)eature, 
(x)breaking "
@@ -1212,7 +1212,7 @@ def update_release_notes(
     :param version_suffix: version suffix corresponding to the version in the 
code
     :param force: regenerate already released documentation
     :param verbose: whether to print verbose messages
-    :param answer: force answer to questions if set.
+    :param answer: force answer to question if set.
     :returns False if the package should be skipped, True if everything 
generated properly
     """
     verify_provider_package(provider_package_id)
@@ -1229,7 +1229,7 @@ def update_release_notes(
             console.print()
             return False
         else:
-            type_of_change = get_type_of_changes()
+            type_of_change = get_type_of_changes(answer=answer)
             if type_of_change == TypeOfChange.DOCUMENTATION:
                 if isinstance(latest_change, Change):
                     
mark_latest_changes_as_documentation_only(provider_package_id, latest_change)
@@ -1443,7 +1443,7 @@ def get_all_providers() -> List[str]:
     Returns all providers for regular packages.
     :return: list of providers that are considered for provider packages
     """
-    return list(PROVIDERS_REQUIREMENTS.keys())
+    return list(ALL_PROVIDERS)
 
 
 def verify_provider_package(provider_package_id: str) -> None:
@@ -1452,10 +1452,10 @@ def verify_provider_package(provider_package_id: str) 
-> None:
     :param provider_package_id: package id to verify
     :return: None
     """
-    if provider_package_id not in get_provider_packages():
+    if provider_package_id not in get_all_providers():
         console.print(f"[red]Wrong package name: {provider_package_id}[/]")
         console.print("Use one of:")
-        console.print(get_provider_packages())
+        console.print(get_all_providers())
         raise Exception(f"The package {provider_package_id} is not a provider 
package.")
 
 
diff --git a/images/breeze/output-commands-hash.txt 
b/images/breeze/output-commands-hash.txt
index 0c6425a26b..b889b05211 100644
--- a/images/breeze/output-commands-hash.txt
+++ b/images/breeze/output-commands-hash.txt
@@ -29,7 +29,7 @@ self-upgrade:b5437c0a1a91533a11ee9d0a9692369c
 setup-autocomplete:355b72dee171c2fcba46fc90ac7c97b0
 shell:ab7955da71048b3a695485c152d06786
 start-airflow:30caa077555bef44e5bdf76dfeca092c
-static-checks:f67ced7d54feee18d504712a1cf610ac
+static-checks:d70a46e0c663e9a633665fe87b4ece0e
 stop:8ebd8a42f1003495d37b884de5ac7ce6
 tests:e39111ecbd33a65ababb3cbfbac2b069
 verify-image:a6b3c70957aea96a5d4d261f23359a2d
diff --git a/images/breeze/output-static-checks.svg 
b/images/breeze/output-static-checks.svg
index 904cc38de3..534af58e7e 100644
--- a/images/breeze/output-static-checks.svg
+++ b/images/breeze/output-static-checks.svg
@@ -19,241 +19,241 @@
         font-weight: 700;
     }
 
-    .terminal-2820057193-matrix {
+    .terminal-3102383761-matrix {
         font-family: Fira Code, monospace;
         font-size: 20px;
         line-height: 24.4px;
         font-variant-east-asian: full-width;
     }
 
-    .terminal-2820057193-title {
+    .terminal-3102383761-title {
         font-size: 18px;
         font-weight: bold;
         font-family: arial;
     }
 
-    .terminal-2820057193-r1 { fill: #c5c8c6;font-weight: bold }
-.terminal-2820057193-r2 { fill: #c5c8c6 }
-.terminal-2820057193-r3 { fill: #d0b344;font-weight: bold }
-.terminal-2820057193-r4 { fill: #868887 }
-.terminal-2820057193-r5 { fill: #68a0b3;font-weight: bold }
-.terminal-2820057193-r6 { fill: #98a84b;font-weight: bold }
-.terminal-2820057193-r7 { fill: #8d7b39 }
+    .terminal-3102383761-r1 { fill: #c5c8c6;font-weight: bold }
+.terminal-3102383761-r2 { fill: #c5c8c6 }
+.terminal-3102383761-r3 { fill: #d0b344;font-weight: bold }
+.terminal-3102383761-r4 { fill: #868887 }
+.terminal-3102383761-r5 { fill: #68a0b3;font-weight: bold }
+.terminal-3102383761-r6 { fill: #98a84b;font-weight: bold }
+.terminal-3102383761-r7 { fill: #8d7b39 }
     </style>
 
     <defs>
-    <clipPath id="terminal-2820057193-clip-terminal">
+    <clipPath id="terminal-3102383761-clip-terminal">
       <rect x="0" y="0" width="1463.0" height="1219.0" />
     </clipPath>
-    <clipPath id="terminal-2820057193-line-0">
+    <clipPath id="terminal-3102383761-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-1">
+<clipPath id="terminal-3102383761-line-1">
     <rect x="0" y="25.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-2">
+<clipPath id="terminal-3102383761-line-2">
     <rect x="0" y="50.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-3">
+<clipPath id="terminal-3102383761-line-3">
     <rect x="0" y="74.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-4">
+<clipPath id="terminal-3102383761-line-4">
     <rect x="0" y="99.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-5">
+<clipPath id="terminal-3102383761-line-5">
     <rect x="0" y="123.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-6">
+<clipPath id="terminal-3102383761-line-6">
     <rect x="0" y="147.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-7">
+<clipPath id="terminal-3102383761-line-7">
     <rect x="0" y="172.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-8">
+<clipPath id="terminal-3102383761-line-8">
     <rect x="0" y="196.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-9">
+<clipPath id="terminal-3102383761-line-9">
     <rect x="0" y="221.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-10">
+<clipPath id="terminal-3102383761-line-10">
     <rect x="0" y="245.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-11">
+<clipPath id="terminal-3102383761-line-11">
     <rect x="0" y="269.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-12">
+<clipPath id="terminal-3102383761-line-12">
     <rect x="0" y="294.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-13">
+<clipPath id="terminal-3102383761-line-13">
     <rect x="0" y="318.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-14">
+<clipPath id="terminal-3102383761-line-14">
     <rect x="0" y="343.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-15">
+<clipPath id="terminal-3102383761-line-15">
     <rect x="0" y="367.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-16">
+<clipPath id="terminal-3102383761-line-16">
     <rect x="0" y="391.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-17">
+<clipPath id="terminal-3102383761-line-17">
     <rect x="0" y="416.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-18">
+<clipPath id="terminal-3102383761-line-18">
     <rect x="0" y="440.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-19">
+<clipPath id="terminal-3102383761-line-19">
     <rect x="0" y="465.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-20">
+<clipPath id="terminal-3102383761-line-20">
     <rect x="0" y="489.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-21">
+<clipPath id="terminal-3102383761-line-21">
     <rect x="0" y="513.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-22">
+<clipPath id="terminal-3102383761-line-22">
     <rect x="0" y="538.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-23">
+<clipPath id="terminal-3102383761-line-23">
     <rect x="0" y="562.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-24">
+<clipPath id="terminal-3102383761-line-24">
     <rect x="0" y="587.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-25">
+<clipPath id="terminal-3102383761-line-25">
     <rect x="0" y="611.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-26">
+<clipPath id="terminal-3102383761-line-26">
     <rect x="0" y="635.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-27">
+<clipPath id="terminal-3102383761-line-27">
     <rect x="0" y="660.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-28">
+<clipPath id="terminal-3102383761-line-28">
     <rect x="0" y="684.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-29">
+<clipPath id="terminal-3102383761-line-29">
     <rect x="0" y="709.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-30">
+<clipPath id="terminal-3102383761-line-30">
     <rect x="0" y="733.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-31">
+<clipPath id="terminal-3102383761-line-31">
     <rect x="0" y="757.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-32">
+<clipPath id="terminal-3102383761-line-32">
     <rect x="0" y="782.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-33">
+<clipPath id="terminal-3102383761-line-33">
     <rect x="0" y="806.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-34">
+<clipPath id="terminal-3102383761-line-34">
     <rect x="0" y="831.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-35">
+<clipPath id="terminal-3102383761-line-35">
     <rect x="0" y="855.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-36">
+<clipPath id="terminal-3102383761-line-36">
     <rect x="0" y="879.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-37">
+<clipPath id="terminal-3102383761-line-37">
     <rect x="0" y="904.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-38">
+<clipPath id="terminal-3102383761-line-38">
     <rect x="0" y="928.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-39">
+<clipPath id="terminal-3102383761-line-39">
     <rect x="0" y="953.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-40">
+<clipPath id="terminal-3102383761-line-40">
     <rect x="0" y="977.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-41">
+<clipPath id="terminal-3102383761-line-41">
     <rect x="0" y="1001.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-42">
+<clipPath id="terminal-3102383761-line-42">
     <rect x="0" y="1026.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-43">
+<clipPath id="terminal-3102383761-line-43">
     <rect x="0" y="1050.7" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-44">
+<clipPath id="terminal-3102383761-line-44">
     <rect x="0" y="1075.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-45">
+<clipPath id="terminal-3102383761-line-45">
     <rect x="0" y="1099.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-46">
+<clipPath id="terminal-3102383761-line-46">
     <rect x="0" y="1123.9" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-47">
+<clipPath id="terminal-3102383761-line-47">
     <rect x="0" y="1148.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="terminal-2820057193-line-48">
+<clipPath id="terminal-3102383761-line-48">
     <rect x="0" y="1172.7" width="1464" height="24.65"/>
             </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="1268" rx="8"/><text 
class="terminal-2820057193-title" fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;static-checks</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="1268" rx="8"/><text 
class="terminal-3102383761-title" fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;static-checks</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
             <circle cx="44" cy="0" r="7" fill="#28c840"/>
             </g>
         
-    <g transform="translate(9, 41)" 
clip-path="url(#terminal-2820057193-clip-terminal)">
+    <g transform="translate(9, 41)" 
clip-path="url(#terminal-3102383761-clip-terminal)">
     
-    <g class="terminal-2820057193-matrix">
-    <text class="terminal-2820057193-r2" x="1464" y="20" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-0)">
-</text><text class="terminal-2820057193-r3" x="12.2" y="44.4" 
textLength="85.4" 
clip-path="url(#terminal-2820057193-line-1)">Usage:&#160;</text><text 
class="terminal-2820057193-r1" x="97.6" y="44.4" textLength="610" 
clip-path="url(#terminal-2820057193-line-1)">breeze&#160;static-checks&#160;[OPTIONS]&#160;[PRECOMMIT_ARGS]...</text><text
 class="terminal-2820057193-r2" x="1464" y="44.4" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-1)">
-</text><text class="terminal-2820057193-r2" x="1464" y="68.8" 
textLength="12.2" clip-path="url(#terminal-2820057193-line-2)">
-</text><text class="terminal-2820057193-r2" x="12.2" y="93.2" 
textLength="219.6" 
clip-path="url(#terminal-2820057193-line-3)">Run&#160;static&#160;checks.</text><text
 class="terminal-2820057193-r2" x="1464" y="93.2" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-3)">
-</text><text class="terminal-2820057193-r2" x="1464" y="117.6" 
textLength="12.2" clip-path="url(#terminal-2820057193-line-4)">
-</text><text class="terminal-2820057193-r4" x="0" y="142" textLength="24.4" 
clip-path="url(#terminal-2820057193-line-5)">╭─</text><text 
class="terminal-2820057193-r4" x="24.4" y="142" textLength="1415.2" 
clip-path="url(#terminal-2820057193-line-5)">&#160;Pre-commit&#160;flags&#160;──────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="terminal-2820057193-r4" x="1439.6" y="142" textLength="24.4" 
clip-path="url(#terminal-282005 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="166.4" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-6)">│</text><text 
class="terminal-2820057193-r5" x="24.4" y="166.4" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-6)">-</text><text 
class="terminal-2820057193-r5" x="36.6" y="166.4" textLength="61" 
clip-path="url(#terminal-2820057193-line-6)">-type</text><text 
class="terminal-2820057193-r6" x="317.2" y="166.4" textLength="24.4" 
clip-path="url(#terminal-28200 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="190.8" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-7)">│</text><text 
class="terminal-2820057193-r7" x="366" y="190.8" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-7)">(all&#160;|&#160;black&#160;|&#160;blacken-docs&#160;|&#160;check-airflow-2-2-compatibility&#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="terminal-2820057193-r4" x="0" y="215.2" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-8)">│</text><text 
class="terminal-2820057193-r7" x="366" y="215.2" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-8)">check-airflow-config-yaml-consistent&#160;|&#160;check-airflow-providers-have-extras&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-2820057193-r4" x="1451.8" y="215.2" textLength="1 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="239.6" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-9)">│</text><text 
class="terminal-2820057193-r7" x="366" y="239.6" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-9)">check-apache-license-rat&#160;|&#160;check-base-operator-usage&#160;|&#160;check-boring-cyborg-configuration</text><text
 class="terminal-2820057193-r4" x="1451.8" y="239.6" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-9)">│</te [...]
-</text><text class="terminal-2820057193-r4" x="0" y="264" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-10)">│</text><text 
class="terminal-2820057193-r7" x="366" y="264" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-10)">|&#160;check-breeze-top-dependencies-limited&#160;|&#160;check-builtin-literals&#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="termi [...]
-</text><text class="terminal-2820057193-r4" x="0" y="288.4" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-11)">│</text><text 
class="terminal-2820057193-r7" x="366" y="288.4" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-11)">check-changelog-has-no-duplicates&#160;|&#160;check-daysago-import-from-utils&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-2820057193-r [...]
-</text><text class="terminal-2820057193-r4" x="0" y="312.8" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-12)">│</text><text 
class="terminal-2820057193-r7" x="366" y="312.8" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-12)">check-docstring-param-types&#160;|&#160;check-executables-have-shebangs&#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><tex
 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="337.2" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-13)">│</text><text 
class="terminal-2820057193-r7" x="366" y="337.2" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-13)">check-extra-packages-references&#160;|&#160;check-extras-order&#160;|&#160;check-for-inclusive-language&#160;|&#160;&#160;&#160;</text><text
 class="terminal-2820057193-r4" x="1451.8" y="337.2" textLength="12.2" 
clip-path="url(#terminal-282 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="361.6" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-14)">│</text><text 
class="terminal-2820057193-r7" x="366" y="361.6" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-14)">check-hooks-apply&#160;|&#160;check-incorrect-use-of-LoggingMixin&#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="terminal-2820057193-r4" x="0" y="386" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-15)">│</text><text 
class="terminal-2820057193-r7" x="366" y="386" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-15)">check-integrations-are-consistent&#160;|&#160;check-merge-conflict&#160;|&#160;check-newsfragments-are-valid</text><text
 class="terminal-2820057193-r4" x="1451.8" y="386" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-15)">│</text> [...]
-</text><text class="terminal-2820057193-r4" x="0" y="410.4" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-16)">│</text><text 
class="terminal-2820057193-r7" x="366" y="410.4" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-16)">|&#160;check-no-providers-in-core-examples&#160;|&#160;check-no-relative-imports&#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="termin [...]
-</text><text class="terminal-2820057193-r4" x="0" y="434.8" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-17)">│</text><text 
class="terminal-2820057193-r7" x="366" y="434.8" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-17)">check-persist-credentials-disabled-in-github-workflows&#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;&#16
 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="459.2" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-18)">│</text><text 
class="terminal-2820057193-r7" x="366" y="459.2" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-18)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-2820057193-r4" x="1451.8" y="459.2" textLength="12.2" 
clip-path="url(#te [...]
-</text><text class="terminal-2820057193-r4" x="0" y="483.6" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-19)">│</text><text 
class="terminal-2820057193-r7" x="366" y="483.6" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-19)">check-provider-yaml-valid&#160;|&#160;check-providers-init-file-missing&#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><tex
 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="508" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-20)">│</text><text 
class="terminal-2820057193-r7" x="366" y="508" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-20)">check-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-2820057193-r4" x="1451.8" y="508" te [...]
-</text><text class="terminal-2820057193-r4" x="0" y="532.4" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-21)">│</text><text 
class="terminal-2820057193-r7" x="366" y="532.4" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-21)">check-revision-heads-map&#160;|&#160;check-safe-filter-usage-in-html&#160;|&#160;check-setup-order&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-2820057193-r4" x="1451.8" y="532.4" textLength="12.2" cli [...]
-</text><text class="terminal-2820057193-r4" x="0" y="556.8" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-22)">│</text><text 
class="terminal-2820057193-r7" x="366" y="556.8" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-22)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-2820057 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="581.2" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-23)">│</text><text 
class="terminal-2820057193-r7" x="366" y="581.2" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-23)">check-system-tests-tocs&#160;|&#160;check-xml&#160;|&#160;codespell&#160;|&#160;compile-www-assets&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="termin [...]
-</text><text class="terminal-2820057193-r4" x="0" y="605.6" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-24)">│</text><text 
class="terminal-2820057193-r7" x="366" y="605.6" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-24)">compile-www-assets-dev&#160;|&#160;create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-2820057193-r4" x="1451.8" y="605.6" textLength="12.2" cli [...]
-</text><text class="terminal-2820057193-r4" x="0" y="630" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-25)">│</text><text 
class="terminal-2820057193-r7" x="366" y="630" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-25)">detect-private-key&#160;|&#160;doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-2820057193-r4" x="1451.8" y="630" te [...]
-</text><text class="terminal-2820057193-r4" x="0" y="654.4" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-26)">│</text><text 
class="terminal-2820057193-r7" x="366" y="654.4" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-26)">forbid-tabs&#160;|&#160;identity&#160;|&#160;insert-license&#160;|&#160;isort&#160;|&#160;lint-chart-schema&#160;|&#160;lint-css&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-2820057193-r4" x="1451.8" y [...]
-</text><text class="terminal-2820057193-r4" x="0" y="678.8" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-27)">│</text><text 
class="terminal-2820057193-r7" x="366" y="678.8" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-27)">lint-dockerfile&#160;|&#160;lint-helm-chart&#160;|&#160;lint-javascript&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|</text><text
 class="terminal-2820057193-r4" x="1451.8" y="678.8" textLength="12.2" 
clip-path="url(#termina [...]
-</text><text class="terminal-2820057193-r4" x="0" y="703.2" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-28)">│</text><text 
class="terminal-2820057193-r7" x="366" y="703.2" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-28)">lint-openapi&#160;|&#160;mixed-line-ending&#160;|&#160;pretty-format-json&#160;|&#160;pydocstyle&#160;|&#160;python-no-log-warn&#160;</text><text
 class="terminal-2820057193-r4" x="1451.8" y="703.2" textLength="12.2" 
clip-path="url(#termina [...]
-</text><text class="terminal-2820057193-r4" x="0" y="727.6" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-29)">│</text><text 
class="terminal-2820057193-r7" x="366" y="727.6" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-29)">|&#160;pyupgrade&#160;|&#160;rst-backticks&#160;|&#160;run-flake8&#160;|&#160;run-mypy&#160;|&#160;run-shellcheck&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><tex
 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="752" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-30)">│</text><text 
class="terminal-2820057193-r7" x="366" y="752" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-30)">static-check-autoflake&#160;|&#160;trailing-whitespace&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-2820057193-r4" x="1451.8"  [...]
-</text><text class="terminal-2820057193-r4" x="0" y="776.4" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-31)">│</text><text 
class="terminal-2820057193-r7" x="366" y="776.4" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-31)">update-breeze-readme-config-hash&#160;|&#160;update-extras&#160;|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;&#160;&#160;&#160;</text><text
 class="terminal-2820057193-r4" x="1451.8" y="776.4" textLength="12.2" 
clip-path="url(#termina [...]
-</text><text class="terminal-2820057193-r4" x="0" y="800.8" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-32)">│</text><text 
class="terminal-2820057193-r7" x="366" y="800.8" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-32)">update-inlined-dockerfile-scripts&#160;|&#160;update-local-yml-file&#160;|&#160;update-migration-references&#160;</text><text
 class="terminal-2820057193-r4" x="1451.8" y="800.8" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-32 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="825.2" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-33)">│</text><text 
class="terminal-2820057193-r7" x="366" y="825.2" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-33)">|&#160;update-providers-dependencies&#160;|&#160;update-setup-cfg-file&#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="terminal-2820057193-r4" x="0" y="849.6" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-34)">│</text><text 
class="terminal-2820057193-r7" x="366" y="849.6" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-34)">update-spelling-wordlist-to-be-sorted&#160;|&#160;update-supported-versions&#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="terminal-28 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="874" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-35)">│</text><text 
class="terminal-2820057193-r7" x="366" y="874" textLength="1073.6" 
clip-path="url(#terminal-2820057193-line-35)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;yamllint&#160;|&#160;yesqa)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-2820057193- [...]
-</text><text class="terminal-2820057193-r4" x="0" y="898.4" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-36)">│</text><text 
class="terminal-2820057193-r5" x="24.4" y="898.4" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-36)">-</text><text 
class="terminal-2820057193-r5" x="36.6" y="898.4" textLength="61" 
clip-path="url(#terminal-2820057193-line-36)">-file</text><text 
class="terminal-2820057193-r6" x="317.2" y="898.4" textLength="24.4" 
clip-path="url(#terminal-28 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="922.8" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-37)">│</text><text 
class="terminal-2820057193-r5" x="24.4" y="922.8" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-37)">-</text><text 
class="terminal-2820057193-r5" x="36.6" y="922.8" textLength="48.8" 
clip-path="url(#terminal-2820057193-line-37)">-all</text><text 
class="terminal-2820057193-r5" x="85.4" y="922.8" textLength="73.2" 
clip-path="url(#terminal-28 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="947.2" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-38)">│</text><text 
class="terminal-2820057193-r5" x="24.4" y="947.2" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-38)">-</text><text 
class="terminal-2820057193-r5" x="36.6" y="947.2" textLength="61" 
clip-path="url(#terminal-2820057193-line-38)">-show</text><text 
class="terminal-2820057193-r5" x="97.6" y="947.2" textLength="195.2" 
clip-path="url(#terminal-28 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="971.6" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-39)">│</text><text 
class="terminal-2820057193-r5" x="24.4" y="971.6" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-39)">-</text><text 
class="terminal-2820057193-r5" x="36.6" y="971.6" textLength="61" 
clip-path="url(#terminal-2820057193-line-39)">-last</text><text 
class="terminal-2820057193-r5" x="97.6" y="971.6" textLength="85.4" 
clip-path="url(#terminal-282 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="996" textLength="1464" 
clip-path="url(#terminal-2820057193-line-40)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="terminal-2820057193-r2" x="1464" y="996" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-40)">
-</text><text class="terminal-2820057193-r4" x="0" y="1020.4" textLength="24.4" 
clip-path="url(#terminal-2820057193-line-41)">╭─</text><text 
class="terminal-2820057193-r4" x="24.4" y="1020.4" textLength="1415.2" 
clip-path="url(#terminal-2820057193-line-41)">&#160;Options&#160;───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="terminal-2820057193-r4" x="1439.6" y="1020.4" textLength="24.4" 
clip-path="url(#terminal- [...]
-</text><text class="terminal-2820057193-r4" x="0" y="1044.8" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-42)">│</text><text 
class="terminal-2820057193-r5" x="24.4" y="1044.8" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-42)">-</text><text 
class="terminal-2820057193-r5" x="36.6" y="1044.8" textLength="85.4" 
clip-path="url(#terminal-2820057193-line-42)">-commit</text><text 
class="terminal-2820057193-r5" x="122" y="1044.8" textLength="48.8" 
clip-path="url(#termi [...]
-</text><text class="terminal-2820057193-r4" x="0" y="1069.2" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-43)">│</text><text 
class="terminal-2820057193-r2" x="329.4" y="1069.2" textLength="183" 
clip-path="url(#terminal-2820057193-line-43)">exclusive&#160;with&#160;</text><text
 class="terminal-2820057193-r5" x="512.4" y="1069.2" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-43)">-</text><text 
class="terminal-2820057193-r5" x="524.6" y="1069.2" textLength="61" cl [...]
-</text><text class="terminal-2820057193-r4" x="0" y="1093.6" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-44)">│</text><text 
class="terminal-2820057193-r7" x="329.4" y="1093.6" textLength="1110.2" 
clip-path="url(#terminal-2820057193-line-44)">(TEXT)&#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;&
 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="1118" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-45)">│</text><text 
class="terminal-2820057193-r5" x="24.4" y="1118" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-45)">-</text><text 
class="terminal-2820057193-r5" x="36.6" y="1118" textLength="97.6" 
clip-path="url(#terminal-2820057193-line-45)">-verbose</text><text 
class="terminal-2820057193-r6" x="280.6" y="1118" textLength="24.4" 
clip-path="url(#terminal-2 [...]
-</text><text class="terminal-2820057193-r4" x="0" y="1142.4" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-46)">│</text><text 
class="terminal-2820057193-r5" x="24.4" y="1142.4" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-46)">-</text><text 
class="terminal-2820057193-r5" x="36.6" y="1142.4" textLength="48.8" 
clip-path="url(#terminal-2820057193-line-46)">-dry</text><text 
class="terminal-2820057193-r5" x="85.4" y="1142.4" textLength="48.8" 
clip-path="url(#termina [...]
-</text><text class="terminal-2820057193-r4" x="0" y="1166.8" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-47)">│</text><text 
class="terminal-2820057193-r5" x="24.4" y="1166.8" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-47)">-</text><text 
class="terminal-2820057193-r5" x="36.6" y="1166.8" textLength="85.4" 
clip-path="url(#terminal-2820057193-line-47)">-github</text><text 
class="terminal-2820057193-r5" x="122" y="1166.8" textLength="134.2" 
clip-path="url(#term [...]
-</text><text class="terminal-2820057193-r4" x="0" y="1191.2" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-48)">│</text><text 
class="terminal-2820057193-r5" x="24.4" y="1191.2" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-48)">-</text><text 
class="terminal-2820057193-r5" x="36.6" y="1191.2" textLength="61" 
clip-path="url(#terminal-2820057193-line-48)">-help</text><text 
class="terminal-2820057193-r6" x="280.6" y="1191.2" textLength="24.4" 
clip-path="url(#termina [...]
-</text><text class="terminal-2820057193-r4" x="0" y="1215.6" textLength="1464" 
clip-path="url(#terminal-2820057193-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="terminal-2820057193-r2" x="1464" y="1215.6" textLength="12.2" 
clip-path="url(#terminal-2820057193-line-49)">
+    <g class="terminal-3102383761-matrix">
+    <text class="terminal-3102383761-r2" x="1464" y="20" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-0)">
+</text><text class="terminal-3102383761-r3" x="12.2" y="44.4" 
textLength="85.4" 
clip-path="url(#terminal-3102383761-line-1)">Usage:&#160;</text><text 
class="terminal-3102383761-r1" x="97.6" y="44.4" textLength="610" 
clip-path="url(#terminal-3102383761-line-1)">breeze&#160;static-checks&#160;[OPTIONS]&#160;[PRECOMMIT_ARGS]...</text><text
 class="terminal-3102383761-r2" x="1464" y="44.4" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-1)">
+</text><text class="terminal-3102383761-r2" x="1464" y="68.8" 
textLength="12.2" clip-path="url(#terminal-3102383761-line-2)">
+</text><text class="terminal-3102383761-r2" x="12.2" y="93.2" 
textLength="219.6" 
clip-path="url(#terminal-3102383761-line-3)">Run&#160;static&#160;checks.</text><text
 class="terminal-3102383761-r2" x="1464" y="93.2" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-3)">
+</text><text class="terminal-3102383761-r2" x="1464" y="117.6" 
textLength="12.2" clip-path="url(#terminal-3102383761-line-4)">
+</text><text class="terminal-3102383761-r4" x="0" y="142" textLength="24.4" 
clip-path="url(#terminal-3102383761-line-5)">╭─</text><text 
class="terminal-3102383761-r4" x="24.4" y="142" textLength="1415.2" 
clip-path="url(#terminal-3102383761-line-5)">&#160;Pre-commit&#160;flags&#160;──────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="terminal-3102383761-r4" x="1439.6" y="142" textLength="24.4" 
clip-path="url(#terminal-310238 [...]
+</text><text class="terminal-3102383761-r4" x="0" y="166.4" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-6)">│</text><text 
class="terminal-3102383761-r5" x="24.4" y="166.4" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-6)">-</text><text 
class="terminal-3102383761-r5" x="36.6" y="166.4" textLength="61" 
clip-path="url(#terminal-3102383761-line-6)">-type</text><text 
class="terminal-3102383761-r6" x="317.2" y="166.4" textLength="24.4" 
clip-path="url(#terminal-31023 [...]
+</text><text class="terminal-3102383761-r4" x="0" y="190.8" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-7)">│</text><text 
class="terminal-3102383761-r7" x="366" y="190.8" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-7)">(all&#160;|&#160;black&#160;|&#160;blacken-docs&#160;|&#160;check-airflow-2-2-compatibility&#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="terminal-3102383761-r4" x="0" y="215.2" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-8)">│</text><text 
class="terminal-3102383761-r7" x="366" y="215.2" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-8)">check-airflow-config-yaml-consistent&#160;|&#160;check-apache-license-rat&#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="ter [...]
+</text><text class="terminal-3102383761-r4" x="0" y="239.6" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-9)">│</text><text 
class="terminal-3102383761-r7" x="366" y="239.6" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-9)">check-base-operator-usage&#160;|&#160;check-boring-cyborg-configuration&#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
  [...]
+</text><text class="terminal-3102383761-r4" x="0" y="264" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-10)">│</text><text 
class="terminal-3102383761-r7" x="366" y="264" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-10)">check-breeze-top-dependencies-limited&#160;|&#160;check-builtin-literals&#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=" [...]
+</text><text class="terminal-3102383761-r4" x="0" y="288.4" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-11)">│</text><text 
class="terminal-3102383761-r7" x="366" y="288.4" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-11)">check-changelog-has-no-duplicates&#160;|&#160;check-daysago-import-from-utils&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-3102383761-r [...]
+</text><text class="terminal-3102383761-r4" x="0" y="312.8" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-12)">│</text><text 
class="terminal-3102383761-r7" x="366" y="312.8" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-12)">check-docstring-param-types&#160;|&#160;check-executables-have-shebangs&#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><tex
 [...]
+</text><text class="terminal-3102383761-r4" x="0" y="337.2" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-13)">│</text><text 
class="terminal-3102383761-r7" x="366" y="337.2" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-13)">check-extra-packages-references&#160;|&#160;check-extras-order&#160;|&#160;check-for-inclusive-language&#160;|&#160;&#160;&#160;</text><text
 class="terminal-3102383761-r4" x="1451.8" y="337.2" textLength="12.2" 
clip-path="url(#terminal-310 [...]
+</text><text class="terminal-3102383761-r4" x="0" y="361.6" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-14)">│</text><text 
class="terminal-3102383761-r7" x="366" y="361.6" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-14)">check-hooks-apply&#160;|&#160;check-incorrect-use-of-LoggingMixin&#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="terminal-3102383761-r4" x="0" y="386" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-15)">│</text><text 
class="terminal-3102383761-r7" x="366" y="386" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-15)">check-integrations-are-consistent&#160;|&#160;check-merge-conflict&#160;|&#160;check-newsfragments-are-valid</text><text
 class="terminal-3102383761-r4" x="1451.8" y="386" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-15)">│</text> [...]
+</text><text class="terminal-3102383761-r4" x="0" y="410.4" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-16)">│</text><text 
class="terminal-3102383761-r7" x="366" y="410.4" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-16)">|&#160;check-no-providers-in-core-examples&#160;|&#160;check-no-relative-imports&#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="termin [...]
+</text><text class="terminal-3102383761-r4" x="0" y="434.8" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-17)">│</text><text 
class="terminal-3102383761-r7" x="366" y="434.8" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-17)">check-persist-credentials-disabled-in-github-workflows&#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;&#16
 [...]
+</text><text class="terminal-3102383761-r4" x="0" y="459.2" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-18)">│</text><text 
class="terminal-3102383761-r7" x="366" y="459.2" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-18)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-3102383761-r4" x="1451.8" y="459.2" textLength="12.2" 
clip-path="url(#te [...]
+</text><text class="terminal-3102383761-r4" x="0" y="483.6" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-19)">│</text><text 
class="terminal-3102383761-r7" x="366" y="483.6" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-19)">check-provider-yaml-valid&#160;|&#160;check-providers-init-file-missing&#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><tex
 [...]
+</text><text class="terminal-3102383761-r4" x="0" y="508" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-20)">│</text><text 
class="terminal-3102383761-r7" x="366" y="508" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-20)">check-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-3102383761-r4" x="1451.8" y="508" te [...]
+</text><text class="terminal-3102383761-r4" x="0" y="532.4" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-21)">│</text><text 
class="terminal-3102383761-r7" x="366" y="532.4" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-21)">check-revision-heads-map&#160;|&#160;check-safe-filter-usage-in-html&#160;|&#160;check-setup-order&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-3102383761-r4" x="1451.8" y="532.4" textLength="12.2" cli [...]
+</text><text class="terminal-3102383761-r4" x="0" y="556.8" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-22)">│</text><text 
class="terminal-3102383761-r7" x="366" y="556.8" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-22)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-3102383 [...]
+</text><text class="terminal-3102383761-r4" x="0" y="581.2" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-23)">│</text><text 
class="terminal-3102383761-r7" x="366" y="581.2" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-23)">check-system-tests-tocs&#160;|&#160;check-xml&#160;|&#160;codespell&#160;|&#160;compile-www-assets&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="termin [...]
+</text><text class="terminal-3102383761-r4" x="0" y="605.6" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-24)">│</text><text 
class="terminal-3102383761-r7" x="366" y="605.6" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-24)">compile-www-assets-dev&#160;|&#160;create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-3102383761-r4" x="1451.8" y="605.6" textLength="12.2" cli [...]
+</text><text class="terminal-3102383761-r4" x="0" y="630" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-25)">│</text><text 
class="terminal-3102383761-r7" x="366" y="630" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-25)">detect-private-key&#160;|&#160;doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-3102383761-r4" x="1451.8" y="630" te [...]
+</text><text class="terminal-3102383761-r4" x="0" y="654.4" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-26)">│</text><text 
class="terminal-3102383761-r7" x="366" y="654.4" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-26)">forbid-tabs&#160;|&#160;identity&#160;|&#160;insert-license&#160;|&#160;isort&#160;|&#160;lint-chart-schema&#160;|&#160;lint-css&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-3102383761-r4" x="1451.8" y [...]
+</text><text class="terminal-3102383761-r4" x="0" y="678.8" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-27)">│</text><text 
class="terminal-3102383761-r7" x="366" y="678.8" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-27)">lint-dockerfile&#160;|&#160;lint-helm-chart&#160;|&#160;lint-javascript&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|</text><text
 class="terminal-3102383761-r4" x="1451.8" y="678.8" textLength="12.2" 
clip-path="url(#termina [...]
+</text><text class="terminal-3102383761-r4" x="0" y="703.2" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-28)">│</text><text 
class="terminal-3102383761-r7" x="366" y="703.2" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-28)">lint-openapi&#160;|&#160;mixed-line-ending&#160;|&#160;pretty-format-json&#160;|&#160;pydocstyle&#160;|&#160;python-no-log-warn&#160;</text><text
 class="terminal-3102383761-r4" x="1451.8" y="703.2" textLength="12.2" 
clip-path="url(#termina [...]
+</text><text class="terminal-3102383761-r4" x="0" y="727.6" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-29)">│</text><text 
class="terminal-3102383761-r7" x="366" y="727.6" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-29)">|&#160;pyupgrade&#160;|&#160;rst-backticks&#160;|&#160;run-flake8&#160;|&#160;run-mypy&#160;|&#160;run-shellcheck&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><tex
 [...]
+</text><text class="terminal-3102383761-r4" x="0" y="752" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-30)">│</text><text 
class="terminal-3102383761-r7" x="366" y="752" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-30)">static-check-autoflake&#160;|&#160;trailing-whitespace&#160;|&#160;ts-compile-and-lint-javascript&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-3102383761-r4" x="1451.8" y="752" textLength="12.2" clip [...]
+</text><text class="terminal-3102383761-r4" x="0" y="776.4" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-31)">│</text><text 
class="terminal-3102383761-r7" x="366" y="776.4" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-31)">update-breeze-cmd-output&#160;|&#160;update-breeze-readme-config-hash&#160;|&#160;update-extras&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-3102383761-r4" x="1451.8" y="776.4" textLe [...]
+</text><text class="terminal-3102383761-r4" x="0" y="800.8" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-32)">│</text><text 
class="terminal-3102383761-r7" x="366" y="800.8" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-32)">update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-3102383761-r [...]
+</text><text class="terminal-3102383761-r4" x="0" y="825.2" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-33)">│</text><text 
class="terminal-3102383761-r7" x="366" y="825.2" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-33)">update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;update-setup-cfg-file&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-3102383761-r4" x="1451.8" y="825.2" textLe [...]
+</text><text class="terminal-3102383761-r4" x="0" y="849.6" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-34)">│</text><text 
class="terminal-3102383761-r7" x="366" y="849.6" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-34)">update-spelling-wordlist-to-be-sorted&#160;|&#160;update-supported-versions&#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="terminal-31 [...]
+</text><text class="terminal-3102383761-r4" x="0" y="874" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-35)">│</text><text 
class="terminal-3102383761-r7" x="366" y="874" textLength="1073.6" 
clip-path="url(#terminal-3102383761-line-35)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;yamllint&#160;|&#160;yesqa)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="terminal-3102383761- [...]
+</text><text class="terminal-3102383761-r4" x="0" y="898.4" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-36)">│</text><text 
class="terminal-3102383761-r5" x="24.4" y="898.4" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-36)">-</text><text 
class="terminal-3102383761-r5" x="36.6" y="898.4" textLength="61" 
clip-path="url(#terminal-3102383761-line-36)">-file</text><text 
class="terminal-3102383761-r6" x="317.2" y="898.4" textLength="24.4" 
clip-path="url(#terminal-31 [...]
+</text><text class="terminal-3102383761-r4" x="0" y="922.8" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-37)">│</text><text 
class="terminal-3102383761-r5" x="24.4" y="922.8" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-37)">-</text><text 
class="terminal-3102383761-r5" x="36.6" y="922.8" textLength="48.8" 
clip-path="url(#terminal-3102383761-line-37)">-all</text><text 
class="terminal-3102383761-r5" x="85.4" y="922.8" textLength="73.2" 
clip-path="url(#terminal-31 [...]
+</text><text class="terminal-3102383761-r4" x="0" y="947.2" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-38)">│</text><text 
class="terminal-3102383761-r5" x="24.4" y="947.2" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-38)">-</text><text 
class="terminal-3102383761-r5" x="36.6" y="947.2" textLength="61" 
clip-path="url(#terminal-3102383761-line-38)">-show</text><text 
class="terminal-3102383761-r5" x="97.6" y="947.2" textLength="195.2" 
clip-path="url(#terminal-31 [...]
+</text><text class="terminal-3102383761-r4" x="0" y="971.6" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-39)">│</text><text 
class="terminal-3102383761-r5" x="24.4" y="971.6" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-39)">-</text><text 
class="terminal-3102383761-r5" x="36.6" y="971.6" textLength="61" 
clip-path="url(#terminal-3102383761-line-39)">-last</text><text 
class="terminal-3102383761-r5" x="97.6" y="971.6" textLength="85.4" 
clip-path="url(#terminal-310 [...]
+</text><text class="terminal-3102383761-r4" x="0" y="996" textLength="1464" 
clip-path="url(#terminal-3102383761-line-40)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="terminal-3102383761-r2" x="1464" y="996" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-40)">
+</text><text class="terminal-3102383761-r4" x="0" y="1020.4" textLength="24.4" 
clip-path="url(#terminal-3102383761-line-41)">╭─</text><text 
class="terminal-3102383761-r4" x="24.4" y="1020.4" textLength="1415.2" 
clip-path="url(#terminal-3102383761-line-41)">&#160;Options&#160;───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text
 class="terminal-3102383761-r4" x="1439.6" y="1020.4" textLength="24.4" 
clip-path="url(#terminal- [...]
+</text><text class="terminal-3102383761-r4" x="0" y="1044.8" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-42)">│</text><text 
class="terminal-3102383761-r5" x="24.4" y="1044.8" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-42)">-</text><text 
class="terminal-3102383761-r5" x="36.6" y="1044.8" textLength="85.4" 
clip-path="url(#terminal-3102383761-line-42)">-commit</text><text 
class="terminal-3102383761-r5" x="122" y="1044.8" textLength="48.8" 
clip-path="url(#termi [...]
+</text><text class="terminal-3102383761-r4" x="0" y="1069.2" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-43)">│</text><text 
class="terminal-3102383761-r2" x="329.4" y="1069.2" textLength="183" 
clip-path="url(#terminal-3102383761-line-43)">exclusive&#160;with&#160;</text><text
 class="terminal-3102383761-r5" x="512.4" y="1069.2" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-43)">-</text><text 
class="terminal-3102383761-r5" x="524.6" y="1069.2" textLength="61" cl [...]
+</text><text class="terminal-3102383761-r4" x="0" y="1093.6" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-44)">│</text><text 
class="terminal-3102383761-r7" x="329.4" y="1093.6" textLength="1110.2" 
clip-path="url(#terminal-3102383761-line-44)">(TEXT)&#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;&
 [...]
+</text><text class="terminal-3102383761-r4" x="0" y="1118" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-45)">│</text><text 
class="terminal-3102383761-r5" x="24.4" y="1118" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-45)">-</text><text 
class="terminal-3102383761-r5" x="36.6" y="1118" textLength="97.6" 
clip-path="url(#terminal-3102383761-line-45)">-verbose</text><text 
class="terminal-3102383761-r6" x="280.6" y="1118" textLength="24.4" 
clip-path="url(#terminal-3 [...]
+</text><text class="terminal-3102383761-r4" x="0" y="1142.4" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-46)">│</text><text 
class="terminal-3102383761-r5" x="24.4" y="1142.4" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-46)">-</text><text 
class="terminal-3102383761-r5" x="36.6" y="1142.4" textLength="48.8" 
clip-path="url(#terminal-3102383761-line-46)">-dry</text><text 
class="terminal-3102383761-r5" x="85.4" y="1142.4" textLength="48.8" 
clip-path="url(#termina [...]
+</text><text class="terminal-3102383761-r4" x="0" y="1166.8" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-47)">│</text><text 
class="terminal-3102383761-r5" x="24.4" y="1166.8" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-47)">-</text><text 
class="terminal-3102383761-r5" x="36.6" y="1166.8" textLength="85.4" 
clip-path="url(#terminal-3102383761-line-47)">-github</text><text 
class="terminal-3102383761-r5" x="122" y="1166.8" textLength="134.2" 
clip-path="url(#term [...]
+</text><text class="terminal-3102383761-r4" x="0" y="1191.2" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-48)">│</text><text 
class="terminal-3102383761-r5" x="24.4" y="1191.2" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-48)">-</text><text 
class="terminal-3102383761-r5" x="36.6" y="1191.2" textLength="61" 
clip-path="url(#terminal-3102383761-line-48)">-help</text><text 
class="terminal-3102383761-r6" x="280.6" y="1191.2" textLength="24.4" 
clip-path="url(#termina [...]
+</text><text class="terminal-3102383761-r4" x="0" y="1215.6" textLength="1464" 
clip-path="url(#terminal-3102383761-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="terminal-3102383761-r2" x="1464" y="1215.6" textLength="12.2" 
clip-path="url(#terminal-3102383761-line-49)">
 </text>
     </g>
     </g>
diff --git a/setup.py b/setup.py
index 0c31292513..e8ca5816d8 100644
--- a/setup.py
+++ b/setup.py
@@ -927,12 +927,27 @@ def is_package_excluded(package: str, exclusion_list: 
List[str]) -> bool:
     return any(package.startswith(excluded_package) for excluded_package in 
exclusion_list)
 
 
+def remove_provider_limits(package: str) -> str:
+    """
+    Removes the limit for providers in devel_all to account for pre-release 
and development packages.
+
+    :param package: package name (beginning of it)
+    :return: true if package should be excluded
+    """
+    return (
+        package.split(">=")[0]
+        if package.startswith("apache-airflow-providers") and ">=" in package
+        else package
+    )
+
+
+devel = [remove_provider_limits(package) for package in devel]
 devel_all = [
-    package
+    remove_provider_limits(package)
     for package in devel_all
     if not is_package_excluded(package=package, 
exclusion_list=PACKAGES_EXCLUDED_FOR_ALL)
 ]
-
+devel_hadoop = [remove_provider_limits(package) for package in devel_hadoop]
 devel_ci = devel_all
 
 

Reply via email to