diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 86655b9135da2..819c1b160df38 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -610,6 +610,14 @@ repos: language: python files: ^.*LICENSE.*$|^.*LICENCE.*$ pass_filenames: false + - id: check-aiobotocore-optional + name: Check if aiobotocore is an optional dependency only + entry: ./scripts/ci/pre_commit/pre_commit_check_aiobotocore_optional.py + language: python + files: ^airflow/providers/.*/provider\.yaml$ + pass_filenames: true + additional_dependencies: ['click', 'rich>=12.4.4', 'pyyaml'] + require_serial: true - id: check-airflow-config-yaml-consistent name: Checks for consistency between config.yml and default_config.cfg language: python diff --git a/STATIC_CODE_CHECKS.rst b/STATIC_CODE_CHECKS.rst index 0182a44cd8e67..7ce128ac9408d 100644 --- a/STATIC_CODE_CHECKS.rst +++ b/STATIC_CODE_CHECKS.rst @@ -144,6 +144,8 @@ require Breeze Docker image to be build locally. +-----------------------------------------------------------+------------------------------------------------------------------+---------+ | blacken-docs | Run black on Python code blocks in documentation files | | +-----------------------------------------------------------+------------------------------------------------------------------+---------+ +| check-aiobotocore-optional | Check if aiobotocore is an optional dependency only | | ++-----------------------------------------------------------+------------------------------------------------------------------+---------+ | check-airflow-config-yaml-consistent | Checks for consistency between config.yml and default_config.cfg | | +-----------------------------------------------------------+------------------------------------------------------------------+---------+ | check-airflow-provider-compatibility | Check compatibility of Providers with Airflow | | diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py b/dev/breeze/src/airflow_breeze/pre_commit_ids.py index bf5bc148c5d0b..b4c713360ed86 100644 --- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py +++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py @@ -26,6 +26,7 @@ "all", "black", "blacken-docs", + "check-aiobotocore-optional", "check-airflow-config-yaml-consistent", "check-airflow-provider-compatibility", "check-apache-license-rat", diff --git a/images/breeze/output-commands-hash.txt b/images/breeze/output-commands-hash.txt index 857c3dd3281ba..5a3625662baa8 100644 --- a/images/breeze/output-commands-hash.txt +++ b/images/breeze/output-commands-hash.txt @@ -55,7 +55,7 @@ setup:version:123b462a421884dc2320ffc5e54b2478 setup:26f37743534e14f5aad5300aad920301 shell:bd3e004a92ebcec8feb40fc5cd95872d start-airflow:ee5066f1420a489864b48bc4e5e472da -static-checks:cb1029ee6292860bb9fc425ef67b656d +static-checks:c22e24fc35d2f82135b30998e4f352c4 stop:e5aa686b4e53707ced4039d8414d5cd6 testing:docker-compose-tests:b86c044b24138af0659a05ed6331576c testing:helm-tests:936cf28fd84ce4ff5113795fdae9624b diff --git a/images/breeze/output_setup.svg b/images/breeze/output_setup.svg index 65185a603f97a..c313db50bab0c 100644 --- a/images/breeze/output_setup.svg +++ b/images/breeze/output_setup.svg @@ -35,8 +35,8 @@ .breeze-setup-r1 { fill: #c5c8c6;font-weight: bold } .breeze-setup-r2 { fill: #c5c8c6 } .breeze-setup-r3 { fill: #d0b344;font-weight: bold } -.breeze-setup-r4 { fill: #868887 } -.breeze-setup-r5 { fill: #68a0b3;font-weight: bold } +.breeze-setup-r4 { fill: #68a0b3;font-weight: bold } +.breeze-setup-r5 { fill: #868887 } .breeze-setup-r6 { fill: #98a84b;font-weight: bold } @@ -102,21 +102,21 @@ -Usage: breeze setup [OPTIONS] COMMAND [ARGS]... +Usage: breeze setup [OPTIONSCOMMAND [ARGS]... Tools that developers can use to configure Breeze -╭─ Common options ─────────────────────────────────────────────────────────────────────────────────────────────────────╮ ---help-hShow this message and exit. -╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ -╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────╮ -autocomplete                     Enables autocompletion of breeze commands.                                        -check-all-params-in-groups       Check that all parameters are put in groups.                                      -config                           Show/update configuration (Python, Backend, Cheatsheet, ASCIIART).                -regenerate-command-images        Regenerate breeze command images.                                                 -self-upgrade                     Self upgrade Breeze.                                                              -version                          Print information about version of apache-airflow-breeze.                         -╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭─ Common options ─────────────────────────────────────────────────────────────────────────────────────────────────────╮ +--help-hShow this message and exit. +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────╮ +autocomplete                     Enables autocompletion of breeze commands.                                        +check-all-params-in-groups       Check that all parameters are put in groups.                                      +config                           Show/update configuration (Python, Backend, Cheatsheet, ASCIIART).                +regenerate-command-images        Regenerate breeze command images.                                                 +self-upgrade                     Self upgrade Breeze.                                                              +version                          Print information about version of apache-airflow-breeze.                         +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ diff --git a/images/breeze/output_setup_check-all-params-in-groups.svg b/images/breeze/output_setup_check-all-params-in-groups.svg index 1ed51d446efa8..096285f97fb7c 100644 --- a/images/breeze/output_setup_check-all-params-in-groups.svg +++ b/images/breeze/output_setup_check-all-params-in-groups.svg @@ -35,8 +35,8 @@ .breeze-setup-check-all-params-in-groups-r1 { fill: #c5c8c6;font-weight: bold } .breeze-setup-check-all-params-in-groups-r2 { fill: #c5c8c6 } .breeze-setup-check-all-params-in-groups-r3 { fill: #d0b344;font-weight: bold } -.breeze-setup-check-all-params-in-groups-r4 { fill: #868887 } -.breeze-setup-check-all-params-in-groups-r5 { fill: #68a0b3;font-weight: bold } +.breeze-setup-check-all-params-in-groups-r4 { fill: #68a0b3;font-weight: bold } +.breeze-setup-check-all-params-in-groups-r5 { fill: #868887 } .breeze-setup-check-all-params-in-groups-r6 { fill: #8d7b39 } .breeze-setup-check-all-params-in-groups-r7 { fill: #98a84b;font-weight: bold } @@ -139,33 +139,33 @@ -Usage: breeze setup check-all-params-in-groups [OPTIONS] +Usage: breeze setup check-all-params-in-groups [OPTIONS] Check that all parameters are put in groups. -╭─ Check all params in groups flags ───────────────────────────────────────────────────────────────────────────────────╮ ---commandCommand(s) to regenerate images for (optional, might be repeated)                                       -(main | build-docs | ci:fix-ownership | ci:free-space | ci:get-workflow-info | ci:resource-check |      -ci:selective-check | ci | ci-image:build | ci-image:pull | ci-image:verify | ci-image | cleanup |       -compile-www-assets | exec | k8s:build-k8s-image | k8s:configure-cluster | k8s:create-cluster |          -k8s:delete-cluster | k8s:deploy-airflow | k8s:k9s | k8s:logs | k8s:run-complete-tests | k8s:setup-env | -k8s:shell | k8s:status | k8s:tests | k8s:upload-k8s-image | k8s | prod-image:build | prod-image:pull |  -prod-image:verify | prod-image | release-management:create-minor-branch |                               -release-management:generate-constraints | release-management:generate-issue-content-providers |         -release-management:install-provider-packages | release-management:prepare-airflow-package |             -release-management:prepare-provider-documentation | release-management:prepare-provider-packages |      -release-management:release-prod-images | release-management:start-rc-process |                          -release-management:start-release | release-management:verify-provider-packages | release-management |   -setup:autocomplete | setup:check-all-params-in-groups | setup:config | setup:regenerate-command-images  -| setup:self-upgrade | setup:version | setup | shell | start-airflow | static-checks | stop |           -testing:docker-compose-tests | testing:helm-tests | testing:integration-tests | testing:tests |         -testing)                                                                                                -╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ -╭─ Common options ─────────────────────────────────────────────────────────────────────────────────────────────────────╮ ---verbose-vPrint verbose information about performed steps. ---dry-run-DIf dry-run is set, commands are only printed, not executed. ---help-hShow this message and exit. -╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭─ Check all params in groups flags ───────────────────────────────────────────────────────────────────────────────────╮ +--commandCommand(s) to regenerate images for (optional, might be repeated)                                       +(main | build-docs | ci:fix-ownership | ci:free-space | ci:get-workflow-info | ci:resource-check |      +ci:selective-check | ci | ci-image:build | ci-image:pull | ci-image:verify | ci-image | cleanup |       +compile-www-assets | exec | k8s:build-k8s-image | k8s:configure-cluster | k8s:create-cluster |          +k8s:delete-cluster | k8s:deploy-airflow | k8s:k9s | k8s:logs | k8s:run-complete-tests | k8s:setup-env | +k8s:shell | k8s:status | k8s:tests | k8s:upload-k8s-image | k8s | prod-image:build | prod-image:pull |  +prod-image:verify | prod-image | release-management:create-minor-branch |                               +release-management:generate-constraints | release-management:generate-issue-content-providers |         +release-management:install-provider-packages | release-management:prepare-airflow-package |             +release-management:prepare-provider-documentation | release-management:prepare-provider-packages |      +release-management:release-prod-images | release-management:start-rc-process |                          +release-management:start-release | release-management:verify-provider-packages | release-management |   +setup:autocomplete | setup:check-all-params-in-groups | setup:config | setup:regenerate-command-images  +| setup:self-upgrade | setup:version | setup | shell | start-airflow | static-checks | stop |           +testing:docker-compose-tests | testing:helm-tests | testing:integration-tests | testing:tests |         +testing)                                                                                                +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭─ Common options ─────────────────────────────────────────────────────────────────────────────────────────────────────╮ +--verbose-vPrint verbose information about performed steps. +--dry-run-DIf dry-run is set, commands are only printed, not executed. +--help-hShow this message and exit. +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ diff --git a/images/breeze/output_setup_regenerate-command-images.svg b/images/breeze/output_setup_regenerate-command-images.svg index 5bb38f1c124b7..b8bcafe739900 100644 --- a/images/breeze/output_setup_regenerate-command-images.svg +++ b/images/breeze/output_setup_regenerate-command-images.svg @@ -35,8 +35,8 @@ .breeze-setup-regenerate-command-images-r1 { fill: #c5c8c6;font-weight: bold } .breeze-setup-regenerate-command-images-r2 { fill: #c5c8c6 } .breeze-setup-regenerate-command-images-r3 { fill: #d0b344;font-weight: bold } -.breeze-setup-regenerate-command-images-r4 { fill: #868887 } -.breeze-setup-regenerate-command-images-r5 { fill: #68a0b3;font-weight: bold } +.breeze-setup-regenerate-command-images-r4 { fill: #68a0b3;font-weight: bold } +.breeze-setup-regenerate-command-images-r5 { fill: #868887 } .breeze-setup-regenerate-command-images-r6 { fill: #8d7b39 } .breeze-setup-regenerate-command-images-r7 { fill: #98a84b;font-weight: bold } @@ -148,36 +148,36 @@ -Usage: breeze setup regenerate-command-images [OPTIONS] +Usage: breeze setup regenerate-command-images [OPTIONS] Regenerate breeze command images. -╭─ Image regeneration option ──────────────────────────────────────────────────────────────────────────────────────────╮ ---forceForces regeneration of all images ---commandCommand(s) to regenerate images for (optional, might be repeated)                                    -(main | build-docs | ci:fix-ownership | ci:free-space | ci:get-workflow-info | ci:resource-check |   -ci:selective-check | ci | ci-image:build | ci-image:pull | ci-image:verify | ci-image | cleanup |    -compile-www-assets | exec | k8s:build-k8s-image | k8s:configure-cluster | k8s:create-cluster |       -k8s:delete-cluster | k8s:deploy-airflow | k8s:k9s | k8s:logs | k8s:run-complete-tests |              -k8s:setup-env | k8s:shell | k8s:status | k8s:tests | k8s:upload-k8s-image | k8s | prod-image:build | -prod-image:pull | prod-image:verify | prod-image | release-management:create-minor-branch |          -release-management:generate-constraints | release-management:generate-issue-content-providers |      -release-management:install-provider-packages | release-management:prepare-airflow-package |          -release-management:prepare-provider-documentation | release-management:prepare-provider-packages |   -release-management:release-prod-images | release-management:start-rc-process |                       -release-management:start-release | release-management:verify-provider-packages | release-management  -| setup:autocomplete | setup:check-all-params-in-groups | setup:config |                             -setup:regenerate-command-images | setup:self-upgrade | setup:version | setup | shell | start-airflow -| static-checks | stop | testing:docker-compose-tests | testing:helm-tests |                         -testing:integration-tests | testing:tests | testing)                                                 ---check-onlyOnly check if some images need to be regenerated. Return 0 if no need or 1 if needed. Cannot be used -together with --command flag or --force.                                                             -╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ -╭─ Common options ─────────────────────────────────────────────────────────────────────────────────────────────────────╮ ---verbose-vPrint verbose information about performed steps. ---dry-run-DIf dry-run is set, commands are only printed, not executed. ---help-hShow this message and exit. -╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭─ Image regeneration option ──────────────────────────────────────────────────────────────────────────────────────────╮ +--forceForces regeneration of all images +--commandCommand(s) to regenerate images for (optional, might be repeated)                                    +(main | build-docs | ci:fix-ownership | ci:free-space | ci:get-workflow-info | ci:resource-check |   +ci:selective-check | ci | ci-image:build | ci-image:pull | ci-image:verify | ci-image | cleanup |    +compile-www-assets | exec | k8s:build-k8s-image | k8s:configure-cluster | k8s:create-cluster |       +k8s:delete-cluster | k8s:deploy-airflow | k8s:k9s | k8s:logs | k8s:run-complete-tests |              +k8s:setup-env | k8s:shell | k8s:status | k8s:tests | k8s:upload-k8s-image | k8s | prod-image:build | +prod-image:pull | prod-image:verify | prod-image | release-management:create-minor-branch |          +release-management:generate-constraints | release-management:generate-issue-content-providers |      +release-management:install-provider-packages | release-management:prepare-airflow-package |          +release-management:prepare-provider-documentation | release-management:prepare-provider-packages |   +release-management:release-prod-images | release-management:start-rc-process |                       +release-management:start-release | release-management:verify-provider-packages | release-management  +| setup:autocomplete | setup:check-all-params-in-groups | setup:config |                             +setup:regenerate-command-images | setup:self-upgrade | setup:version | setup | shell | start-airflow +| static-checks | stop | testing:docker-compose-tests | testing:helm-tests |                         +testing:integration-tests | testing:tests | testing)                                                 +--check-onlyOnly check if some images need to be regenerated. Return 0 if no need or 1 if needed. Cannot be used +together with --command flag or --force.                                                             +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ +╭─ Common options ─────────────────────────────────────────────────────────────────────────────────────────────────────╮ +--verbose-vPrint verbose information about performed steps. +--dry-run-DIf dry-run is set, commands are only printed, not executed. +--help-hShow this message and exit. +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ diff --git a/images/breeze/output_static-checks.svg b/images/breeze/output_static-checks.svg index 7b2f1210c04e9..83ad572819e79 100644 --- a/images/breeze/output_static-checks.svg +++ b/images/breeze/output_static-checks.svg @@ -229,15 +229,15 @@ ╭─ Pre-commit flags ───────────────────────────────────────────────────────────────────────────────────────────────────╮ --type-tType(s) of the static checks to run.                                                     -(all | black | blacken-docs | check-airflow-config-yaml-consistent |                     -check-airflow-provider-compatibility | check-apache-license-rat |                        -check-base-operator-partial-arguments | check-base-operator-usage |                      -check-boring-cyborg-configuration | check-breeze-top-dependencies-limited |              -check-builtin-literals | check-changelog-has-no-duplicates |                             -check-core-deprecation-classes | check-daysago-import-from-utils |                       -check-decorated-operator-implements-custom-name | check-docstring-param-types |          -check-example-dags-urls | check-executables-have-shebangs |                              -check-extra-packages-references | check-extras-order | check-for-inclusive-language |    +(all | black | blacken-docs | check-aiobotocore-optional |                               +check-airflow-config-yaml-consistent | check-airflow-provider-compatibility |            +check-apache-license-rat | check-base-operator-partial-arguments |                       +check-base-operator-usage | check-boring-cyborg-configuration |                          +check-breeze-top-dependencies-limited | check-builtin-literals |                         +check-changelog-has-no-duplicates | check-core-deprecation-classes |                     +check-daysago-import-from-utils | check-decorated-operator-implements-custom-name |      +check-docstring-param-types | check-example-dags-urls | check-executables-have-shebangs  +| check-extra-packages-references | check-extras-order | check-for-inclusive-language |  check-hooks-apply | check-incorrect-use-of-LoggingMixin | check-init-decorator-arguments | check-lazy-logging | check-links-to-example-dags-do-not-use-hardcoded-versions |       check-merge-conflict | check-newsfragments-are-valid |                                   diff --git a/scripts/ci/pre_commit/pre_commit_check_aiobotocore_optional.py b/scripts/ci/pre_commit/pre_commit_check_aiobotocore_optional.py new file mode 100755 index 0000000000000..5c222ebada558 --- /dev/null +++ b/scripts/ci/pre_commit/pre_commit_check_aiobotocore_optional.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python +# +# 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 __future__ import annotations + +import sys +from pathlib import Path + +import yaml +from rich.console import Console + +AIRFLOW_SOURCES = Path(__file__).parents[3] + +console = Console(color_system="standard", width=200) + +if __name__ == "__main__": + errors = [] + for file in sys.argv[1:]: + console.print(f"[blue]Checking[/blue]: {file}") + provider_yaml_content = yaml.safe_load(Path(file).read_text()) + dependencies = provider_yaml_content.get("dependencies") + if dependencies and any(dependency.startswith("aiobotocore") for dependency in dependencies): + errors.append( + f"\n[red]Error: the aibotocore cannot be a required dependency, " + f"because it restricts botocore too much[/]\n\n" + f"The [magenta]{file}[/] file has aiobotocore dependency set at top level.\n\n" + f"[yellow]Please remove it and make sure it is added only as " + f"an optional dependency in additional-extras[/n]\n" + ) + if errors: + for error in errors: + console.print(error) + sys.exit(1)