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

potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit e2ea6a7e563621569675b6802726bd245a5ee6e6
Author: Jarek Potiuk <[email protected]>
AuthorDate: Sun Apr 24 00:48:03 2022 +0200

    nIcer handling of cached Breeze parameters
    
    The cached parameters in Python Breeze were largely based on
    Bash implementation. They did the job but required pretty
    cumbersome synchronization of cached values with parameters
    passed and it was easy to forget about this as you had to
    do it sepearately in each method that had potentially
    cacheable parameters.
    
    In this PR we take advantage of the Click class hiarchy and their
    extendability. We've already extended Click Choice parameter
    to be much better formatted for long list of choices but we take
    this a bit further now with adding new type of parameter that
    can cache the values between runs.
    
    This has multiple advantages:
    
    * we do not have to remember about synchroniation - parameters
      automatically read/write their values from cache as they are
      used
    * we can automatically set parameters to default when wrong
      value is passed. This is nice as user does not have to
      re-run the command because the values are corrected
      on-the-flight.
    * the parameters can have their default values displayed in
      help screen (we use sentinel default that we can use to
      detect if value was passed from parameter or taken from default)
    * the parameters can also have their <current> values marked in
      list of choices - so the user in the help screen can see not
      only the default but also which value is currently selected
      and will be used if you do not pass any parameter.
---
 BREEZE.rst                                         |   9 +-
 dev/breeze/src/airflow_breeze/breeze.py            | 167 +++++++++++++++------
 .../build_image/ci/build_ci_image.py               |  19 +--
 .../build_image/prod/build_prod_image.py           |  18 +--
 dev/breeze/src/airflow_breeze/shell/enter_shell.py |  11 +-
 dev/breeze/src/airflow_breeze/utils/cache.py       |  32 +---
 dev/breeze/tests/test_build_image.py               |  60 --------
 dev/breeze/tests/test_prod_image.py                |  94 ------------
 images/breeze/output-build-image.svg               |   7 +-
 images/breeze/output-build-prod-image.svg          |   7 +-
 images/breeze/output-commands.svg                  |  12 +-
 images/breeze/output-config.svg                    |  15 +-
 images/breeze/output-docker-compose-tests.svg      |   5 +-
 images/breeze/output-find-newer-dependencies.svg   |   4 +-
 images/breeze/output-generate-constraints.svg      |   7 +-
 images/breeze/output-pull-image.svg                |   4 +-
 images/breeze/output-pull-prod-image.svg           |   4 +-
 images/breeze/output-shell.svg                     |  12 +-
 images/breeze/output-start-airflow.svg             |  15 +-
 images/breeze/output-verify-image.svg              |   5 +-
 images/breeze/output-verify-prod-image.svg         |   5 +-
 21 files changed, 200 insertions(+), 312 deletions(-)

diff --git a/BREEZE.rst b/BREEZE.rst
index 25f6c7c85f..f164e7fdff 100644
--- a/BREEZE.rst
+++ b/BREEZE.rst
@@ -363,19 +363,20 @@ You can use additional ``breeze`` flags to choose your 
environment. You can spec
 version to use, and backend (the meta-data database). Thanks to that, with 
Breeze, you can recreate the same
 environments as we have in matrix builds in the CI.
 
-For example, you can choose to run Python 3.7 tests with MySQL as backend and 
in the Docker environment as
-follows:
+For example, you can choose to run Python 3.7 tests with MySQL as backend and 
with mysql version 8
+as follows:
 
 .. code-block:: bash
 
-    breeze --python 3.7 --backend mysql
+    breeze --python 3.7 --backend mysql --mysql-version 8
 
 The choices you make are persisted in the ``./.build/`` cache directory so 
that next time when you use the
 ``breeze`` script, it could use the values that were used previously. This way 
you do not have to specify
 them when you run the script. You can delete the ``.build/`` directory in case 
you want to restore the
 default settings.
 
-The defaults when you run the Breeze environment are Python 3.7 version and 
SQLite database.
+You can see which value of the parameters that can be stored persistently in 
cache marked with >VALUE<
+in the help of the commands.
 
 Here is the part of Breeze video which is relevant (note that it refers to the 
old ``./breeze-legacy``
 command but it is very similar to current ``breeze`` command):
diff --git a/dev/breeze/src/airflow_breeze/breeze.py 
b/dev/breeze/src/airflow_breeze/breeze.py
index 4e522c7120..850e70a0cd 100755
--- a/dev/breeze/src/airflow_breeze/breeze.py
+++ b/dev/breeze/src/airflow_breeze/breeze.py
@@ -23,7 +23,7 @@ import subprocess
 import sys
 from dataclasses import dataclass
 from pathlib import Path
-from typing import IO, List, Optional, Tuple
+from typing import IO, Any, List, Optional, Tuple
 
 import rich
 
@@ -490,12 +490,9 @@ except ImportError:
 
 from click import Context, IntRange
 
-from airflow_breeze.build_image.ci.build_ci_image import build_ci_image, 
get_ci_image_build_params
+from airflow_breeze.build_image.ci.build_ci_image import build_ci_image
 from airflow_breeze.build_image.ci.build_ci_params import BuildCiParams
-from airflow_breeze.build_image.prod.build_prod_image import (
-    build_production_image,
-    get_prod_image_build_params,
-)
+from airflow_breeze.build_image.prod.build_prod_image import 
build_production_image
 from airflow_breeze.global_constants import (
     ALLOWED_BACKENDS,
     ALLOWED_BUILD_CACHE,
@@ -521,9 +518,10 @@ from airflow_breeze.pre_commit_ids import PRE_COMMIT_LIST
 from airflow_breeze.shell.enter_shell import enter_shell
 from airflow_breeze.utils.cache import (
     check_if_cache_exists,
+    check_if_values_allowed,
     delete_cache,
+    read_and_validate_value_from_cache,
     read_from_cache_file,
-    synchronize_parameters_with_cache,
     touch_cache_file,
     write_to_cache_file,
 )
@@ -560,6 +558,8 @@ class BetterChoice(click.Choice):
     that when the long list of choices does not wrap on words.
     """
 
+    name = "BetterChoice"
+
     def get_metavar(self, param) -> str:
         choices_str = " | ".join(self.choices)
         # Use curly braces to indicate a required argument.
@@ -574,6 +574,68 @@ class BetterChoice(click.Choice):
         return f"[{choices_str}]"
 
 
+@dataclass
+class CacheableDefault:
+    value: Any
+
+    def __repr__(self):
+        return self.value
+
+
+class CacheableChoice(click.Choice):
+    """
+    This class implements caching of values from the last use.
+    """
+
+    def convert(self, value, param, ctx):
+        param_name = param.envvar if param.envvar else param.name.upper()
+        if isinstance(value, CacheableDefault):
+            is_cached, new_value = 
read_and_validate_value_from_cache(param_name, value.value)
+            if not is_cached:
+                console.print(
+                    f"\n[bright_blue]Default value of {param.name} " 
f"parameter {new_value} used.[/]\n"
+                )
+        else:
+            allowed, allowed_values = check_if_values_allowed(param_name, 
value)
+            if allowed:
+                new_value = value
+                write_to_cache_file(param_name, new_value, 
check_allowed_values=False)
+            else:
+                new_value = allowed_values[0]
+                console.print(
+                    f"\n[yellow]The value {value} is not allowed for parameter 
{param.name}. "
+                    f"Setting default value to {new_value}"
+                )
+                write_to_cache_file(param_name, new_value, 
check_allowed_values=False)
+        return super().convert(new_value, param, ctx)
+
+    def get_metavar(self, param) -> str:
+        param_name = param.envvar if param.envvar else param.name.upper()
+        current_value = (
+            read_from_cache_file(param_name) if not output_file_for_recording 
else param.default.value
+        )
+        if not current_value:
+            current_choices = self.choices
+        else:
+            current_choices = [
+                f">{choice}<" if choice == current_value else choice for 
choice in self.choices
+            ]
+        choices_str = " | ".join(current_choices)
+        # Use curly braces to indicate a required argument.
+        if param.required and param.param_type_name == "argument":
+            return f"{{{choices_str}}}"
+
+        if param.param_type_name == "argument" and param.nargs == -1:
+            # avoid double [[ for multiple args
+            return f"{choices_str}"
+
+        # Use square braces to indicate an option or optional argument.
+        return f"[{choices_str}]"
+
+    def __init__(self, choices, case_sensitive: bool = True) -> None:
+        super().__init__(choices=choices, case_sensitive=case_sensitive)
+
+
 option_verbose = click.option(
     "-v", "--verbose", is_flag=True, help="Print verbose information about 
performed steps.", envvar='VERBOSE'
 )
@@ -597,16 +659,21 @@ option_answer = click.option(
 option_python = click.option(
     '-p',
     '--python',
-    type=BetterChoice(ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS),
-    help='Python major/minor version used in Airflow image for PROD/CI 
images.',
+    type=CacheableChoice(ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS),
+    default=CacheableDefault(value=ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS[0]),
+    show_default=True,
+    help='Python major/minor version used in Airflow image for images.',
     envvar='PYTHON_MAJOR_MINOR_VERSION',
 )
 
 option_backend = click.option(
     '-b',
     '--backend',
+    type=CacheableChoice(ALLOWED_BACKENDS),
+    default=CacheableDefault(value=ALLOWED_BACKENDS[0]),
+    show_default=True,
     help="Database backend to use.",
-    type=BetterChoice(ALLOWED_BACKENDS),
+    envvar='BACKEND',
 )
 
 option_integration = click.option(
@@ -617,15 +684,30 @@ option_integration = click.option(
 )
 
 option_postgres_version = click.option(
-    '-P', '--postgres-version', help="Version of Postgres.", 
type=BetterChoice(ALLOWED_POSTGRES_VERSIONS)
+    '-P',
+    '--postgres-version',
+    type=CacheableChoice(ALLOWED_POSTGRES_VERSIONS),
+    default=CacheableDefault(ALLOWED_POSTGRES_VERSIONS[0]),
+    show_default=True,
+    help="Version of Postgres used.",
 )
 
 option_mysql_version = click.option(
-    '-M', '--mysql-version', help="Version of MySQL.", 
type=BetterChoice(ALLOWED_MYSQL_VERSIONS)
+    '-M',
+    '--mysql-version',
+    help="Version of MySQL used.",
+    type=CacheableChoice(ALLOWED_MYSQL_VERSIONS),
+    default=CacheableDefault(ALLOWED_MYSQL_VERSIONS[0]),
+    show_default=True,
 )
 
 option_mssql_version = click.option(
-    '-S', '--mssql-version', help="Version of MsSQL.", 
type=BetterChoice(ALLOWED_MSSQL_VERSIONS)
+    '-S',
+    '--mssql-version',
+    help="Version of MsSQL used.",
+    type=CacheableChoice(ALLOWED_MSSQL_VERSIONS),
+    default=CacheableDefault(ALLOWED_MSSQL_VERSIONS[0]),
+    show_default=True,
 )
 
 option_executor = click.option(
@@ -967,7 +1049,7 @@ argument_packages = click.argument(
 
 @option_verbose
 @main.command()
-def version(verbose: bool):
+def version(verbose: bool, python: str):
     """Print information about version of apache-airflow-breeze."""
     console.print(ASCIIART, style=ASCIIART_STYLE)
     console.print(f"\n[bright_blue]Breeze version: {VERSION}[/]")
@@ -1176,13 +1258,12 @@ def build_image(
         with ci_group(f"Building images sequentially {python_versions}", 
enabled=with_ci_group):
             python_version_list = get_python_version_list(python_versions)
             for python in python_version_list:
-                params = get_ci_image_build_params(parameters_passed)
+                params = BuildCiParams(**parameters_passed)
                 params.python = python
                 params.answer = answer
                 run_build(ci_image_params=params)
     else:
-        params = get_ci_image_build_params(parameters_passed)
-        synchronize_parameters_with_cache(params, parameters_passed)
+        params = BuildCiParams(**parameters_passed)
         run_build(ci_image_params=params)
 
 
@@ -1254,7 +1335,6 @@ def pull_image(
         )
     else:
         image_params = BuildCiParams(image_tag=image_tag, python=python, 
github_repository=github_repository)
-        synchronize_parameters_with_cache(image_params, {"python": python})
         return_code, info = run_pull_image(
             image_params=image_params,
             dry_run=dry_run,
@@ -1293,9 +1373,7 @@ def verify_image(
 ):
     """Verify CI image."""
     if image_name is None:
-        build_params = get_ci_image_build_params(
-            {"python": python, "image_tag": image_tag, "github_repository": 
github_repository}
-        )
+        build_params = BuildCiParams(python=python, image_tag=image_tag, 
github_repository=github_repository)
         image_name = build_params.airflow_image_name_with_tag
     console.print(f"[bright_blue]Verifying CI image: {image_name}[/]")
     return_code, info = verify_an_image(
@@ -1400,13 +1478,12 @@ def build_prod_image(
         with ci_group(f"Building images sequentially {python_versions}", 
enabled=with_ci_group):
             python_version_list = get_python_version_list(python_versions)
             for python in python_version_list:
-                params = get_prod_image_build_params(parameters_passed)
+                params = BuildProdParams(**parameters_passed)
                 params.python = python
                 params.answer = answer
                 run_build(prod_image_params=params)
     else:
-        params = get_prod_image_build_params(parameters_passed)
-        synchronize_parameters_with_cache(params, parameters_passed)
+        params = BuildProdParams(**parameters_passed)
         run_build(prod_image_params=params)
 
 
@@ -1459,7 +1536,6 @@ def pull_prod_image(
         image_params = BuildProdParams(
             image_tag=image_tag, python=python, 
github_repository=github_repository
         )
-        synchronize_parameters_with_cache(image_params, {"python": python})
         return_code, info = run_pull_image(
             image_params=image_params,
             dry_run=dry_run,
@@ -1498,8 +1574,8 @@ def verify_prod_image(
 ):
     """Verify Production image."""
     if image_name is None:
-        build_params = get_prod_image_build_params(
-            {"python": python, "image_tag": image_tag, "github_repository": 
github_repository}
+        build_params = BuildProdParams(
+            python=python, image_tag=image_tag, 
github_repository=github_repository
         )
         image_name = build_params.airflow_image_name_with_tag
     console.print(f"[bright_blue]Verifying PROD image: {image_name}[/]")
@@ -1538,8 +1614,8 @@ def docker_compose_tests(
 ):
     """Run docker-compose tests."""
     if image_name is None:
-        build_params = get_prod_image_build_params(
-            {"python": python, "image_tag": image_tag, "github_repository": 
github_repository}
+        build_params = BuildProdParams(
+            python=python, image_tag=image_tag, 
github_repository=github_repository
         )
         image_name = build_params.airflow_image_name_with_tag
     console.print(f"[bright_blue]Running docker-compose with PROD image: 
{image_name}[/]")
@@ -1689,16 +1765,26 @@ def setup_autocomplete(verbose: bool, dry_run: bool, 
force: bool, answer: Option
 @main.command(name='config')
 @option_python
 @option_backend
+@option_postgres_version
+@option_mysql_version
+@option_mssql_version
 @click.option('-C/-c', '--cheatsheet/--no-cheatsheet', help="Enable/disable 
cheatsheet.", default=None)
 @click.option('-A/-a', '--asciiart/--no-asciiart', help="Enable/disable 
ASCIIart.", default=None)
-def change_config(python, backend, cheatsheet, asciiart):
+def change_config(
+    python: str,
+    backend: str,
+    postgres_version: str,
+    mysql_version: str,
+    mssql_version: str,
+    cheatsheet: bool,
+    asciiart: bool,
+):
     """
     Show/update configuration (Python, Backend, Cheatsheet, ASCIIART).
     """
     asciiart_file = "suppress_asciiart"
     cheatsheet_file = "suppress_cheatsheet"
-    python_file = 'PYTHON_MAJOR_MINOR_VERSION'
-    backend_file = 'BACKEND'
+
     if asciiart is not None:
         if asciiart:
             delete_cache(asciiart_file)
@@ -1713,12 +1799,6 @@ def change_config(python, backend, cheatsheet, asciiart):
         elif cheatsheet is not None:
             touch_cache_file(cheatsheet_file)
             console.print('[bright_blue]Disable Cheatsheet[/]')
-    if python is not None:
-        write_to_cache_file(python_file, python)
-        console.print(f'[bright_blue]Python default value set to: {python}[/]')
-    if backend is not None:
-        write_to_cache_file(backend_file, backend)
-        console.print(f'[bright_blue]Backend default value set to: 
{backend}[/]')
 
     def get_status(file: str):
         return "disabled" if check_if_cache_exists(file) else "enabled"
@@ -1726,8 +1806,13 @@ def change_config(python, backend, cheatsheet, asciiart):
     console.print()
     console.print("[bright_blue]Current configuration:[/]")
     console.print()
-    console.print(f"[bright_blue]* Python: 
{read_from_cache_file(python_file)}[/]")
-    console.print(f"[bright_blue]* Backend: 
{read_from_cache_file(backend_file)}[/]")
+    console.print(f"[bright_blue]* Python: {python}[/]")
+    console.print(f"[bright_blue]* Backend: {backend}[/]")
+    console.print()
+    console.print(f"[bright_blue]* Postgres version: {postgres_version}[/]")
+    console.print(f"[bright_blue]* MySQL version: {mysql_version}[/]")
+    console.print(f"[bright_blue]* MsSQL version: {mssql_version}[/]")
+    console.print()
     console.print(f"[bright_blue]* ASCIIART: {get_status(asciiart_file)}[/]")
     console.print(f"[bright_blue]* Cheatsheet: 
{get_status(cheatsheet_file)}[/]")
     console.print()
@@ -2162,7 +2247,6 @@ def generate_constraints(
             shell_params = ShellParams(
                 image_tag=image_tag, python=python, 
github_repository=github_repository, answer=answer
             )
-            synchronize_parameters_with_cache(shell_params, {"python": python})
             console.print("\n[yellow]Use this command to build the 
image:[/]\n")
             console.print(
                 f"     breeze build-image --python'{shell_params.python}' "
@@ -2191,7 +2275,6 @@ def generate_constraints(
             shell_params = ShellParams(
                 image_tag=image_tag, python=python, 
github_repository=github_repository, answer=answer
             )
-            synchronize_parameters_with_cache(shell_params, {"python": python})
             return_code, info = run_generate_constraints(
                 shell_params=shell_params,
                 dry_run=dry_run,
diff --git a/dev/breeze/src/airflow_breeze/build_image/ci/build_ci_image.py 
b/dev/breeze/src/airflow_breeze/build_image/ci/build_ci_image.py
index 9740da54b2..b1922521d3 100644
--- a/dev/breeze/src/airflow_breeze/build_image/ci/build_ci_image.py
+++ b/dev/breeze/src/airflow_breeze/build_image/ci/build_ci_image.py
@@ -17,14 +17,14 @@
 
 import multiprocessing as mp
 import sys
-from typing import Dict, List, Tuple
+from typing import List, Tuple
 
 from airflow_breeze.build_image.ci.build_ci_params import (
     OPTIONAL_CI_IMAGE_ARGS,
     REQUIRED_CI_IMAGE_ARGS,
     BuildCiParams,
 )
-from airflow_breeze.utils.cache import synchronize_parameters_with_cache, 
touch_cache_file
+from airflow_breeze.utils.cache import touch_cache_file
 from airflow_breeze.utils.ci_group import ci_group
 from airflow_breeze.utils.confirm import Answer, user_confirm
 from airflow_breeze.utils.console import console
@@ -189,21 +189,6 @@ def build_ci_image(
         return build_result.returncode, f"Image build: 
{ci_image_params.python}"
 
 
-def get_ci_image_build_params(parameters_passed: Dict) -> BuildCiParams:
-    """
-    Converts parameters received as dict into BuildCiParams. In case cacheable
-    parameters are missing, it reads the last used value for that parameter
-    from the cache and if it is not found, it uses default value for that 
parameter.
-
-    This method updates cached based on parameters passed via Dict.
-
-    :param parameters_passed: parameters to use when constructing BuildCiParams
-    """
-    ci_image_params = BuildCiParams(**parameters_passed)
-    synchronize_parameters_with_cache(ci_image_params, parameters_passed)
-    return ci_image_params
-
-
 def build_ci_image_in_parallel(
     verbose: bool, dry_run: bool, parallelism: int, python_version_list: 
List[str], **kwargs
 ):
diff --git a/dev/breeze/src/airflow_breeze/build_image/prod/build_prod_image.py 
b/dev/breeze/src/airflow_breeze/build_image/prod/build_prod_image.py
index 87383c455b..8aea74ce82 100644
--- a/dev/breeze/src/airflow_breeze/build_image/prod/build_prod_image.py
+++ b/dev/breeze/src/airflow_breeze/build_image/prod/build_prod_image.py
@@ -17,10 +17,9 @@
 """Command to build PROD image."""
 import contextlib
 import sys
-from typing import Dict, Tuple
+from typing import Tuple
 
 from airflow_breeze.build_image.prod.build_prod_params import BuildProdParams
-from airflow_breeze.utils.cache import synchronize_parameters_with_cache
 from airflow_breeze.utils.ci_group import ci_group
 from airflow_breeze.utils.console import console
 from airflow_breeze.utils.docker_command_utils import (
@@ -120,21 +119,6 @@ def 
check_docker_context_files(install_from_docker_context_files: bool):
             sys.exit(1)
 
 
-def get_prod_image_build_params(parameters_passed: Dict) -> BuildProdParams:
-    """
-    Converts parameters received as dict into BuildProdParams. In case 
cacheable
-    parameters are missing, it reads the last used value for that parameter
-    from the cache and if it is not found, it uses default value for that 
parameter.
-
-    This method updates cached based on parameters passed via Dict.
-
-    :param parameters_passed: parameters to use when constructing BuildCiParams
-    """
-    prod_image_params = BuildProdParams(**parameters_passed)
-    synchronize_parameters_with_cache(prod_image_params, parameters_passed)
-    return prod_image_params
-
-
 def build_production_image(
     verbose: bool, dry_run: bool, with_ci_group: bool, prod_image_params: 
BuildProdParams
 ) -> Tuple[int, str]:
diff --git a/dev/breeze/src/airflow_breeze/shell/enter_shell.py 
b/dev/breeze/src/airflow_breeze/shell/enter_shell.py
index 309cf316ea..933f85ca4d 100644
--- a/dev/breeze/src/airflow_breeze/shell/enter_shell.py
+++ b/dev/breeze/src/airflow_breeze/shell/enter_shell.py
@@ -21,10 +21,11 @@ from pathlib import Path
 from typing import Dict, Union
 
 from airflow_breeze import global_constants
-from airflow_breeze.build_image.ci.build_ci_image import build_ci_image, 
get_ci_image_build_params
+from airflow_breeze.build_image.ci.build_ci_image import build_ci_image
+from airflow_breeze.build_image.ci.build_ci_params import BuildCiParams
 from airflow_breeze.shell.shell_params import ShellParams
 from airflow_breeze.utils.cache import (
-    check_cached_value_is_allowed,
+    read_and_validate_value_from_cache,
     read_from_cache_file,
     write_to_cache_file,
 )
@@ -62,7 +63,7 @@ def synchronize_cached_params(parameters_passed_by_the_user: 
Dict[str, str]) ->
                 write_to_cache_file(param_name, user_param_value)
             else:
                 param_value = getattr(global_constants, 
SOURCE_OF_DEFAULT_VALUES_FOR_VARIABLES[param])
-                _, user_param_value = 
check_cached_value_is_allowed(param_name, param_value)
+                _, user_param_value = 
read_and_validate_value_from_cache(param_name, param_value)
             updated_params[param] = user_param_value
     return updated_params
 
@@ -119,9 +120,7 @@ def run_shell_with_build_image_checks(
     build_ci_image_check_cache = Path(
         BUILD_CACHE_DIR, shell_params.airflow_branch, 
f".built_{shell_params.python}"
     )
-    ci_image_params = get_ci_image_build_params(
-        {"python": shell_params.python, "upgrade_to_newer_dependencies": 
"false"}
-    )
+    ci_image_params = BuildCiParams(python=shell_params.python, 
upgrade_to_newer_dependencies="false")
     if build_ci_image_check_cache.exists():
         console.print(f'[bright_blue]{shell_params.the_image_type} image 
already built locally.[/]')
     else:
diff --git a/dev/breeze/src/airflow_breeze/utils/cache.py 
b/dev/breeze/src/airflow_breeze/utils/cache.py
index d2e1117ab3..2319ee4505 100644
--- a/dev/breeze/src/airflow_breeze/utils/cache.py
+++ b/dev/breeze/src/airflow_breeze/utils/cache.py
@@ -24,7 +24,7 @@ the shell with the same version as the "previous run".
 
 import sys
 from pathlib import Path
-from typing import Any, Dict, List, Optional, Tuple
+from typing import Any, List, Optional, Tuple
 
 from airflow_breeze import global_constants
 from airflow_breeze.utils.console import console
@@ -70,9 +70,11 @@ def write_to_cache_file(param_name: str, param_value: str, 
check_allowed_values:
         sys.exit(1)
 
 
-def check_cached_value_is_allowed(param_name: str, default_param_value: str) 
-> Tuple[bool, Optional[str]]:
+def read_and_validate_value_from_cache(
+    param_name: str, default_param_value: str
+) -> Tuple[bool, Optional[str]]:
     """
-    Checks if the cache is present and whether its value is valid according to 
current rules.
+    Reads and validates value from cache is present and whether its value is 
valid according to current rules.
     It could happen that the allowed values have been modified since the last 
time cached value was set,
     so this check is crucial to check outdated values.
     If the value is not set or in case the cached value stored is not 
currently allowed,
@@ -114,27 +116,3 @@ def delete_cache(param_name: str) -> bool:
         (Path(BUILD_CACHE_DIR) / f".{param_name}").unlink()
         deleted = True
     return deleted
-
-
-def synchronize_parameters_with_cache(
-    image_params: Any, parameters_passed_via_command_line: Dict[str, str]
-) -> None:
-    """
-    Synchronizes cacheable parameters between executions. It reads values from 
cache and updates
-    them wen done. It is only done for parameters that are relevant for image 
build.
-
-    :param image_params: parameters of the build
-    :param parameters_passed_via_command_line:  parameters that were passed by 
command line
-    """
-    cacheable_parameters = {
-        'python': 'PYTHON_MAJOR_MINOR_VERSION',
-    }
-    for parameter, cache_key in cacheable_parameters.items():
-        value_from_parameter = 
parameters_passed_via_command_line.get(parameter)
-        if value_from_parameter:
-            write_to_cache_file(cache_key, value_from_parameter, 
check_allowed_values=True)
-            setattr(image_params, parameter, value_from_parameter)
-        else:
-            is_cached, value = check_cached_value_is_allowed(cache_key, 
getattr(image_params, parameter))
-            if is_cached:
-                setattr(image_params, parameter, value)
diff --git a/dev/breeze/tests/test_build_image.py 
b/dev/breeze/tests/test_build_image.py
deleted file mode 100644
index 77c9c7759d..0000000000
--- a/dev/breeze/tests/test_build_image.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-from unittest.mock import patch
-
-import pytest
-
-from airflow_breeze.build_image.ci.build_ci_image import 
get_ci_image_build_params
-
-
[email protected](
-    'parameters, expected_build_params, cached_values, written_cache_version',
-    [
-        ({}, {"python": "3.7"}, {}, False),  # default value no params
-        ({"python": "3.8"}, {"python": "3.8"}, {}, "3.8"),  # default value 
override params
-        ({}, {"python": "3.8"}, {'PYTHON_MAJOR_MINOR_VERSION': "3.8"}, False), 
 # value from cache
-        (
-            {"python": "3.9"},
-            {"python": "3.9"},
-            {'PYTHON_MAJOR_MINOR_VERSION': "3.8"},
-            "3.9",
-        ),  # override cache with passed param
-    ],
-)
-def test_get_image_params(parameters, expected_build_params, cached_values, 
written_cache_version):
-    with patch('airflow_breeze.utils.cache.read_from_cache_file') as 
read_from_cache_mock, patch(
-        'airflow_breeze.utils.cache.check_if_cache_exists'
-    ) as check_if_cache_exists_mock, patch(
-        'airflow_breeze.utils.cache.write_to_cache_file'
-    ) as write_to_cache_file_mock, patch(
-        'airflow_breeze.utils.cache.check_cached_value_is_allowed'
-    ) as check_cache_and_write_mock:
-        check_if_cache_exists_mock.return_value = True
-        check_cache_and_write_mock.side_effect = lambda cache_key, 
default_value: (
-            cache_key in cached_values,
-            cached_values[cache_key] if cache_key in cached_values else 
default_value,
-        )
-        read_from_cache_mock.side_effect = lambda param_name: 
cached_values.get(param_name)
-        build_parameters = get_ci_image_build_params(parameters)
-        for param, param_value in expected_build_params.items():
-            assert getattr(build_parameters, param) == param_value
-        if written_cache_version:
-            write_to_cache_file_mock.assert_called_once_with(
-                "PYTHON_MAJOR_MINOR_VERSION", written_cache_version, 
check_allowed_values=True
-            )
-        else:
-            write_to_cache_file_mock.assert_not_called()
diff --git a/dev/breeze/tests/test_prod_image.py 
b/dev/breeze/tests/test_prod_image.py
deleted file mode 100644
index a93e3ecf04..0000000000
--- a/dev/breeze/tests/test_prod_image.py
+++ /dev/null
@@ -1,94 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-from typing import Dict, Union
-from unittest.mock import patch
-
-import pytest
-
-from airflow_breeze.build_image.prod.build_prod_image import 
get_prod_image_build_params
-
-default_params: Dict[str, Union[str, bool]] = {
-    'docker_cache': "pulled",
-    'disable_mysql_client_installation': False,
-    'disable_mssql_client_installation': False,
-    'disable_postgres_client_installation': False,
-    'install_from_docker_context_files': False,
-    'disable_airflow_repo_cache': False,
-    'upgrade_to_newer_dependencies': "false",
-    'install_providers_from_sources': False,
-    'cleanup_docker_context_files': False,
-    'prepare_buildx_cache': False,
-}
-
-params_python8 = {**default_params, "python": "3.8"}  # type: Dict[str, 
Union[str, bool]]
-
-params_python9 = {**default_params, "python": "3.9"}  # type: Dict[str, 
Union[str, bool]]
-
-
[email protected](
-    'description, parameters, expected_build_params, cached_values, 
written_cache_version, check_if_allowed',
-    [
-        ("default value no cache", default_params, {"python": "3.7"}, {}, 
"3.7", False),
-        ("passed value different no cache", params_python8, {"python": "3.8"}, 
{}, "3.8", True),
-        (
-            "passed value same as cache",
-            params_python8,
-            {"python": "3.8"},
-            {'PYTHON_MAJOR_MINOR_VERSION': "3.8"},
-            "3.8",
-            True,
-        ),
-        (
-            "passed value different than cache",
-            params_python9,
-            {"python": "3.9"},
-            {'PYTHON_MAJOR_MINOR_VERSION': "3.8"},
-            "3.9",
-            True,
-        ),
-    ],
-)
-def test_get_image_params(
-    description, parameters, expected_build_params, cached_values, 
written_cache_version, check_if_allowed
-):
-    with patch('airflow_breeze.utils.cache.read_from_cache_file') as 
read_from_cache_mock, patch(
-        'airflow_breeze.utils.cache.check_if_cache_exists'
-    ) as check_if_cache_exists_mock, patch(
-        'airflow_breeze.utils.cache.write_to_cache_file'
-    ) as write_to_cache_file_mock, patch(
-        'airflow_breeze.utils.cache.read_from_cache_file'
-    ) as read_from_cache_file:
-        check_if_cache_exists_mock.return_value = True
-        read_from_cache_file.side_effect = lambda cache_key: (
-            cache_key in cached_values,
-            cached_values[cache_key] if cache_key in cached_values else None,
-        )
-        read_from_cache_mock.side_effect = lambda param_name: 
cached_values.get(param_name)
-        build_parameters = get_prod_image_build_params(parameters)
-        for param, param_value in expected_build_params.items():
-            assert getattr(build_parameters, param) == param_value
-        if written_cache_version:
-            if check_if_allowed:
-                write_to_cache_file_mock.assert_called_once_with(
-                    "PYTHON_MAJOR_MINOR_VERSION", written_cache_version, 
check_allowed_values=True
-                )
-            else:
-                write_to_cache_file_mock.assert_called_once_with(
-                    "PYTHON_MAJOR_MINOR_VERSION", written_cache_version
-                )
-        else:
-            write_to_cache_file_mock.assert_not_called()
diff --git a/images/breeze/output-build-image.svg 
b/images/breeze/output-build-image.svg
index d2693055b4..0eceba7182 100644
--- a/images/breeze/output-build-image.svg
+++ b/images/breeze/output-build-image.svg
@@ -1,4 +1,4 @@
-<svg width="1720.0" height="1506" viewBox="0 0 1720.0 1506"
+<svg width="1720.0" height="1528" viewBox="0 0 1720.0 1528"
      xmlns="http://www.w3.org/2000/svg";>
     <style>
         @font-face {
@@ -121,8 +121,9 @@
 <div><span class="r1"> </span><span class="r1">Build CI image. Include 
building multiple images for all python versions (sequentially).                
              </span><span class="r1"> </span></div>
 <div><span class="r1">                                                         
                                                               </span></div>
 <div><span class="r4">╭─ Basic usage 
────────────────────────────────────────────────────────────────────────────────────────────────────────╮</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">                         
</span><span class="r6">-p</span><span class="r1">  </span><span 
class="r1">Python major/minor version used in Airflow image for PROD/CI images. 
        </span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">                                
       </span><span class="r7">(3.7 | 3.8 | 3.9 | 3.10)                         
                   </span><span class="r1">         </span><span class="r1">  
</span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">                         
</span><span class="r6">-p</span><span class="r1">  </span><span 
class="r1">Python major/minor version used in Airflow image for images.         
        </span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                                
       </span><span class="r7">(&gt;3.7&lt; | 3.8 | 3.9 | 3.10)                 
                 </span><span class="r1">                 </span><span 
class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                                
       </span><span class="r4">[default: 3.7]                                   
           </span><span class="r1">                 </span><span class="r1">  
</span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--upgrade-to-newer-dependencies</span><span class="r1">  
</span><span class="r6">-u</span><span class="r1">  </span><span 
class="r1">When other than &quot;false&quot;, upgrade all PIP packages to 
latest.</span><span class="r1"> </span><span class="r7">(TEXT)</span><span 
class="r1">          </span><span class="r1">  </span><span 
class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">                                
       </span><span class="r4">[default: false]                                 
           </span><span class="r1"> </span><span class="r1">                
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--debian-version</span><span class="r1">                 
</span><span class="r6">-d</span><span class="r1">  </span><span 
class="r1">Debian version used for the image.</span><span class="r1"> 
</span><span class="r7">(bullseye | buster)</span><span class="r1"> 
</span><span class="r4">[default: bullseye]</span><span class="r1">   
</span><span class="r1">  </span><span class="r4">│</span></div>
diff --git a/images/breeze/output-build-prod-image.svg 
b/images/breeze/output-build-prod-image.svg
index 1a0471b2af..16f732b769 100644
--- a/images/breeze/output-build-prod-image.svg
+++ b/images/breeze/output-build-prod-image.svg
@@ -1,4 +1,4 @@
-<svg width="1720.0" height="1836" viewBox="0 0 1720.0 1836"
+<svg width="1720.0" height="1858" viewBox="0 0 1720.0 1858"
      xmlns="http://www.w3.org/2000/svg";>
     <style>
         @font-face {
@@ -121,8 +121,9 @@
 <div><span class="r1"> </span><span class="r1">Build Production image. Include 
building multiple images for all or selected Python versions sequentially.      
      </span><span class="r1"> </span></div>
 <div><span class="r1">                                                         
                                                               </span></div>
 <div><span class="r4">╭─ Basic usage 
────────────────────────────────────────────────────────────────────────────────────────────────────────╮</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">                         
</span><span class="r6">-p</span><span class="r1">  </span><span 
class="r1">Python major/minor version used in Airflow image for PROD/CI images. 
        </span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">                                
       </span><span class="r7">(3.7 | 3.8 | 3.9 | 3.10)                         
                   </span><span class="r1">         </span><span class="r1">  
</span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">                         
</span><span class="r6">-p</span><span class="r1">  </span><span 
class="r1">Python major/minor version used in Airflow image for images.         
        </span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                                
       </span><span class="r7">(&gt;3.7&lt; | 3.8 | 3.9 | 3.10)                 
                 </span><span class="r1">                 </span><span 
class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                                
       </span><span class="r4">[default: 3.7]                                   
           </span><span class="r1">                 </span><span class="r1">  
</span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--install-airflow-version</span><span class="r1">        
</span><span class="r6">-V</span><span class="r1">  </span><span 
class="r1">Install version of Airflow from PyPI.</span><span class="r1"> 
</span><span class="r7">(TEXT)</span><span class="r1">                          
       </span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--upgrade-to-newer-dependencies</span><span class="r1">  
</span><span class="r6">-u</span><span class="r1">  </span><span 
class="r1">When other than &quot;false&quot;, upgrade all PIP packages to 
latest.</span><span class="r1"> </span><span class="r7">(TEXT)</span><span 
class="r1">          </span><span class="r1">  </span><span 
class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">                                
       </span><span class="r4">[default: false]                                 
           </span><span class="r1"> </span><span class="r1">                
</span><span class="r1">  </span><span class="r4">│</span></div>
diff --git a/images/breeze/output-commands.svg 
b/images/breeze/output-commands.svg
index 78dcf803f3..e5cdec13fb 100644
--- a/images/breeze/output-commands.svg
+++ b/images/breeze/output-commands.svg
@@ -119,13 +119,13 @@
 <div><span class="r2"> </span><span class="r3">Usage: </span><span 
class="r2">breeze [OPTIONS] COMMAND [ARGS]...                                   
                                           </span></div>
 <div><span class="r2">                                                         
                                                               </span></div>
 <div><span class="r4">╭─ Basic flags for the default (shell) command 
────────────────────────────────────────────────────────────────────────╮</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">               </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for PROD/CI images.                   
</span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">                             
</span><span class="r7">(3.7 | 3.8 | 3.9 | 3.10)                                
            </span><span class="r1">                   </span><span class="r1"> 
 </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--backend</span><span class="r1">              </span><span 
class="r6">-b</span><span class="r1">  </span><span class="r1">Database backend 
to use.</span><span class="r1"> </span><span class="r7">(sqlite | mysql | 
postgres | mssql)</span><span class="r1">                           
</span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">               </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for images.</span><span class="r1"> 
</span><span class="r7">(&gt;3.7&lt; | 3.8 | 3.9 | 3.10)</span><span 
class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                             
</span><span class="r4">[default: 3.7]                                          
    </span><span class="r1"> </span><span class="r1">                          
</span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--backend</span><span class="r1">              </span><span 
class="r6">-b</span><span class="r1">  </span><span class="r1">Database backend 
to use.</span><span class="r1"> </span><span class="r7">(&gt;sqlite&lt; | mysql 
| postgres | mssql)</span><span class="r1"> </span><span class="r4">[default: 
sqlite]</span><span class="r1">       </span><span class="r1">  </span><span 
class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--use-airflow-version</span><span class="r1">  </span><span 
class="r6">-V</span><span class="r1">  </span><span class="r1">Use (reinstall 
at entry) Airflow version from PyPI.</span><span class="r1"> </span><span 
class="r7">(TEXT)</span><span class="r1">                             
</span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--postgres-version</span><span class="r1">     </span><span 
class="r6">-P</span><span class="r1">  </span><span class="r1">Version of 
Postgres.</span><span class="r1"> </span><span class="r7">(10 | 11 | 12 | 
13)</span><span class="r1">                                               
</span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--mysql-version</span><span class="r1">        </span><span 
class="r6">-M</span><span class="r1">  </span><span class="r1">Version of 
MySQL.</span><span class="r1"> </span><span class="r7">(5.7 | 8)</span><span 
class="r1">                                                            
</span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--mssql-version</span><span class="r1">        </span><span 
class="r6">-S</span><span class="r1">  </span><span class="r1">Version of 
MsSQL.</span><span class="r1"> </span><span class="r7">(2017-latest | 
2019-latest)</span><span class="r1">                                          
</span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--postgres-version</span><span class="r1">     </span><span 
class="r6">-P</span><span class="r1">  </span><span class="r1">Version of 
Postgres used.</span><span class="r1"> </span><span class="r7">(&gt;10&lt; | 11 
| 12 | 13)</span><span class="r1"> </span><span class="r4">[default: 
10]</span><span class="r1">                          </span><span class="r1">  
</span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--mysql-version</span><span class="r1">        </span><span 
class="r6">-M</span><span class="r1">  </span><span class="r1">Version of MySQL 
used.</span><span class="r1"> </span><span class="r7">(&gt;5.7&lt; | 
8)</span><span class="r1"> </span><span class="r4">[default: 5.7]</span><span 
class="r1">                                      </span><span class="r1">  
</span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--mssql-version</span><span class="r1">        </span><span 
class="r6">-S</span><span class="r1">  </span><span class="r1">Version of MsSQL 
used.</span><span class="r1"> </span><span class="r7">(&gt;2017-latest&lt; | 
2019-latest)</span><span class="r1"> </span><span class="r4">[default: 
2017-latest]</span><span class="r1">            </span><span class="r1">  
</span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--forward-credentials</span><span class="r1">  </span><span 
class="r6">-f</span><span class="r1">  </span><span class="r1">Forward local 
credentials to container when running.                                   
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--db-reset</span><span class="r1">             </span><span 
class="r6">-d</span><span class="r1">  </span><span class="r1">Reset DB when 
entering the container.                                                  
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span 
class="r4">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span></div>
diff --git a/images/breeze/output-config.svg b/images/breeze/output-config.svg
index 92624fa654..5d20779549 100644
--- a/images/breeze/output-config.svg
+++ b/images/breeze/output-config.svg
@@ -1,4 +1,4 @@
-<svg width="1720.0" height="692" viewBox="0 0 1720.0 692"
+<svg width="1720.0" height="802" viewBox="0 0 1720.0 802"
      xmlns="http://www.w3.org/2000/svg";>
     <style>
         @font-face {
@@ -121,14 +121,19 @@
 <div><span class="r1"> </span><span class="r1">Show/update configuration 
(Python, Backend, Cheatsheet, ASCIIART).                                        
            </span><span class="r1"> </span></div>
 <div><span class="r1">                                                         
                                                               </span></div>
 <div><span class="r4">╭─ Config flags 
───────────────────────────────────────────────────────────────────────────────────────────────────────╮</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">                      </span><span 
class="r6">-p</span><span class="r1">     </span><span class="r1">Python 
major/minor version used in Airflow image for PROD/CI images.         
</span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">                                
       </span><span class="r7">(3.7 | 3.8 | 3.9 | 3.10)                         
                   </span><span class="r1">         </span><span class="r1">  
</span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--backend</span><span class="r1">                     </span><span 
class="r6">-b</span><span class="r1">     </span><span class="r1">Database 
backend to use.</span><span class="r1"> </span><span class="r7">(sqlite | mysql 
| postgres | mssql)</span><span class="r1">                 </span><span 
class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">                      </span><span 
class="r6">-p</span><span class="r1">     </span><span class="r1">Python 
major/minor version used in Airflow image for images.                 
</span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                                
       </span><span class="r7">(&gt;3.7&lt; | 3.8 | 3.9 | 3.10)                 
                 </span><span class="r1">                 </span><span 
class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                                
       </span><span class="r4">[default: 3.7]                                   
           </span><span class="r1">                 </span><span class="r1">  
</span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--backend</span><span class="r1">                     </span><span 
class="r6">-b</span><span class="r1">     </span><span class="r1">Database 
backend to use.</span><span class="r1"> </span><span class="r7">(&gt;sqlite&lt; 
| mysql | postgres | mssql)</span><span class="r1">               </span><span 
class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                                
       </span><span class="r4">[default: sqlite]       </span><span class="r1"> 
</span><span class="r1">                                                    
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--cheatsheet</span><span class="r1">/</span><span 
class="r5">--no-cheatsheet</span><span class="r1">  </span><span 
class="r6">-C</span><span class="r1">/</span><span class="r6">-c</span><span 
class="r1">  </span><span class="r1">Enable/disable cheatsheet.                 
                                  </span><span class="r1">  </span><span 
class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--asciiart</span><span class="r1">/</span><span 
class="r5">--no-asciiart</span><span class="r1">      </span><span 
class="r6">-A</span><span class="r1">/</span><span class="r6">-a</span><span 
class="r1">  </span><span class="r1">Enable/disable ASCIIart.                   
                                  </span><span class="r1">  </span><span 
class="r4">│</span></div>
 <div><span 
class="r4">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span></div>
 <div><span class="r4">╭─ Options 
────────────────────────────────────────────────────────────────────────────────────────────────────────────╮</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--help</span><span class="r1">  </span><span 
class="r6">-h</span><span class="r1">  </span><span class="r1">Show this 
message and exit.                                                               
            </span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--postgres-version</span><span class="r1">  </span><span 
class="r6">-P</span><span class="r1">  </span><span class="r1">Version of 
Postgres used.</span><span class="r1"> </span><span class="r7">(&gt;10&lt; | 11 
| 12 | 13)</span><span class="r1"> </span><span class="r4">[default: 
10]</span><span class="r1">                             </span><span 
class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--mysql-version</span><span class="r1">     </span><span 
class="r6">-M</span><span class="r1">  </span><span class="r1">Version of MySQL 
used.</span><span class="r1"> </span><span class="r7">(&gt;5.7&lt; | 
8)</span><span class="r1"> </span><span class="r4">[default: 5.7]</span><span 
class="r1">                                         </span><span class="r1">  
</span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--mssql-version</span><span class="r1">     </span><span 
class="r6">-S</span><span class="r1">  </span><span class="r1">Version of MsSQL 
used.</span><span class="r1"> </span><span class="r7">(&gt;2017-latest&lt; | 
2019-latest)</span><span class="r1"> </span><span class="r4">[default: 
2017-latest]</span><span class="r1">               </span><span class="r1">  
</span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--help</span><span class="r1">              </span><span 
class="r6">-h</span><span class="r1">  </span><span class="r1">Show this 
message and exit.                                                               
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span 
class="r4">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span></div>
 <div><span class="r1"></span><span class="r1">                                 
                                                                                
       </span></div>
                     </div>
diff --git a/images/breeze/output-docker-compose-tests.svg 
b/images/breeze/output-docker-compose-tests.svg
index 7dc3510792..573b17bc55 100644
--- a/images/breeze/output-docker-compose-tests.svg
+++ b/images/breeze/output-docker-compose-tests.svg
@@ -1,4 +1,4 @@
-<svg width="1720.0" height="714" viewBox="0 0 1720.0 714"
+<svg width="1720.0" height="736" viewBox="0 0 1720.0 736"
      xmlns="http://www.w3.org/2000/svg";>
     <style>
         @font-face {
@@ -122,7 +122,8 @@
 <div><span class="r1">                                                         
                                                               </span></div>
 <div><span class="r4">╭─ Docker-compose tests flag 
──────────────────────────────────────────────────────────────────────────────────────────╮</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--image-name</span><span class="r1">  </span><span 
class="r6">-n</span><span class="r1">  Name of the image to verify (overrides 
</span><span class="r5">--python</span><span class="r1"> and </span><span 
class="r5">--image-tag</span><span class="r1">). </span><span 
class="r7">(TEXT)</span><span class="r1">                        </span><span 
class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">      </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for PROD/CI images.</span><span 
class="r1"> </span><span class="r7">(3.7 | 3.8 | 3.9 | 3.10)</span><span 
class="r1">   </span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">      </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for images.</span><span class="r1"> 
</span><span class="r7">(&gt;3.7&lt; | 3.8 | 3.9 | 3.10)</span><span 
class="r1">         </span><span class="r1">  </span><span 
class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                    
</span><span class="r4">[default: 3.7]                                          
    </span><span class="r1"> </span><span class="r1">                           
        </span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--image-tag</span><span class="r1">   </span><span 
class="r6">-t</span><span class="r1">  </span><span class="r1">Tag added to the 
default naming conventions of Airflow CI/PROD images.</span><span class="r1"> 
</span><span class="r7">(TEXT)</span><span class="r1">                   
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span 
class="r4">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span></div>
 <div><span class="r4">╭─ Options 
────────────────────────────────────────────────────────────────────────────────────────────────────────────╮</span></div>
diff --git a/images/breeze/output-find-newer-dependencies.svg 
b/images/breeze/output-find-newer-dependencies.svg
index cab8045a1b..0fbf3aa534 100644
--- a/images/breeze/output-find-newer-dependencies.svg
+++ b/images/breeze/output-find-newer-dependencies.svg
@@ -121,8 +121,8 @@
 <div><span class="r1"> </span><span class="r1">Finds which dependencies are 
being upgraded.                                                                 
         </span><span class="r1"> </span></div>
 <div><span class="r1">                                                         
                                                               </span></div>
 <div><span class="r4">╭─ Find newer dependencies flags 
──────────────────────────────────────────────────────────────────────────────────────╮</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">               </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for PROD/CI images.                   
</span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">                             
</span><span class="r7">(3.7 | 3.8 | 3.9 | 3.10)                                
            </span><span class="r1">                   </span><span class="r1"> 
 </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">               </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for images.</span><span class="r1"> 
</span><span class="r7">(&gt;3.7&lt; | 3.8 | 3.9 | 3.10)</span><span 
class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                             
</span><span class="r4">[default: 3.7]                                          
    </span><span class="r1"> </span><span class="r1">                          
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--timezone</span><span class="r1">             </span><span 
class="r1">  </span><span class="r1">  </span><span class="r1">Timezone to use 
during the check</span><span class="r1"> </span><span 
class="r7">(TEXT)</span><span class="r1">                                       
         </span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--constraints-branch</span><span class="r1">   </span><span 
class="r1">  </span><span class="r1">  </span><span class="r1">Constraint 
branch to use to find newer dependencies</span><span class="r1"> </span><span 
class="r7">(TEXT)</span><span class="r1">                             
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--updated-on-or-after</span><span class="r1">  </span><span 
class="r1">  </span><span class="r1">  </span><span class="r1">Date when the 
release was updated after</span><span class="r1"> </span><span 
class="r7">(TEXT)</span><span class="r1">                                       
  </span><span class="r1">  </span><span class="r4">│</span></div>
diff --git a/images/breeze/output-generate-constraints.svg 
b/images/breeze/output-generate-constraints.svg
index 7f92500124..298da74edc 100644
--- a/images/breeze/output-generate-constraints.svg
+++ b/images/breeze/output-generate-constraints.svg
@@ -1,4 +1,4 @@
-<svg width="1720.0" height="934" viewBox="0 0 1720.0 934"
+<svg width="1720.0" height="956" viewBox="0 0 1720.0 956"
      xmlns="http://www.w3.org/2000/svg";>
     <style>
         @font-face {
@@ -122,8 +122,9 @@
 <div><span class="r1">                                                         
                                                               </span></div>
 <div><span class="r4">╭─ Generate constraints flags 
─────────────────────────────────────────────────────────────────────────────────────────╮</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--image-tag</span><span class="r1">                  </span><span 
class="r6">-t</span><span class="r1">  </span><span class="r1">Tag added to the 
default naming conventions of Airflow CI/PROD images.</span><span class="r1"> 
</span><span class="r7">(TEXT)</span><span class="r1">    </span><span 
class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">                     </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for PROD/CI images.             
</span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">                                
   </span><span class="r7">(3.7 | 3.8 | 3.9 | 3.10)                             
               </span><span class="r1">             </span><span class="r1">  
</span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">                     </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for images.                     
</span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                                
   </span><span class="r7">(&gt;3.7&lt; | 3.8 | 3.9 | 3.10)                     
             </span><span class="r1">                     </span><span 
class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                                
   </span><span class="r4">[default: 3.7]                                       
       </span><span class="r1">                     </span><span class="r1">  
</span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--generate-constraints-mode</span><span class="r1">  </span><span 
class="r1">  </span><span class="r1">  </span><span class="r1">Mode of 
generating constraints</span><span class="r1"> </span><span 
class="r7">(source-providers | pypi-providers | no-providers)</span><span 
class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">                                
   </span><span class="r4">[default: source-providers]   </span><span 
class="r1"> </span><span class="r1">                                            
      </span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span 
class="r4">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span></div>
diff --git a/images/breeze/output-pull-image.svg 
b/images/breeze/output-pull-image.svg
index e77af30370..c5ea6d91ae 100644
--- a/images/breeze/output-pull-image.svg
+++ b/images/breeze/output-pull-image.svg
@@ -122,8 +122,8 @@
 <div><span class="r1">                                                         
                                                               </span></div>
 <div><span class="r4">╭─ Pull image flags 
───────────────────────────────────────────────────────────────────────────────────────────────────╮</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--image-tag</span><span class="r1">       </span><span 
class="r6">-t</span><span class="r1">  </span><span class="r1">Tag added to the 
default naming conventions of Airflow CI/PROD images.</span><span class="r1"> 
</span><span class="r7">(TEXT)</span><span class="r1">               
</span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">          </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for PROD/CI images.                   
     </span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">                        
</span><span class="r7">(3.7 | 3.8 | 3.9 | 3.10)                                
            </span><span class="r1">                        </span><span 
class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">          </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for images.</span><span class="r1"> 
</span><span class="r7">(&gt;3.7&lt; | 3.8 | 3.9 | 3.10)</span><span 
class="r1">     </span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                        
</span><span class="r4">[default: 3.7]                                          
    </span><span class="r1"> </span><span class="r1">                           
    </span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--verify-image</span><span class="r1">    </span><span class="r1">  
</span><span class="r1">  </span><span class="r1">Verify image.                 
                                                              </span><span 
class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--wait-for-image</span><span class="r1">  </span><span class="r1">  
</span><span class="r1">  </span><span class="r1">Wait until image is 
available.                                                              
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--tag-as-latest</span><span class="r1">   </span><span class="r1">  
</span><span class="r1">  </span><span class="r1">Tags the image as latest 
after pulling.                                                     </span><span 
class="r1">  </span><span class="r4">│</span></div>
diff --git a/images/breeze/output-pull-prod-image.svg 
b/images/breeze/output-pull-prod-image.svg
index c432345694..a25ea871ba 100644
--- a/images/breeze/output-pull-prod-image.svg
+++ b/images/breeze/output-pull-prod-image.svg
@@ -122,8 +122,8 @@
 <div><span class="r1">                                                         
                                                               </span></div>
 <div><span class="r4">╭─ Pull image flags 
───────────────────────────────────────────────────────────────────────────────────────────────────╮</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--image-tag</span><span class="r1">       </span><span 
class="r6">-t</span><span class="r1">  </span><span class="r1">Tag added to the 
default naming conventions of Airflow CI/PROD images.</span><span class="r1"> 
</span><span class="r7">(TEXT)</span><span class="r1">               
</span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">          </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for PROD/CI images.                   
     </span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">                        
</span><span class="r7">(3.7 | 3.8 | 3.9 | 3.10)                                
            </span><span class="r1">                        </span><span 
class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">          </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for images.</span><span class="r1"> 
</span><span class="r7">(&gt;3.7&lt; | 3.8 | 3.9 | 3.10)</span><span 
class="r1">     </span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                        
</span><span class="r4">[default: 3.7]                                          
    </span><span class="r1"> </span><span class="r1">                           
    </span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--verify-image</span><span class="r1">    </span><span class="r1">  
</span><span class="r1">  </span><span class="r1">Verify image.                 
                                                              </span><span 
class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--wait-for-image</span><span class="r1">  </span><span class="r1">  
</span><span class="r1">  </span><span class="r1">Wait until image is 
available.                                                              
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--tag-as-latest</span><span class="r1">   </span><span class="r1">  
</span><span class="r1">  </span><span class="r1">Tags the image as latest 
after pulling.                                                     </span><span 
class="r1">  </span><span class="r4">│</span></div>
diff --git a/images/breeze/output-shell.svg b/images/breeze/output-shell.svg
index 51af37d741..4ffd4c8b21 100644
--- a/images/breeze/output-shell.svg
+++ b/images/breeze/output-shell.svg
@@ -121,13 +121,13 @@
 <div><span class="r1"> </span><span class="r1">Enter breeze.py environment. 
this is the default command use when no other is selected.                      
         </span><span class="r1"> </span></div>
 <div><span class="r1">                                                         
                                                               </span></div>
 <div><span class="r4">╭─ Basic flags 
────────────────────────────────────────────────────────────────────────────────────────────────────────╮</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">               </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for PROD/CI images.                   
</span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">                             
</span><span class="r7">(3.7 | 3.8 | 3.9 | 3.10)                                
            </span><span class="r1">                   </span><span class="r1"> 
 </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--backend</span><span class="r1">              </span><span 
class="r6">-b</span><span class="r1">  </span><span class="r1">Database backend 
to use.</span><span class="r1"> </span><span class="r7">(sqlite | mysql | 
postgres | mssql)</span><span class="r1">                           
</span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">               </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for images.</span><span class="r1"> 
</span><span class="r7">(&gt;3.7&lt; | 3.8 | 3.9 | 3.10)</span><span 
class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                             
</span><span class="r4">[default: 3.7]                                          
    </span><span class="r1"> </span><span class="r1">                          
</span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--backend</span><span class="r1">              </span><span 
class="r6">-b</span><span class="r1">  </span><span class="r1">Database backend 
to use.</span><span class="r1"> </span><span class="r7">(&gt;sqlite&lt; | mysql 
| postgres | mssql)</span><span class="r1"> </span><span class="r4">[default: 
sqlite]</span><span class="r1">       </span><span class="r1">  </span><span 
class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--use-airflow-version</span><span class="r1">  </span><span 
class="r6">-V</span><span class="r1">  </span><span class="r1">Use (reinstall 
at entry) Airflow version from PyPI.</span><span class="r1"> </span><span 
class="r7">(TEXT)</span><span class="r1">                             
</span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--postgres-version</span><span class="r1">     </span><span 
class="r6">-P</span><span class="r1">  </span><span class="r1">Version of 
Postgres.</span><span class="r1"> </span><span class="r7">(10 | 11 | 12 | 
13)</span><span class="r1">                                               
</span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--mysql-version</span><span class="r1">        </span><span 
class="r6">-M</span><span class="r1">  </span><span class="r1">Version of 
MySQL.</span><span class="r1"> </span><span class="r7">(5.7 | 8)</span><span 
class="r1">                                                            
</span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--mssql-version</span><span class="r1">        </span><span 
class="r6">-S</span><span class="r1">  </span><span class="r1">Version of 
MsSQL.</span><span class="r1"> </span><span class="r7">(2017-latest | 
2019-latest)</span><span class="r1">                                          
</span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--postgres-version</span><span class="r1">     </span><span 
class="r6">-P</span><span class="r1">  </span><span class="r1">Version of 
Postgres used.</span><span class="r1"> </span><span class="r7">(&gt;10&lt; | 11 
| 12 | 13)</span><span class="r1"> </span><span class="r4">[default: 
10]</span><span class="r1">                          </span><span class="r1">  
</span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--mysql-version</span><span class="r1">        </span><span 
class="r6">-M</span><span class="r1">  </span><span class="r1">Version of MySQL 
used.</span><span class="r1"> </span><span class="r7">(&gt;5.7&lt; | 
8)</span><span class="r1"> </span><span class="r4">[default: 5.7]</span><span 
class="r1">                                      </span><span class="r1">  
</span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--mssql-version</span><span class="r1">        </span><span 
class="r6">-S</span><span class="r1">  </span><span class="r1">Version of MsSQL 
used.</span><span class="r1"> </span><span class="r7">(&gt;2017-latest&lt; | 
2019-latest)</span><span class="r1"> </span><span class="r4">[default: 
2017-latest]</span><span class="r1">            </span><span class="r1">  
</span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--forward-credentials</span><span class="r1">  </span><span 
class="r6">-f</span><span class="r1">  </span><span class="r1">Forward local 
credentials to container when running.                                   
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--db-reset</span><span class="r1">             </span><span 
class="r6">-d</span><span class="r1">  </span><span class="r1">Reset DB when 
entering the container.                                                  
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span 
class="r4">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span></div>
diff --git a/images/breeze/output-start-airflow.svg 
b/images/breeze/output-start-airflow.svg
index 83101d09e4..5a338cb49e 100644
--- a/images/breeze/output-start-airflow.svg
+++ b/images/breeze/output-start-airflow.svg
@@ -1,4 +1,4 @@
-<svg width="1720.0" height="1066" viewBox="0 0 1720.0 1066"
+<svg width="1720.0" height="1088" viewBox="0 0 1720.0 1088"
      xmlns="http://www.w3.org/2000/svg";>
     <style>
         @font-face {
@@ -121,13 +121,14 @@
 <div><span class="r1"> </span><span class="r1">Enter breeze.py environment and 
starts all Airflow components in the tmux session.                              
      </span><span class="r1"> </span></div>
 <div><span class="r1">                                                         
                                                               </span></div>
 <div><span class="r4">╭─ Basic flags 
────────────────────────────────────────────────────────────────────────────────────────────────────────╮</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">                    </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for PROD/CI images.              
</span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">                                
  </span><span class="r7">(3.7 | 3.8 | 3.9 | 3.10)                              
              </span><span class="r1">              </span><span class="r1">  
</span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--backend</span><span class="r1">                   </span><span 
class="r6">-b</span><span class="r1">  </span><span class="r1">Database backend 
to use.</span><span class="r1"> </span><span class="r7">(sqlite | mysql | 
postgres | mssql)</span><span class="r1">                      </span><span 
class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">                    </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for images.                      
</span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                                
  </span><span class="r7">(&gt;3.7&lt; | 3.8 | 3.9 | 3.10)                      
            </span><span class="r1">                      </span><span 
class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                                
  </span><span class="r4">[default: 3.7]                                        
      </span><span class="r1">                      </span><span class="r1">  
</span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--backend</span><span class="r1">                   </span><span 
class="r6">-b</span><span class="r1">  </span><span class="r1">Database backend 
to use.</span><span class="r1"> </span><span class="r7">(&gt;sqlite&lt; | mysql 
| postgres | mssql)</span><span class="r1"> </span><span class="r4">[default: 
sqlite]</span><span class="r1">  </span><span class="r1">  </span><span 
class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--use-airflow-version</span><span class="r1">       </span><span 
class="r6">-V</span><span class="r1">  </span><span class="r1">Use (reinstall 
at entry) Airflow version from PyPI.</span><span class="r1"> </span><span 
class="r7">(TEXT)</span><span class="r1">                        </span><span 
class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--postgres-version</span><span class="r1">          </span><span 
class="r6">-P</span><span class="r1">  </span><span class="r1">Version of 
Postgres.</span><span class="r1"> </span><span class="r7">(10 | 11 | 12 | 
13)</span><span class="r1">                                          
</span><span class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--mysql-version</span><span class="r1">             </span><span 
class="r6">-M</span><span class="r1">  </span><span class="r1">Version of 
MySQL.</span><span class="r1"> </span><span class="r7">(5.7 | 8)</span><span 
class="r1">                                                       </span><span 
class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--mssql-version</span><span class="r1">             </span><span 
class="r6">-S</span><span class="r1">  </span><span class="r1">Version of 
MsSQL.</span><span class="r1"> </span><span class="r7">(2017-latest | 
2019-latest)</span><span class="r1">                                     
</span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--postgres-version</span><span class="r1">          </span><span 
class="r6">-P</span><span class="r1">  </span><span class="r1">Version of 
Postgres used.</span><span class="r1"> </span><span class="r7">(&gt;10&lt; | 11 
| 12 | 13)</span><span class="r1"> </span><span class="r4">[default: 
10]</span><span class="r1">                     </span><span class="r1">  
</span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--mysql-version</span><span class="r1">             </span><span 
class="r6">-M</span><span class="r1">  </span><span class="r1">Version of MySQL 
used.</span><span class="r1"> </span><span class="r7">(&gt;5.7&lt; | 
8)</span><span class="r1"> </span><span class="r4">[default: 5.7]</span><span 
class="r1">                                 </span><span class="r1">  
</span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--mssql-version</span><span class="r1">             </span><span 
class="r6">-S</span><span class="r1">  </span><span class="r1">Version of MsSQL 
used.</span><span class="r1"> </span><span class="r7">(&gt;2017-latest&lt; | 
2019-latest)</span><span class="r1"> </span><span class="r4">[default: 
2017-latest]</span><span class="r1">       </span><span class="r1">  
</span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--load-example-dags</span><span class="r1">         </span><span 
class="r6">-e</span><span class="r1">  </span><span class="r1">Enable 
configuration to load example DAGs when starting Airflow.                  
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--load-default-connections</span><span class="r1">  </span><span 
class="r6">-c</span><span class="r1">  </span><span class="r1">Enable 
configuration to load default connections when starting Airflow.           
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--forward-credentials</span><span class="r1">       </span><span 
class="r6">-f</span><span class="r1">  </span><span class="r1">Forward local 
credentials to container when running.                              
</span><span class="r1">  </span><span class="r4">│</span></div>
diff --git a/images/breeze/output-verify-image.svg 
b/images/breeze/output-verify-image.svg
index 1d8262869a..2f07f67ad7 100644
--- a/images/breeze/output-verify-image.svg
+++ b/images/breeze/output-verify-image.svg
@@ -1,4 +1,4 @@
-<svg width="1720.0" height="714" viewBox="0 0 1720.0 714"
+<svg width="1720.0" height="736" viewBox="0 0 1720.0 736"
      xmlns="http://www.w3.org/2000/svg";>
     <style>
         @font-face {
@@ -122,7 +122,8 @@
 <div><span class="r1">                                                         
                                                               </span></div>
 <div><span class="r4">╭─ Verify image flags 
─────────────────────────────────────────────────────────────────────────────────────────────────╮</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--image-name</span><span class="r1">  </span><span 
class="r6">-n</span><span class="r1">  Name of the image to verify (overrides 
</span><span class="r5">--python</span><span class="r1"> and </span><span 
class="r5">--image-tag</span><span class="r1">). </span><span 
class="r7">(TEXT)</span><span class="r1">                        </span><span 
class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">      </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for PROD/CI images.</span><span 
class="r1"> </span><span class="r7">(3.7 | 3.8 | 3.9 | 3.10)</span><span 
class="r1">   </span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">      </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for images.</span><span class="r1"> 
</span><span class="r7">(&gt;3.7&lt; | 3.8 | 3.9 | 3.10)</span><span 
class="r1">         </span><span class="r1">  </span><span 
class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                    
</span><span class="r4">[default: 3.7]                                          
    </span><span class="r1"> </span><span class="r1">                           
        </span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--image-tag</span><span class="r1">   </span><span 
class="r6">-t</span><span class="r1">  </span><span class="r1">Tag added to the 
default naming conventions of Airflow CI/PROD images.</span><span class="r1"> 
</span><span class="r7">(TEXT)</span><span class="r1">                   
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span 
class="r4">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span></div>
 <div><span class="r4">╭─ Options 
────────────────────────────────────────────────────────────────────────────────────────────────────────────╮</span></div>
diff --git a/images/breeze/output-verify-prod-image.svg 
b/images/breeze/output-verify-prod-image.svg
index e84c671b42..4560031a3b 100644
--- a/images/breeze/output-verify-prod-image.svg
+++ b/images/breeze/output-verify-prod-image.svg
@@ -1,4 +1,4 @@
-<svg width="1720.0" height="714" viewBox="0 0 1720.0 714"
+<svg width="1720.0" height="736" viewBox="0 0 1720.0 736"
      xmlns="http://www.w3.org/2000/svg";>
     <style>
         @font-face {
@@ -122,7 +122,8 @@
 <div><span class="r1">                                                         
                                                               </span></div>
 <div><span class="r4">╭─ Verify image flags 
─────────────────────────────────────────────────────────────────────────────────────────────────╮</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--image-name</span><span class="r1">  </span><span 
class="r6">-n</span><span class="r1">  Name of the image to verify (overrides 
</span><span class="r5">--python</span><span class="r1"> and </span><span 
class="r5">--image-tag</span><span class="r1">). </span><span 
class="r7">(TEXT)</span><span class="r1">                        </span><span 
class="r1">  </span><span class="r4">│</span></div>
-<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">      </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for PROD/CI images.</span><span 
class="r1"> </span><span class="r7">(3.7 | 3.8 | 3.9 | 3.10)</span><span 
class="r1">   </span><span class="r1">  </span><span class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--python</span><span class="r1">      </span><span 
class="r6">-p</span><span class="r1">  </span><span class="r1">Python 
major/minor version used in Airflow image for images.</span><span class="r1"> 
</span><span class="r7">(&gt;3.7&lt; | 3.8 | 3.9 | 3.10)</span><span 
class="r1">         </span><span class="r1">  </span><span 
class="r4">│</span></div>
+<div><span class="r4">│</span><span class="r1">                    
</span><span class="r4">[default: 3.7]                                          
    </span><span class="r1"> </span><span class="r1">                           
        </span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span class="r4">│</span><span class="r1">  </span><span 
class="r5">--image-tag</span><span class="r1">   </span><span 
class="r6">-t</span><span class="r1">  </span><span class="r1">Tag added to the 
default naming conventions of Airflow CI/PROD images.</span><span class="r1"> 
</span><span class="r7">(TEXT)</span><span class="r1">                   
</span><span class="r1">  </span><span class="r4">│</span></div>
 <div><span 
class="r4">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span></div>
 <div><span class="r4">╭─ Options 
────────────────────────────────────────────────────────────────────────────────────────────────────────────╮</span></div>

Reply via email to