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">(>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="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 "false", 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">(>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="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 "false", 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">(>3.7< | 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">(>sqlite< | 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">(>10< | 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">(>5.7< | 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">(>2017-latest< | 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">(>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="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">(>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="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">(>10< | 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">(>5.7< | 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">(>2017-latest< | 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">(>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="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">(>3.7< | 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">(>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="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">(>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="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">(>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="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">(>3.7< | 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">(>sqlite< | 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">(>10< | 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">(>5.7< | 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">(>2017-latest< | 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">(>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="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">(>sqlite< | 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">(>10< | 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">(>5.7< | 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">(>2017-latest< | 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">(>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="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">(>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="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>
