You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2022/06/29 15:04:19 UTC
[airflow] 01/01: Fix selective checks to work for non-main-branch
This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch v2-3-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 15b858aa31a75eb6e43b7c6144f6490e333e3570
Author: Jarek Potiuk <ja...@polidea.com>
AuthorDate: Wed Jun 29 12:39:47 2022 +0200
Fix selective checks to work for non-main-branch
---
.github/workflows/build-images.yml | 88 ++++----
.github/workflows/ci.yml | 87 +++-----
.pre-commit-config.yaml | 8 +-
STATIC_CODE_CHECKS.rst | 2 +-
.../src/airflow_breeze/commands/ci_commands.py | 13 ++
dev/breeze/src/airflow_breeze/pre_commit_ids.py | 4 -
.../src/airflow_breeze/utils/selective_checks.py | 35 +++-
dev/breeze/tests/test_selective_checks.py | 23 ++-
docs/conf.py | 2 +
images/breeze/output-commands-hash.txt | 4 +-
images/breeze/output-selective-check.svg | 116 ++++++-----
images/breeze/output-static-checks.svg | 228 ++++++++++-----------
...ty.py => pre_commit_check_2_2_compatibility.py} | 0
tests/always/test_project_structure.py | 138 -------------
.../google}/test_project_structure.py | 146 +------------
tests/system/providers/elasticsearch/__init__.py | 16 --
.../elasticsearch/example_elasticsearch_query.py | 66 ------
17 files changed, 321 insertions(+), 655 deletions(-)
diff --git a/.github/workflows/build-images.yml b/.github/workflows/build-images.yml
index e6bb57c40d..2d895e3c09 100644
--- a/.github/workflows/build-images.yml
+++ b/.github/workflows/build-images.yml
@@ -52,6 +52,9 @@ jobs:
runs-on: ${{ github.repository == 'apache/airflow' && 'self-hosted' || 'ubuntu-20.04' }}
env:
targetBranch: ${{ github.event.pull_request.base.ref }}
+ DEFAULT_BRANCH: ${{ steps.selective-checks.outputs.default-constraints-branch }}
+ DEFAULT_CONSTRAINTS_BRANCH: ${{ steps.selective-checks.outputs.default-constraints-branch }}
+ DEBIAN_VERSION: ${{ steps.selective-checks.outputs.debian-version }}
outputs:
runsOn: ${{ github.repository == 'apache/airflow' && '["self-hosted"]' || '["ubuntu-20.04"]' }}
pythonVersions: "${{ steps.selective-checks.python-versions }}"
@@ -65,6 +68,8 @@ jobs:
cacheDirective: ${{ steps.dynamic-outputs.outputs.cacheDirective }}
targetBranch: ${{ steps.dynamic-outputs.outputs.targetBranch }}
defaultBranch: ${{ steps.selective-checks.outputs.default-branch }}
+ defaultConstraintsBranch: ${{ steps.selective-checks.outputs.default-constraints-branch }}
+ debianVersion: ${{ steps.selective-checks.outputs.debian-version }}
targetCommitSha: "${{steps.discover-pr-merge-commit.outputs.targetCommitSha ||
github.event.pull_request.head.sha ||
github.sha
@@ -104,9 +109,27 @@ jobs:
ref: ${{ env.TARGET_COMMIT_SHA }}
persist-credentials: false
fetch-depth: 2
- - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
+ - name: "Retrieve DEFAULTS from the _initialization.sh"
+ # We cannot "source" the script here because that would be a security problem (we cannot run
+ # any code that comes from the sources coming from the PR. Therefore we extract the
+ # DEFAULT_BRANCH and DEFAULT_CONSTRAINTS_BRANCH and DEBIAN_VERSION via custom grep/awk/sed commands
+ id: defaults
+ run: |
+ DEFAULT_BRANCH=$(grep "export DEFAULT_BRANCH" scripts/ci/libraries/_initialization.sh | \
+ awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
+ echo "DEFAULT_BRANCH=${DEFAULT_BRANCH}" >> $GITHUB_ENV
+ DEFAULT_CONSTRAINTS_BRANCH=$(grep "export DEFAULT_CONSTRAINTS_BRANCH" \
+ scripts/ci/libraries/_initialization.sh | \
+ awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
+ echo "DEFAULT_CONSTRAINTS_BRANCH=${DEFAULT_CONSTRAINTS_BRANCH}" >> $GITHUB_ENV
+ DEBIAN_VERSION=$(grep "export DEBIAN_VERSION" scripts/ci/libraries/_initialization.sh | \
+ cut -d "=" -f 3 | sed s'/["}]//g')
+ echo "DEBIAN_VERSION=${DEBIAN_VERSION}" >> $GITHUB_ENV
+ - name: Checkout main branch to 'main-airflow' folder to use breeze from there.
uses: actions/checkout@v2
with:
+ path: "main-airflow"
+ ref: "main"
persist-credentials: false
submodules: recursive
- name: "Setup python"
@@ -165,6 +188,9 @@ jobs:
needs.build-info.outputs.image-build == 'true' &&
github.event.pull_request.head.repo.full_name != 'apache/airflow'
env:
+ DEFAULT_BRANCH: ${{ needs.build-info.outputs.default-branch }}
+ DEFAULT_CONSTRAINTS_BRANCH: ${{ needs.build-info.outputs.default-constraints-branch }}
+ DEBIAN_VERSION: ${{ needs.build-info.outputs.debian-version }}
RUNS_ON: ${{ fromJson(needs.build-info.outputs.runsOn)[0] }}
BACKEND: sqlite
outputs: ${{toJSON(needs.build-info.outputs) }}
@@ -176,29 +202,11 @@ jobs:
ref: ${{ needs.build-info.outputs.targetCommitSha }}
persist-credentials: false
submodules: recursive
- - name: "Retrieve DEFAULTS from the _initialization.sh"
- # We cannot "source" the script here because that would be a security problem (we cannot run
- # any code that comes from the sources coming from the PR. Therefore, we extract the
- # DEFAULT_BRANCH and DEFAULT_CONSTRAINTS_BRANCH and DEBIAN_VERSION via custom grep/awk/sed commands
- id: defaults
- run: |
- DEFAULT_BRANCH=$(grep "export DEFAULT_BRANCH" scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEFAULT_BRANCH=${DEFAULT_BRANCH}" >> $GITHUB_ENV
- DEFAULT_CONSTRAINTS_BRANCH=$(grep "export DEFAULT_CONSTRAINTS_BRANCH" \
- scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEFAULT_CONSTRAINTS_BRANCH=${DEFAULT_CONSTRAINTS_BRANCH}" >> $GITHUB_ENV
- DEBIAN_VERSION=$(grep "export DEBIAN_VERSION" scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEBIAN_VERSION=${DEBIAN_VERSION}" >> $GITHUB_ENV
- - name: >
- Checkout "${{ needs.build-info.outputs.targetBranch }}" branch to 'main-airflow' folder
- to use ci/scripts from there.
+ - name: Checkout main branch to 'main-airflow' folder to use ci/scripts from there.
uses: actions/checkout@v2
with:
path: "main-airflow"
- ref: "${{ needs.build-info.outputs.targetBranch }}"
+ ref: "main"
persist-credentials: false
submodules: recursive
- name: "Setup python"
@@ -258,6 +266,9 @@ jobs:
needs.build-info.outputs.image-build == 'true' &&
github.event.pull_request.head.repo.full_name != 'apache/airflow'
env:
+ DEFAULT_BRANCH: ${{ needs.build-info.outputs.default-branch }}
+ DEFAULT_CONSTRAINTS_BRANCH: ${{ needs.build-info.outputs.default-constraints-branch }}
+ DEBIAN_VERSION: ${{ needs.build-info.outputs.debian-version }}
RUNS_ON: ${{ fromJson(needs.build-info.outputs.runsOn)[0] }}
BACKEND: sqlite
steps:
@@ -268,22 +279,6 @@ jobs:
ref: ${{ needs.build-info.outputs.targetCommitSha }}
persist-credentials: false
submodules: recursive
- - name: "Retrieve DEFAULTS from the _initialization.sh"
- # We cannot "source" the script here because that would be a security problem (we cannot run
- # any code that comes from the sources coming from the PR. Therefore we extract the
- # DEFAULT_BRANCH and DEFAULT_CONSTRAINTS_BRANCH and DEBIAN_VERSION via custom grep/awk/sed commands
- id: defaults
- run: |
- DEFAULT_BRANCH=$(grep "export DEFAULT_BRANCH" scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEFAULT_BRANCH=${DEFAULT_BRANCH}" >> $GITHUB_ENV
- DEFAULT_CONSTRAINTS_BRANCH=$(grep "export DEFAULT_CONSTRAINTS_BRANCH" \
- scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEFAULT_CONSTRAINTS_BRANCH=${DEFAULT_CONSTRAINTS_BRANCH}" >> $GITHUB_ENV
- DEBIAN_VERSION=$(grep "export DEBIAN_VERSION" scripts/ci/libraries/_initialization.sh | \
- cut -d "=" -f 3 | sed s'/["}]//g')
- echo "DEBIAN_VERSION=${DEBIAN_VERSION}" >> $GITHUB_ENV
- name: >
Checkout "${{ needs.build-info.outputs.targetBranch }}" branch to 'main-airflow' folder
to use ci/scripts from there.
@@ -372,6 +367,9 @@ jobs:
needs.build-info.outputs.upgradeToNewerDependencies != 'false' &&
github.event.pull_request.head.repo.full_name != 'apache/airflow'
env:
+ DEFAULT_BRANCH: ${{ needs.build-info.outputs.default-branch }}
+ DEFAULT_CONSTRAINTS_BRANCH: ${{ needs.build-info.outputs.default-constraints-branch }}
+ DEBIAN_VERSION: ${{ needs.build-info.outputs.debian-version }}
RUNS_ON: ${{ fromJson(needs.build-info.outputs.runsOn)[0] }}
BACKEND: sqlite
outputs: ${{toJSON(needs.build-info.outputs) }}
@@ -383,22 +381,6 @@ jobs:
ref: ${{ needs.build-info.outputs.targetCommitSha }}
persist-credentials: false
submodules: recursive
- - name: "Retrieve DEFAULTS from the _initialization.sh"
- # We cannot "source" the script here because that would be a security problem (we cannot run
- # any code that comes from the sources coming from the PR. Therefore, we extract the
- # DEFAULT_BRANCH and DEFAULT_CONSTRAINTS_BRANCH and DEBIAN_VERSION via custom grep/awk/sed commands
- id: defaults
- run: |
- DEFAULT_BRANCH=$(grep "export DEFAULT_BRANCH" scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEFAULT_BRANCH=${DEFAULT_BRANCH}" >> $GITHUB_ENV
- DEFAULT_CONSTRAINTS_BRANCH=$(grep "export DEFAULT_CONSTRAINTS_BRANCH" \
- scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEFAULT_CONSTRAINTS_BRANCH=${DEFAULT_CONSTRAINTS_BRANCH}" >> $GITHUB_ENV
- DEBIAN_VERSION=$(grep "export DEBIAN_VERSION" scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEBIAN_VERSION=${DEBIAN_VERSION}" >> $GITHUB_ENV
- name: >
Checkout "${{ needs.build-info.outputs.targetBranch }}" branch to 'main-airflow' folder
to use ci/scripts from there.
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 383b311283..9d33289068 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -126,6 +126,8 @@ jobs:
GITHUB_CONTEXT: ${{ toJson(github) }}
outputs:
defaultBranch: ${{ steps.selective-checks.outputs.default-branch }}
+ defaultConstraintsBranch: ${{ steps.selective-checks.outputs.default-constraints-branch }}
+ debianVersion: ${{ steps.selective-checks.outputs.debian-version }}
cacheDirective: ${{ steps.dynamic-outputs.outputs.cacheDirective }}
waitForImage: ${{ steps.wait-for-image.outputs.wait-for-image }}
allPythonVersions: ${{ steps.selective-checks.outputs.all-python-versions }}
@@ -164,6 +166,8 @@ jobs:
needs-api-tests: ${{ steps.selective-checks.outputs.needs-api-tests }}
needs-api-codegen: ${{ steps.selective-checks.outputs.needs-api-codegen }}
default-branch: ${{ steps.selective-checks.outputs.default-branch }}
+ docs-filter: ${{ steps.selective-checks.outputs.docs-filter }}
+ skip-pre-commits: ${{ steps.selective-checks.outputs.skip-pre-commits }}
sourceHeadRepo: ${{ steps.source-run-info.outputs.sourceHeadRepo }}
pullRequestNumber: ${{ steps.source-run-info.outputs.pullRequestNumber }}
pullRequestLabels: ${{ steps.source-run-info.outputs.pullRequestLabels }}
@@ -191,7 +195,6 @@ jobs:
ref: ${{ github.sha }}
fetch-depth: 2
persist-credentials: false
- if: github.event_name == 'pull_request'
- name: "Setup python"
uses: actions/setup-python@v2
with:
@@ -200,6 +203,22 @@ jobs:
cache: 'pip'
cache-dependency-path: ./dev/breeze/setup*
- run: ./scripts/ci/install_breeze.sh
+ - name: "Retrieve DEFAULTS from the _initialization.sh"
+ # We cannot "source" the script here because that would be a security problem (we cannot run
+ # any code that comes from the sources coming from the PR. Therefore, we extract the
+ # DEFAULT_BRANCH and DEFAULT_CONSTRAINTS_BRANCH and DEBIAN_VERSION via custom grep/awk/sed commands
+ id: defaults
+ run: |
+ DEFAULT_BRANCH=$(grep "export DEFAULT_BRANCH" scripts/ci/libraries/_initialization.sh | \
+ awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
+ echo "DEFAULT_BRANCH=${DEFAULT_BRANCH}" >> $GITHUB_ENV
+ DEFAULT_CONSTRAINTS_BRANCH=$(grep "export DEFAULT_CONSTRAINTS_BRANCH" \
+ scripts/ci/libraries/_initialization.sh | \
+ awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
+ echo "DEFAULT_CONSTRAINTS_BRANCH=${DEFAULT_CONSTRAINTS_BRANCH}" >> $GITHUB_ENV
+ DEBIAN_VERSION=$(grep "export DEBIAN_VERSION" scripts/ci/libraries/_initialization.sh | \
+ awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
+ echo "DEBIAN_VERSION=${DEBIAN_VERSION}" >> $GITHUB_ENV
- name: Selective checks
id: selective-checks
env:
@@ -294,6 +313,9 @@ jobs:
runs-on: ${{ fromJson(needs.build-info.outputs.runsOn) }}
needs: [build-info]
env:
+ DEFAULT_BRANCH: ${{ needs.build-info.outputs.default-branch }}
+ DEFAULT_CONSTRAINTS_BRANCH: ${{ needs.build-info.outputs.default-constraints-branch }}
+ DEBIAN_VERSION: ${{ needs.build-info.outputs.debian-version }}
RUNS_ON: ${{ fromJson(needs.build-info.outputs.runsOn)[0] }}
steps:
- name: Cleanup repo
@@ -310,23 +332,6 @@ jobs:
with:
python-version: ${{ needs.build-info.outputs.defaultPythonVersion }}
if: needs.build-info.outputs.inWorkflowBuild == 'true'
- - name: "Retrieve DEFAULTS from the _initialization.sh"
- # We cannot "source" the script here because that would be a security problem (we cannot run
- # any code that comes from the sources coming from the PR. Therefore, we extract the
- # DEFAULT_BRANCH and DEFAULT_CONSTRAINTS_BRANCH and DEBIAN_VERSION via custom grep/awk/sed commands
- id: defaults
- run: |
- DEFAULT_BRANCH=$(grep "export DEFAULT_BRANCH" scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEFAULT_BRANCH=${DEFAULT_BRANCH}" >> $GITHUB_ENV
- DEFAULT_CONSTRAINTS_BRANCH=$(grep "export DEFAULT_CONSTRAINTS_BRANCH" \
- scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEFAULT_CONSTRAINTS_BRANCH=${DEFAULT_CONSTRAINTS_BRANCH}" >> $GITHUB_ENV
- DEBIAN_VERSION=$(grep "export DEBIAN_VERSION" scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEBIAN_VERSION=${DEBIAN_VERSION}" >> $GITHUB_ENV
- if: needs.build-info.outputs.inWorkflowBuild == 'true'
- run: ./scripts/ci/install_breeze.sh
if: needs.build-info.outputs.inWorkflowBuild == 'true'
- name: "Free space"
@@ -361,6 +366,9 @@ jobs:
runs-on: ${{ fromJson(needs.build-info.outputs.runsOn) }}
needs: [build-info, build-ci-images]
env:
+ DEFAULT_BRANCH: ${{ needs.build-info.outputs.default-branch }}
+ DEFAULT_CONSTRAINTS_BRANCH: ${{ needs.build-info.outputs.default-constraints-branch }}
+ DEBIAN_VERSION: ${{ needs.build-info.outputs.debian-version }}
RUNS_ON: ${{ fromJson(needs.build-info.outputs.runsOn)[0] }}
BACKEND: sqlite
DOCKER_CACHE: ${{ needs.build-info.outputs.cacheDirective }}
@@ -380,23 +388,6 @@ jobs:
with:
python-version: ${{ needs.build-info.outputs.defaultPythonVersion }}
if: needs.build-info.outputs.inWorkflowBuild == 'true'
- - name: "Retrieve DEFAULTS from the _initialization.sh"
- # We cannot "source" the script here because that would be a security problem (we cannot run
- # any code that comes from the sources coming from the PR. Therefore we extract the
- # DEFAULT_BRANCH and DEFAULT_CONSTRAINTS_BRANCH and DEBIAN_VERSION via custom grep/awk/sed commands
- id: defaults
- run: |
- DEFAULT_BRANCH=$(grep "export DEFAULT_BRANCH" scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEFAULT_BRANCH=${DEFAULT_BRANCH}" >> $GITHUB_ENV
- DEFAULT_CONSTRAINTS_BRANCH=$(grep "export DEFAULT_CONSTRAINTS_BRANCH" \
- scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEFAULT_CONSTRAINTS_BRANCH=${DEFAULT_CONSTRAINTS_BRANCH}" >> $GITHUB_ENV
- DEBIAN_VERSION=$(grep "export DEBIAN_VERSION" scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEBIAN_VERSION=${DEBIAN_VERSION}" >> $GITHUB_ENV
- if: needs.build-info.outputs.inWorkflowBuild == 'true'
- run: ./scripts/ci/install_breeze.sh
if: needs.build-info.outputs.inWorkflowBuild == 'true'
- name: "Free space"
@@ -644,7 +635,7 @@ ${{ hashFiles('.pre-commit-config.yaml') }}"
run: breeze static-checks --all-files --show-diff-on-failure --color always
env:
VERBOSE: "false"
- SKIP: "identity"
+ SKIP: ${{ needs.build-info.outputs.skip-pre-commits }}
COLUMNS: "250"
- name: "Fix ownership"
run: breeze fix-ownership
@@ -701,7 +692,7 @@ ${{ hashFiles('.pre-commit-config.yaml') }}"
env:
VERBOSE: "false"
SKIP_IMAGE_PRE_COMMITS: "true"
- SKIP: "identity"
+ SKIP: ${{ needs.build-info.outputs.skip-pre-commits }}
COLUMNS: "250"
- name: "Fix ownership"
run: breeze fix-ownership
@@ -745,7 +736,7 @@ ${{ hashFiles('.pre-commit-config.yaml') }}"
docs-inventory-${{ hashFiles('setup.py','setup.cfg','pyproject.toml;') }}
docs-inventory-
- name: "Build docs"
- run: breeze build-docs
+ run: breeze build-docs ${{ needs.build-info.outputs.docs-filter }}
- name: Configure AWS credentials
uses: ./.github/actions/configure-aws-credentials
if: >
@@ -1766,6 +1757,9 @@ ${{ hashFiles('.pre-commit-config.yaml') }}"
- tests-mssql
- tests-postgres
env:
+ DEFAULT_BRANCH: ${{ needs.build-info.outputs.default-branch }}
+ DEFAULT_CONSTRAINTS_BRANCH: ${{ needs.build-info.outputs.default-constraints-branch }}
+ DEBIAN_VERSION: ${{ needs.build-info.outputs.debian-version }}
RUNS_ON: ${{ fromJson(needs.build-info.outputs.runsOn)[0] }}
if: needs.build-info.outputs.upgradeToNewerDependencies != 'false'
steps:
@@ -1783,23 +1777,6 @@ ${{ hashFiles('.pre-commit-config.yaml') }}"
with:
python-version: ${{ needs.build-info.outputs.defaultPythonVersion }}
if: needs.build-info.outputs.inWorkflowBuild == 'true'
- - name: "Retrieve DEFAULTS from the _initialization.sh"
- # We cannot "source" the script here because that would be a security problem (we cannot run
- # any code that comes from the sources coming from the PR. Therefore, we extract the
- # DEFAULT_BRANCH and DEFAULT_CONSTRAINTS_BRANCH and DEBIAN_VERSION via custom grep/awk/sed commands
- id: defaults
- run: |
- DEFAULT_BRANCH=$(grep "export DEFAULT_BRANCH" scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEFAULT_BRANCH=${DEFAULT_BRANCH}" >> $GITHUB_ENV
- DEFAULT_CONSTRAINTS_BRANCH=$(grep "export DEFAULT_CONSTRAINTS_BRANCH" \
- scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEFAULT_CONSTRAINTS_BRANCH=${DEFAULT_CONSTRAINTS_BRANCH}" >> $GITHUB_ENV
- DEBIAN_VERSION=$(grep "export DEBIAN_VERSION" scripts/ci/libraries/_initialization.sh | \
- awk 'BEGIN{FS="="} {print $3}' | sed s'/["}]//g')
- echo "DEBIAN_VERSION=${DEBIAN_VERSION}" >> $GITHUB_ENV
- if: needs.build-info.outputs.inWorkflowBuild == 'true'
- run: ./scripts/ci/install_breeze.sh
if: needs.build-info.outputs.inWorkflowBuild == 'true'
- name: "Free space"
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index d91d2bf332..051cdd237c 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -242,7 +242,7 @@ repos:
name: Run pydocstyle
args:
- --convention=pep257
- - --add-ignore=D100,D102,D103,D104,D105,D107,D205,D400,D401
+ - --add-ignore=D100,D102,D103,D104,D105,D107,D202,D205,D400,D401
exclude: |
(?x)
^tests/.*\.py$|
@@ -334,9 +334,9 @@ repos:
entry: ./scripts/ci/pre_commit/pre_commit_check_setup_extra_packages_ref.py
additional_dependencies: ['rich>=12.4.4']
# This check might be removed when min-airflow-version in providers is 2.2
- - id: check-airflow-2-1-compatibility
- name: Check that providers are 2.1 compatible.
- entry: ./scripts/ci/pre_commit/pre_commit_check_2_1_compatibility.py
+ - id: check-airflow-2-2-compatibility
+ name: Check that providers are 2.2 compatible.
+ entry: ./scripts/ci/pre_commit/pre_commit_check_2_2_compatibility.py
language: python
pass_filenames: true
files: ^airflow/providers/.*\.py$
diff --git a/STATIC_CODE_CHECKS.rst b/STATIC_CODE_CHECKS.rst
index 00d533250b..b5b5e37ecb 100644
--- a/STATIC_CODE_CHECKS.rst
+++ b/STATIC_CODE_CHECKS.rst
@@ -136,7 +136,7 @@ require Breeze Docker image to be build locally.
+--------------------------------------------------------+------------------------------------------------------------------+---------+
| blacken-docs | Run black on python code blocks in documentation files | |
+--------------------------------------------------------+------------------------------------------------------------------+---------+
-| check-airflow-2-1-compatibility | Check that providers are 2.1 compatible. | |
+| check-airflow-2-2-compatibility | Check that providers are 2.2 compatible. | |
+--------------------------------------------------------+------------------------------------------------------------------+---------+
| check-airflow-config-yaml-consistent | Checks for consistency between config.yml and default_config.cfg | |
+--------------------------------------------------------+------------------------------------------------------------------+---------+
diff --git a/dev/breeze/src/airflow_breeze/commands/ci_commands.py b/dev/breeze/src/airflow_breeze/commands/ci_commands.py
index c65753e1a6..826a77bf1b 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_commands.py
@@ -30,6 +30,7 @@ from airflow_breeze.params.shell_params import ShellParams
from airflow_breeze.utils.common_options import (
option_airflow_constraints_reference,
option_answer,
+ option_debian_version,
option_dry_run,
option_github_repository,
option_max_age,
@@ -184,6 +185,13 @@ def get_changed_files(commit_ref: Optional[str], dry_run: bool, verbose: bool) -
envvar="DEFAULT_BRANCH",
show_default=True,
)
+@click.option(
+ '--default-constraints-branch',
+ help="Branch against which the constraints should be downloaded from",
+ default="constraints-main",
+ envvar="DEFAULT_CONSTRAINTS_BRANCH",
+ show_default=True,
+)
@click.option(
'--github-event-name',
type=BetterChoice(github_events()),
@@ -192,12 +200,15 @@ def get_changed_files(commit_ref: Optional[str], dry_run: bool, verbose: bool) -
envvar="GITHUB_EVENT_NAME",
show_default=True,
)
+@option_debian_version
@option_verbose
@option_dry_run
def selective_check(
commit_ref: Optional[str],
pr_labels: str,
default_branch: str,
+ default_constraints_branch: str,
+ debian_version: str,
github_event_name: str,
verbose: bool,
dry_run: bool,
@@ -213,6 +224,8 @@ def selective_check(
commit_ref=commit_ref,
files=changed_files,
default_branch=default_branch,
+ default_constraints_branch=default_constraints_branch,
+ debian_version=debian_version,
pr_labels=tuple(" ".split(pr_labels)) if pr_labels else (),
github_event=github_event,
)
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index db839f0712..a5f998ddef 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -29,7 +29,6 @@ PRE_COMMIT_LIST = [
'check-airflow-config-yaml-consistent',
'check-airflow-providers-have-extras',
'check-apache-license-rat',
- 'check-base-operator-partial-arguments',
'check-base-operator-usage',
'check-boring-cyborg-configuration',
'check-breeze-top-dependencies-limited',
@@ -37,7 +36,6 @@ PRE_COMMIT_LIST = [
'check-changelog-has-no-duplicates',
'check-daysago-import-from-utils',
'check-docstring-param-types',
- 'check-example-dags-urls',
'check-executables-have-shebangs',
'check-extra-packages-references',
'check-extras-order',
@@ -61,10 +59,8 @@ PRE_COMMIT_LIST = [
'check-setup-order',
'check-start-date-not-used-in-defaults',
'check-system-tests-present',
- 'check-system-tests-tocs',
'check-xml',
'codespell',
- 'create-missing-init-py-files-tests',
'debug-statements',
'detect-private-key',
'doctoc',
diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index 22e74f4553..5e1acfbb85 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -189,12 +189,16 @@ class SelectiveChecks:
self,
files: tuple[str, ...] = (),
default_branch="main",
+ default_constraints_branch="constraints-main",
+ debian_version="bullseye",
commit_ref: str | None = None,
pr_labels: tuple[str, ...] = (),
github_event: GithubEvents = GithubEvents.PULL_REQUEST,
):
self._files = files
self._default_branch = default_branch
+ self._default_constraints_branch = default_constraints_branch
+ self._debian_version = debian_version
self._commit_ref = commit_ref
self._pr_labels = pr_labels
self._github_event = github_event
@@ -230,6 +234,14 @@ class SelectiveChecks:
def default_branch(self) -> str:
return self._default_branch
+ @cached_property
+ def default_constraints_branch(self) -> str:
+ return self._default_constraints_branch
+
+ @cached_property
+ def debian_version(self) -> str:
+ return self._debian_version
+
@cached_property
def _full_tests_needed(self) -> bool:
if self._github_event in [GithubEvents.PUSH, GithubEvents.SCHEDULE]:
@@ -395,7 +407,10 @@ class SelectiveChecks:
@cached_property
def needs_helm_tests(self) -> bool:
- return self._should_be_run(FileGroupForCi.HELM_FILES) and self._default_branch == "main"
+ if self._default_branch != 'main':
+ get_console().print(f"[warning]Not running helm tests in {self._default_branch} branch")
+ return False
+ return self._should_be_run(FileGroupForCi.HELM_FILES)
@cached_property
def run_tests(self) -> bool:
@@ -467,6 +482,12 @@ class SelectiveChecks:
f"is {self._default_branch} and not main[/]"
)
current_test_types.remove("Providers")
+ if "Integration" in current_test_types:
+ get_console().print(
+ "[warning]Removing 'Integration' because the target branch "
+ f"is {self._default_branch} and not main[/]"
+ )
+ current_test_types.remove("Integration")
return " ".join(sorted(current_test_types))
@cached_property
@@ -478,3 +499,15 @@ class SelectiveChecks:
return len(
self._matching_files(FileGroupForCi.SETUP_FILES, CI_FILE_GROUP_MATCHES)
) > 0 or self._github_event in [GithubEvents.PUSH, GithubEvents.SCHEDULE]
+
+ @cached_property
+ def docs_filter(self) -> str:
+ return (
+ ""
+ if self._default_branch == 'main'
+ else "--package-filter apache-airflow --package-filter docker-stack"
+ )
+
+ @cached_property
+ def skip_pre_commits(self) -> str:
+ return "identity" if self._default_branch == "main" else "identity,check-airflow-2-2-compatibility"
diff --git a/dev/breeze/tests/test_selective_checks.py b/dev/breeze/tests/test_selective_checks.py
index 2d7e8fe83d..196aacf566 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -191,16 +191,21 @@ def test_expected_output_pull_request_main(
@pytest.mark.parametrize(
- "files, pr_labels, default_branch, expected_outputs,",
+ "files, pr_labels, default_branch, default_constraints_branch, debian_version, expected_outputs,",
[
(
pytest.param(
("INTHEWILD.md",),
("full tests needed",),
"main",
+ "constraints-main",
+ "bullseye",
{
"all-python-versions": "['3.7', '3.8', '3.9', '3.10']",
"all-python-versions-list-as-string": "3.7 3.8 3.9 3.10",
+ "default-branch": "main",
+ "default-constraints-branch": "constraints-main",
+ "debian-version": "bullseye",
"image-build": "true",
"run-tests": "true",
"docs-build": "true",
@@ -218,6 +223,8 @@ def test_expected_output_pull_request_main(
"full tests needed",
),
"main",
+ "constraints-main",
+ "bullseye",
{
"all-python-versions": "['3.7', '3.8', '3.9', '3.10']",
"all-python-versions-list-as-string": "3.7 3.8 3.9 3.10",
@@ -235,9 +242,14 @@ def test_expected_output_pull_request_main(
(),
("full tests needed",),
"main",
+ "constraints-main",
+ "bullseye",
{
"all-python-versions": "['3.7', '3.8', '3.9', '3.10']",
"all-python-versions-list-as-string": "3.7 3.8 3.9 3.10",
+ "default-branch": "main",
+ "default-constraints-branch": "constraints-main",
+ "debian-version": "bullseye",
"image-build": "true",
"run-tests": "true",
"docs-build": "true",
@@ -252,9 +264,14 @@ def test_expected_output_pull_request_main(
("INTHEWILD.md",),
("full tests needed",),
"v2-3-stable",
+ "constraints-2-3",
+ "bullseye",
{
"all-python-versions": "['3.7', '3.8', '3.9', '3.10']",
"all-python-versions-list-as-string": "3.7 3.8 3.9 3.10",
+ "default-branch": "v2-3-stable",
+ "default-constraints-branch": "constraints-2-3",
+ "debian-version": "bullseye",
"image-build": "true",
"run-tests": "true",
"docs-build": "true",
@@ -270,6 +287,8 @@ def test_expected_output_full_tests_needed(
files: Tuple[str, ...],
pr_labels: Tuple[str, ...],
default_branch: str,
+ default_constraints_branch: str,
+ debian_version: str,
expected_outputs: Dict[str, str],
):
sc = SelectiveChecks(
@@ -278,6 +297,8 @@ def test_expected_output_full_tests_needed(
github_event=GithubEvents.PULL_REQUEST,
pr_labels=pr_labels,
default_branch=default_branch,
+ default_constraints_branch=default_constraints_branch,
+ debian_version=debian_version,
)
output = str(sc)
assert_outputs_are_printed(expected_outputs, output)
diff --git a/docs/conf.py b/docs/conf.py
index 47334381fc..a33a5cbb43 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -694,6 +694,8 @@ autoapi_ignore = [
]
if PACKAGE_NAME == 'apache-airflow':
autoapi_ignore.append('*/airflow/providers/*')
+elif PACKAGE_NAME == 'docker-stack':
+ autoapi_ignore.append('*/airflow/providers/*')
else:
autoapi_ignore.append('*/airflow/providers/cncf/kubernetes/backcompat/*')
# Keep the AutoAPI generated files on the filesystem after the run.
diff --git a/images/breeze/output-commands-hash.txt b/images/breeze/output-commands-hash.txt
index 15b755a6e5..b0f81d4d3d 100644
--- a/images/breeze/output-commands-hash.txt
+++ b/images/breeze/output-commands-hash.txt
@@ -23,12 +23,12 @@ pull-prod-image:6e8467a2b8c833a392c8bdd65189363e
regenerate-command-images:4fd2e7ecbfd6eebb18b854f3eb0f29c8
release-prod-images:8858fe5a13989c7c65a79dc97a880928
resource-check:0fb929ac3496dbbe97acfe99e35accd7
-selective-check:eb1cf022ae43fa9c737b1647142e5a96
+selective-check:9b1cc2827b36be29141083dc9e9f6290
self-upgrade:b5437c0a1a91533a11ee9d0a9692369c
setup-autocomplete:355b72dee171c2fcba46fc90ac7c97b0
shell:ab7955da71048b3a695485c152d06786
start-airflow:30caa077555bef44e5bdf76dfeca092c
-static-checks:96a0bcc981be838ae32f53e804157ee5
+static-checks:69bbef8c50c452faf58403d7a06f34b6
stop:8ebd8a42f1003495d37b884de5ac7ce6
tests:ae8d62b505ff8f79bddc202fe9d575e3
verify-image:a6b3c70957aea96a5d4d261f23359a2d
diff --git a/images/breeze/output-selective-check.svg b/images/breeze/output-selective-check.svg
index 45a7740819..02ab2644d7 100644
--- a/images/breeze/output-selective-check.svg
+++ b/images/breeze/output-selective-check.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 513.5999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 586.8" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -19,117 +19,129 @@
font-weight: 700;
}
- .terminal-2108240815-matrix {
+ .terminal-3947339877-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
- .terminal-2108240815-title {
+ .terminal-3947339877-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
- .terminal-2108240815-r1 { fill: #c5c8c6;font-weight: bold }
-.terminal-2108240815-r2 { fill: #c5c8c6 }
-.terminal-2108240815-r3 { fill: #d0b344;font-weight: bold }
-.terminal-2108240815-r4 { fill: #868887 }
-.terminal-2108240815-r5 { fill: #68a0b3;font-weight: bold }
-.terminal-2108240815-r6 { fill: #8d7b39 }
-.terminal-2108240815-r7 { fill: #98a84b;font-weight: bold }
+ .terminal-3947339877-r1 { fill: #c5c8c6;font-weight: bold }
+.terminal-3947339877-r2 { fill: #c5c8c6 }
+.terminal-3947339877-r3 { fill: #d0b344;font-weight: bold }
+.terminal-3947339877-r4 { fill: #868887 }
+.terminal-3947339877-r5 { fill: #68a0b3;font-weight: bold }
+.terminal-3947339877-r6 { fill: #8d7b39 }
+.terminal-3947339877-r7 { fill: #98a84b;font-weight: bold }
</style>
<defs>
- <clipPath id="terminal-2108240815-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="462.59999999999997" />
+ <clipPath id="terminal-3947339877-clip-terminal">
+ <rect x="0" y="0" width="1463.0" height="535.8" />
</clipPath>
- <clipPath id="terminal-2108240815-line-0">
+ <clipPath id="terminal-3947339877-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-1">
+<clipPath id="terminal-3947339877-line-1">
<rect x="0" y="25.9" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-2">
+<clipPath id="terminal-3947339877-line-2">
<rect x="0" y="50.3" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-3">
+<clipPath id="terminal-3947339877-line-3">
<rect x="0" y="74.7" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-4">
+<clipPath id="terminal-3947339877-line-4">
<rect x="0" y="99.1" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-5">
+<clipPath id="terminal-3947339877-line-5">
<rect x="0" y="123.5" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-6">
+<clipPath id="terminal-3947339877-line-6">
<rect x="0" y="147.9" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-7">
+<clipPath id="terminal-3947339877-line-7">
<rect x="0" y="172.3" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-8">
+<clipPath id="terminal-3947339877-line-8">
<rect x="0" y="196.7" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-9">
+<clipPath id="terminal-3947339877-line-9">
<rect x="0" y="221.1" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-10">
+<clipPath id="terminal-3947339877-line-10">
<rect x="0" y="245.5" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-11">
+<clipPath id="terminal-3947339877-line-11">
<rect x="0" y="269.9" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-12">
+<clipPath id="terminal-3947339877-line-12">
<rect x="0" y="294.3" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-13">
+<clipPath id="terminal-3947339877-line-13">
<rect x="0" y="318.7" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-14">
+<clipPath id="terminal-3947339877-line-14">
<rect x="0" y="343.1" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-15">
+<clipPath id="terminal-3947339877-line-15">
<rect x="0" y="367.5" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-16">
+<clipPath id="terminal-3947339877-line-16">
<rect x="0" y="391.9" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-2108240815-line-17">
+<clipPath id="terminal-3947339877-line-17">
<rect x="0" y="416.3" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="terminal-3947339877-line-18">
+ <rect x="0" y="440.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="terminal-3947339877-line-19">
+ <rect x="0" y="465.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="terminal-3947339877-line-20">
+ <rect x="0" y="489.5" width="1464" height="24.65"/>
+ </clipPath>
</defs>
- <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="511.6" rx="8"/><text class="terminal-2108240815-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: selective-check</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="584.8" rx="8"/><text class="terminal-3947339877-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: selective-check</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
<circle cx="44" cy="0" r="7" fill="#28c840"/>
</g>
- <g transform="translate(9, 41)" clip-path="url(#terminal-2108240815-clip-terminal)">
+ <g transform="translate(9, 41)" clip-path="url(#terminal-3947339877-clip-terminal)">
- <g class="terminal-2108240815-matrix">
- <text class="terminal-2108240815-r2" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-2108240815-line-0)">
-</text><text class="terminal-2108240815-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#terminal-2108240815-line-1)">Usage: </text><text class="terminal-2108240815-r1" x="97.6" y="44.4" textLength="390.4" clip-path="url(#terminal-2108240815-line-1)">breeze selective-check [OPTIONS]</text><text class="terminal-2108240815-r2" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-2108240815-line-1)">
-</text><text class="terminal-2108240815-r2" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-2108240815-line-2)">
-</text><text class="terminal-2108240815-r2" x="12.2" y="93.2" textLength="768.6" clip-path="url(#terminal-2108240815-line-3)">Checks what kind of tests should be run for an incoming commit.</text><text class="terminal-2108240815-r2" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-2108240815-line-3)">
-</text><text class="terminal-2108240815-r2" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-2108240815-line-4)">
-</text><text class="terminal-2108240815-r4" x="0" y="142" textLength="24.4" clip-path="url(#terminal-2108240815-line-5)">╭─</text><text class="terminal-2108240815-r4" x="24.4" y="142" textLength="1415.2" clip-path="url(#terminal-2108240815-line-5)"> Selective check flags ─────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-2108240815-r4" x="1439.6" y="142" textLength="24.4" clip-path="url(#terminal-2 [...]
-</text><text class="terminal-2108240815-r4" x="0" y="166.4" textLength="12.2" clip-path="url(#terminal-2108240815-line-6)">│</text><text class="terminal-2108240815-r5" x="24.4" y="166.4" textLength="12.2" clip-path="url(#terminal-2108240815-line-6)">-</text><text class="terminal-2108240815-r5" x="36.6" y="166.4" textLength="85.4" clip-path="url(#terminal-2108240815-line-6)">-commit</text><text class="terminal-2108240815-r5" x="122" y="166.4" textLength="48.8" clip-path="url(#terminal-210 [...]
-</text><text class="terminal-2108240815-r4" x="0" y="190.8" textLength="12.2" clip-path="url(#terminal-2108240815-line-7)">│</text><text class="terminal-2108240815-r5" x="24.4" y="190.8" textLength="12.2" clip-path="url(#terminal-2108240815-line-7)">-</text><text class="terminal-2108240815-r5" x="36.6" y="190.8" textLength="36.6" clip-path="url(#terminal-2108240815-line-7)">-pr</text><text class="terminal-2108240815-r5" x="73.2" y="190.8" textLength="85.4" clip-path="url(#terminal-210824 [...]
-</text><text class="terminal-2108240815-r4" x="0" y="215.2" textLength="12.2" clip-path="url(#terminal-2108240815-line-8)">│</text><text class="terminal-2108240815-r5" x="24.4" y="215.2" textLength="12.2" clip-path="url(#terminal-2108240815-line-8)">-</text><text class="terminal-2108240815-r5" x="36.6" y="215.2" textLength="97.6" clip-path="url(#terminal-2108240815-line-8)">-default</text><text class="terminal-2108240815-r5" x="134.2" y="215.2" textLength="85.4" clip-path="url(#terminal- [...]
-</text><text class="terminal-2108240815-r4" x="0" y="239.6" textLength="12.2" clip-path="url(#terminal-2108240815-line-9)">│</text><text class="terminal-2108240815-r5" x="24.4" y="239.6" textLength="12.2" clip-path="url(#terminal-2108240815-line-9)">-</text><text class="terminal-2108240815-r5" x="36.6" y="239.6" textLength="85.4" clip-path="url(#terminal-2108240815-line-9)">-github</text><text class="terminal-2108240815-r5" x="122" y="239.6" textLength="134.2" clip-path="url(#terminal-21 [...]
-</text><text class="terminal-2108240815-r4" x="0" y="264" textLength="12.2" clip-path="url(#terminal-2108240815-line-10)">│</text><text class="terminal-2108240815-r6" x="305" y="264" textLength="1134.6" clip-path="url(#terminal-2108240815-line-10)">(pull_request | pull_request_review | pull_request_target | pull_request_workflow | push |   </text><text class="terminal-2108240815-r4" x="1451.8" y="264" textLength="12.2" clip-path [...]
-</text><text class="terminal-2108240815-r4" x="0" y="288.4" textLength="12.2" clip-path="url(#terminal-2108240815-line-11)">│</text><text class="terminal-2108240815-r6" x="305" y="288.4" textLength="1134.6" clip-path="url(#terminal-2108240815-line-11)">schedule | workflow_run)                                  & [...]
-</text><text class="terminal-2108240815-r4" x="0" y="312.8" textLength="12.2" clip-path="url(#terminal-2108240815-line-12)">│</text><text class="terminal-2108240815-r4" x="305" y="312.8" textLength="1134.6" clip-path="url(#terminal-2108240815-line-12)">[default: pull_request]                                   & [...]
-</text><text class="terminal-2108240815-r4" x="0" y="337.2" textLength="1464" clip-path="url(#terminal-2108240815-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-2108240815-r2" x="1464" y="337.2" textLength="12.2" clip-path="url(#terminal-2108240815-line-13)">
-</text><text class="terminal-2108240815-r4" x="0" y="361.6" textLength="24.4" clip-path="url(#terminal-2108240815-line-14)">╭─</text><text class="terminal-2108240815-r4" x="24.4" y="361.6" textLength="1415.2" clip-path="url(#terminal-2108240815-line-14)"> Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-2108240815-r4" x="1439.6" y="361.6" textLength="24.4" clip-path="url(#terminal-210 [...]
-</text><text class="terminal-2108240815-r4" x="0" y="386" textLength="12.2" clip-path="url(#terminal-2108240815-line-15)">│</text><text class="terminal-2108240815-r5" x="24.4" y="386" textLength="12.2" clip-path="url(#terminal-2108240815-line-15)">-</text><text class="terminal-2108240815-r5" x="36.6" y="386" textLength="97.6" clip-path="url(#terminal-2108240815-line-15)">-verbose</text><text class="terminal-2108240815-r7" x="158.6" y="386" textLength="24.4" clip-path="url(#terminal-21082 [...]
-</text><text class="terminal-2108240815-r4" x="0" y="410.4" textLength="12.2" clip-path="url(#terminal-2108240815-line-16)">│</text><text class="terminal-2108240815-r5" x="24.4" y="410.4" textLength="12.2" clip-path="url(#terminal-2108240815-line-16)">-</text><text class="terminal-2108240815-r5" x="36.6" y="410.4" textLength="48.8" clip-path="url(#terminal-2108240815-line-16)">-dry</text><text class="terminal-2108240815-r5" x="85.4" y="410.4" textLength="48.8" clip-path="url(#terminal-21 [...]
-</text><text class="terminal-2108240815-r4" x="0" y="434.8" textLength="12.2" clip-path="url(#terminal-2108240815-line-17)">│</text><text class="terminal-2108240815-r5" x="24.4" y="434.8" textLength="12.2" clip-path="url(#terminal-2108240815-line-17)">-</text><text class="terminal-2108240815-r5" x="36.6" y="434.8" textLength="61" clip-path="url(#terminal-2108240815-line-17)">-help</text><text class="terminal-2108240815-r7" x="158.6" y="434.8" textLength="24.4" clip-path="url(#terminal-21 [...]
-</text><text class="terminal-2108240815-r4" x="0" y="459.2" textLength="1464" clip-path="url(#terminal-2108240815-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-2108240815-r2" x="1464" y="459.2" textLength="12.2" clip-path="url(#terminal-2108240815-line-18)">
+ <g class="terminal-3947339877-matrix">
+ <text class="terminal-3947339877-r2" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-3947339877-line-0)">
+</text><text class="terminal-3947339877-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#terminal-3947339877-line-1)">Usage: </text><text class="terminal-3947339877-r1" x="97.6" y="44.4" textLength="390.4" clip-path="url(#terminal-3947339877-line-1)">breeze selective-check [OPTIONS]</text><text class="terminal-3947339877-r2" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-3947339877-line-1)">
+</text><text class="terminal-3947339877-r2" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-3947339877-line-2)">
+</text><text class="terminal-3947339877-r2" x="12.2" y="93.2" textLength="768.6" clip-path="url(#terminal-3947339877-line-3)">Checks what kind of tests should be run for an incoming commit.</text><text class="terminal-3947339877-r2" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-3947339877-line-3)">
+</text><text class="terminal-3947339877-r2" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-3947339877-line-4)">
+</text><text class="terminal-3947339877-r4" x="0" y="142" textLength="24.4" clip-path="url(#terminal-3947339877-line-5)">╭─</text><text class="terminal-3947339877-r4" x="24.4" y="142" textLength="1415.2" clip-path="url(#terminal-3947339877-line-5)"> Selective check flags ─────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-3947339877-r4" x="1439.6" y="142" textLength="24.4" clip-path="url(#terminal-3 [...]
+</text><text class="terminal-3947339877-r4" x="0" y="166.4" textLength="12.2" clip-path="url(#terminal-3947339877-line-6)">│</text><text class="terminal-3947339877-r5" x="24.4" y="166.4" textLength="12.2" clip-path="url(#terminal-3947339877-line-6)">-</text><text class="terminal-3947339877-r5" x="36.6" y="166.4" textLength="85.4" clip-path="url(#terminal-3947339877-line-6)">-commit</text><text class="terminal-3947339877-r5" x="122" y="166.4" textLength="48.8" clip-path="url(#terminal-394 [...]
+</text><text class="terminal-3947339877-r4" x="0" y="190.8" textLength="12.2" clip-path="url(#terminal-3947339877-line-7)">│</text><text class="terminal-3947339877-r5" x="24.4" y="190.8" textLength="12.2" clip-path="url(#terminal-3947339877-line-7)">-</text><text class="terminal-3947339877-r5" x="36.6" y="190.8" textLength="36.6" clip-path="url(#terminal-3947339877-line-7)">-pr</text><text class="terminal-3947339877-r5" x="73.2" y="190.8" textLength="85.4" clip-path="url(#terminal-394733 [...]
+</text><text class="terminal-3947339877-r4" x="0" y="215.2" textLength="12.2" clip-path="url(#terminal-3947339877-line-8)">│</text><text class="terminal-3947339877-r5" x="24.4" y="215.2" textLength="12.2" clip-path="url(#terminal-3947339877-line-8)">-</text><text class="terminal-3947339877-r5" x="36.6" y="215.2" textLength="97.6" clip-path="url(#terminal-3947339877-line-8)">-default</text><text class="terminal-3947339877-r5" x="134.2" y="215.2" textLength="85.4" clip-path="url(#terminal- [...]
+</text><text class="terminal-3947339877-r4" x="0" y="239.6" textLength="12.2" clip-path="url(#terminal-3947339877-line-9)">│</text><text class="terminal-3947339877-r5" x="24.4" y="239.6" textLength="12.2" clip-path="url(#terminal-3947339877-line-9)">-</text><text class="terminal-3947339877-r5" x="36.6" y="239.6" textLength="85.4" clip-path="url(#terminal-3947339877-line-9)">-github</text><text class="terminal-3947339877-r5" x="122" y="239.6" textLength="134.2" clip-path="url(#terminal-39 [...]
+</text><text class="terminal-3947339877-r4" x="0" y="264" textLength="12.2" clip-path="url(#terminal-3947339877-line-10)">│</text><text class="terminal-3947339877-r6" x="305" y="264" textLength="1134.6" clip-path="url(#terminal-3947339877-line-10)">(pull_request | pull_request_review | pull_request_target | pull_request_workflow | push |   </text><text class="terminal-3947339877-r4" x="1451.8" y="264" textLength="12.2" clip-path [...]
+</text><text class="terminal-3947339877-r4" x="0" y="288.4" textLength="12.2" clip-path="url(#terminal-3947339877-line-11)">│</text><text class="terminal-3947339877-r6" x="305" y="288.4" textLength="1134.6" clip-path="url(#terminal-3947339877-line-11)">schedule | workflow_run)                                  & [...]
+</text><text class="terminal-3947339877-r4" x="0" y="312.8" textLength="12.2" clip-path="url(#terminal-3947339877-line-12)">│</text><text class="terminal-3947339877-r4" x="305" y="312.8" textLength="1134.6" clip-path="url(#terminal-3947339877-line-12)">[default: pull_request]                                   & [...]
+</text><text class="terminal-3947339877-r4" x="0" y="337.2" textLength="1464" clip-path="url(#terminal-3947339877-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-3947339877-r2" x="1464" y="337.2" textLength="12.2" clip-path="url(#terminal-3947339877-line-13)">
+</text><text class="terminal-3947339877-r4" x="0" y="361.6" textLength="24.4" clip-path="url(#terminal-3947339877-line-14)">╭─</text><text class="terminal-3947339877-r4" x="24.4" y="361.6" textLength="1415.2" clip-path="url(#terminal-3947339877-line-14)"> Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-3947339877-r4" x="1439.6" y="361.6" textLength="24.4" clip-path="url(#terminal-394 [...]
+</text><text class="terminal-3947339877-r4" x="0" y="386" textLength="12.2" clip-path="url(#terminal-3947339877-line-15)">│</text><text class="terminal-3947339877-r5" x="24.4" y="386" textLength="12.2" clip-path="url(#terminal-3947339877-line-15)">-</text><text class="terminal-3947339877-r5" x="36.6" y="386" textLength="97.6" clip-path="url(#terminal-3947339877-line-15)">-default</text><text class="terminal-3947339877-r5" x="134.2" y="386" textLength="231.8" clip-path="url(#terminal-3947 [...]
+</text><text class="terminal-3947339877-r4" x="0" y="410.4" textLength="12.2" clip-path="url(#terminal-3947339877-line-16)">│</text><text class="terminal-3947339877-r4" x="439.2" y="410.4" textLength="756.4" clip-path="url(#terminal-3947339877-line-16)">[default: constraints-main]                                  &# [...]
+</text><text class="terminal-3947339877-r4" x="0" y="434.8" textLength="12.2" clip-path="url(#terminal-3947339877-line-17)">│</text><text class="terminal-3947339877-r5" x="24.4" y="434.8" textLength="12.2" clip-path="url(#terminal-3947339877-line-17)">-</text><text class="terminal-3947339877-r5" x="36.6" y="434.8" textLength="85.4" clip-path="url(#terminal-3947339877-line-17)">-debian</text><text class="terminal-3947339877-r5" x="122" y="434.8" textLength="97.6" clip-path="url(#terminal- [...]
+</text><text class="terminal-3947339877-r4" x="0" y="459.2" textLength="12.2" clip-path="url(#terminal-3947339877-line-18)">│</text><text class="terminal-3947339877-r5" x="24.4" y="459.2" textLength="12.2" clip-path="url(#terminal-3947339877-line-18)">-</text><text class="terminal-3947339877-r5" x="36.6" y="459.2" textLength="97.6" clip-path="url(#terminal-3947339877-line-18)">-verbose</text><text class="terminal-3947339877-r7" x="390.4" y="459.2" textLength="24.4" clip-path="url(#termin [...]
+</text><text class="terminal-3947339877-r4" x="0" y="483.6" textLength="12.2" clip-path="url(#terminal-3947339877-line-19)">│</text><text class="terminal-3947339877-r5" x="24.4" y="483.6" textLength="12.2" clip-path="url(#terminal-3947339877-line-19)">-</text><text class="terminal-3947339877-r5" x="36.6" y="483.6" textLength="48.8" clip-path="url(#terminal-3947339877-line-19)">-dry</text><text class="terminal-3947339877-r5" x="85.4" y="483.6" textLength="48.8" clip-path="url(#terminal-39 [...]
+</text><text class="terminal-3947339877-r4" x="0" y="508" textLength="12.2" clip-path="url(#terminal-3947339877-line-20)">│</text><text class="terminal-3947339877-r5" x="24.4" y="508" textLength="12.2" clip-path="url(#terminal-3947339877-line-20)">-</text><text class="terminal-3947339877-r5" x="36.6" y="508" textLength="61" clip-path="url(#terminal-3947339877-line-20)">-help</text><text class="terminal-3947339877-r7" x="390.4" y="508" textLength="24.4" clip-path="url(#terminal-3947339877 [...]
+</text><text class="terminal-3947339877-r4" x="0" y="532.4" textLength="1464" clip-path="url(#terminal-3947339877-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-3947339877-r2" x="1464" y="532.4" textLength="12.2" clip-path="url(#terminal-3947339877-line-21)">
</text>
</g>
</g>
diff --git a/images/breeze/output-static-checks.svg b/images/breeze/output-static-checks.svg
index ae64d0be23..75126bd608 100644
--- a/images/breeze/output-static-checks.svg
+++ b/images/breeze/output-static-checks.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1270.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1221.1999999999998" xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -19,241 +19,233 @@
font-weight: 700;
}
- .terminal-1143647577-matrix {
+ .terminal-751396731-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
- .terminal-1143647577-title {
+ .terminal-751396731-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
- .terminal-1143647577-r1 { fill: #c5c8c6;font-weight: bold }
-.terminal-1143647577-r2 { fill: #c5c8c6 }
-.terminal-1143647577-r3 { fill: #d0b344;font-weight: bold }
-.terminal-1143647577-r4 { fill: #868887 }
-.terminal-1143647577-r5 { fill: #68a0b3;font-weight: bold }
-.terminal-1143647577-r6 { fill: #98a84b;font-weight: bold }
-.terminal-1143647577-r7 { fill: #8d7b39 }
+ .terminal-751396731-r1 { fill: #c5c8c6;font-weight: bold }
+.terminal-751396731-r2 { fill: #c5c8c6 }
+.terminal-751396731-r3 { fill: #d0b344;font-weight: bold }
+.terminal-751396731-r4 { fill: #868887 }
+.terminal-751396731-r5 { fill: #68a0b3;font-weight: bold }
+.terminal-751396731-r6 { fill: #98a84b;font-weight: bold }
+.terminal-751396731-r7 { fill: #8d7b39 }
</style>
<defs>
- <clipPath id="terminal-1143647577-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="1219.0" />
+ <clipPath id="terminal-751396731-clip-terminal">
+ <rect x="0" y="0" width="1463.0" height="1170.1999999999998" />
</clipPath>
- <clipPath id="terminal-1143647577-line-0">
+ <clipPath id="terminal-751396731-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-1">
+<clipPath id="terminal-751396731-line-1">
<rect x="0" y="25.9" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-2">
+<clipPath id="terminal-751396731-line-2">
<rect x="0" y="50.3" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-3">
+<clipPath id="terminal-751396731-line-3">
<rect x="0" y="74.7" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-4">
+<clipPath id="terminal-751396731-line-4">
<rect x="0" y="99.1" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-5">
+<clipPath id="terminal-751396731-line-5">
<rect x="0" y="123.5" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-6">
+<clipPath id="terminal-751396731-line-6">
<rect x="0" y="147.9" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-7">
+<clipPath id="terminal-751396731-line-7">
<rect x="0" y="172.3" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-8">
+<clipPath id="terminal-751396731-line-8">
<rect x="0" y="196.7" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-9">
+<clipPath id="terminal-751396731-line-9">
<rect x="0" y="221.1" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-10">
+<clipPath id="terminal-751396731-line-10">
<rect x="0" y="245.5" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-11">
+<clipPath id="terminal-751396731-line-11">
<rect x="0" y="269.9" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-12">
+<clipPath id="terminal-751396731-line-12">
<rect x="0" y="294.3" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-13">
+<clipPath id="terminal-751396731-line-13">
<rect x="0" y="318.7" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-14">
+<clipPath id="terminal-751396731-line-14">
<rect x="0" y="343.1" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-15">
+<clipPath id="terminal-751396731-line-15">
<rect x="0" y="367.5" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-16">
+<clipPath id="terminal-751396731-line-16">
<rect x="0" y="391.9" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-17">
+<clipPath id="terminal-751396731-line-17">
<rect x="0" y="416.3" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-18">
+<clipPath id="terminal-751396731-line-18">
<rect x="0" y="440.7" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-19">
+<clipPath id="terminal-751396731-line-19">
<rect x="0" y="465.1" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-20">
+<clipPath id="terminal-751396731-line-20">
<rect x="0" y="489.5" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-21">
+<clipPath id="terminal-751396731-line-21">
<rect x="0" y="513.9" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-22">
+<clipPath id="terminal-751396731-line-22">
<rect x="0" y="538.3" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-23">
+<clipPath id="terminal-751396731-line-23">
<rect x="0" y="562.7" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-24">
+<clipPath id="terminal-751396731-line-24">
<rect x="0" y="587.1" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-25">
+<clipPath id="terminal-751396731-line-25">
<rect x="0" y="611.5" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-26">
+<clipPath id="terminal-751396731-line-26">
<rect x="0" y="635.9" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-27">
+<clipPath id="terminal-751396731-line-27">
<rect x="0" y="660.3" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-28">
+<clipPath id="terminal-751396731-line-28">
<rect x="0" y="684.7" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-29">
+<clipPath id="terminal-751396731-line-29">
<rect x="0" y="709.1" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-30">
+<clipPath id="terminal-751396731-line-30">
<rect x="0" y="733.5" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-31">
+<clipPath id="terminal-751396731-line-31">
<rect x="0" y="757.9" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-32">
+<clipPath id="terminal-751396731-line-32">
<rect x="0" y="782.3" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-33">
+<clipPath id="terminal-751396731-line-33">
<rect x="0" y="806.7" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-34">
+<clipPath id="terminal-751396731-line-34">
<rect x="0" y="831.1" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-35">
+<clipPath id="terminal-751396731-line-35">
<rect x="0" y="855.5" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-36">
+<clipPath id="terminal-751396731-line-36">
<rect x="0" y="879.9" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-37">
+<clipPath id="terminal-751396731-line-37">
<rect x="0" y="904.3" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-38">
+<clipPath id="terminal-751396731-line-38">
<rect x="0" y="928.7" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-39">
+<clipPath id="terminal-751396731-line-39">
<rect x="0" y="953.1" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-40">
+<clipPath id="terminal-751396731-line-40">
<rect x="0" y="977.5" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-41">
+<clipPath id="terminal-751396731-line-41">
<rect x="0" y="1001.9" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-42">
+<clipPath id="terminal-751396731-line-42">
<rect x="0" y="1026.3" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-43">
+<clipPath id="terminal-751396731-line-43">
<rect x="0" y="1050.7" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-44">
+<clipPath id="terminal-751396731-line-44">
<rect x="0" y="1075.1" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-45">
+<clipPath id="terminal-751396731-line-45">
<rect x="0" y="1099.5" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-46">
+<clipPath id="terminal-751396731-line-46">
<rect x="0" y="1123.9" width="1464" height="24.65"/>
</clipPath>
-<clipPath id="terminal-1143647577-line-47">
- <rect x="0" y="1148.3" width="1464" height="24.65"/>
- </clipPath>
-<clipPath id="terminal-1143647577-line-48">
- <rect x="0" y="1172.7" width="1464" height="24.65"/>
- </clipPath>
</defs>
- <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1268" rx="8"/><text class="terminal-1143647577-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: static-checks</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1219.2" rx="8"/><text class="terminal-751396731-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command: static-checks</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
<circle cx="44" cy="0" r="7" fill="#28c840"/>
</g>
- <g transform="translate(9, 41)" clip-path="url(#terminal-1143647577-clip-terminal)">
+ <g transform="translate(9, 41)" clip-path="url(#terminal-751396731-clip-terminal)">
- <g class="terminal-1143647577-matrix">
- <text class="terminal-1143647577-r2" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-1143647577-line-0)">
-</text><text class="terminal-1143647577-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#terminal-1143647577-line-1)">Usage: </text><text class="terminal-1143647577-r1" x="97.6" y="44.4" textLength="610" clip-path="url(#terminal-1143647577-line-1)">breeze static-checks [OPTIONS] [PRECOMMIT_ARGS]...</text><text class="terminal-1143647577-r2" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-1143647577-line-1)">
-</text><text class="terminal-1143647577-r2" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-1143647577-line-2)">
-</text><text class="terminal-1143647577-r2" x="12.2" y="93.2" textLength="219.6" clip-path="url(#terminal-1143647577-line-3)">Run static checks.</text><text class="terminal-1143647577-r2" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-1143647577-line-3)">
-</text><text class="terminal-1143647577-r2" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-1143647577-line-4)">
-</text><text class="terminal-1143647577-r4" x="0" y="142" textLength="24.4" clip-path="url(#terminal-1143647577-line-5)">╭─</text><text class="terminal-1143647577-r4" x="24.4" y="142" textLength="1415.2" clip-path="url(#terminal-1143647577-line-5)"> Pre-commit flags ──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-1143647577-r4" x="1439.6" y="142" textLength="24.4" clip-path="url(#terminal-114364 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="166.4" textLength="12.2" clip-path="url(#terminal-1143647577-line-6)">│</text><text class="terminal-1143647577-r5" x="24.4" y="166.4" textLength="12.2" clip-path="url(#terminal-1143647577-line-6)">-</text><text class="terminal-1143647577-r5" x="36.6" y="166.4" textLength="61" clip-path="url(#terminal-1143647577-line-6)">-type</text><text class="terminal-1143647577-r6" x="317.2" y="166.4" textLength="24.4" clip-path="url(#terminal-11436 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="190.8" textLength="12.2" clip-path="url(#terminal-1143647577-line-7)">│</text><text class="terminal-1143647577-r7" x="366" y="190.8" textLength="1073.6" clip-path="url(#terminal-1143647577-line-7)">(all | black | blacken-docs | check-airflow-2-2-compatibility |                         [...]
-</text><text class="terminal-1143647577-r4" x="0" y="215.2" textLength="12.2" clip-path="url(#terminal-1143647577-line-8)">│</text><text class="terminal-1143647577-r7" x="366" y="215.2" textLength="1073.6" clip-path="url(#terminal-1143647577-line-8)">check-airflow-config-yaml-consistent | check-airflow-providers-have-extras |            </text><text class="terminal-1143647577-r4" x="1451.8" y="215.2" textLength="1 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="239.6" textLength="12.2" clip-path="url(#terminal-1143647577-line-9)">│</text><text class="terminal-1143647577-r7" x="366" y="239.6" textLength="1073.6" clip-path="url(#terminal-1143647577-line-9)">check-apache-license-rat | check-base-operator-partial-arguments |                      </text><text class="terminal [...]
-</text><text class="terminal-1143647577-r4" x="0" y="264" textLength="12.2" clip-path="url(#terminal-1143647577-line-10)">│</text><text class="terminal-1143647577-r7" x="366" y="264" textLength="1073.6" clip-path="url(#terminal-1143647577-line-10)">check-base-operator-usage | check-boring-cyborg-configuration |                         </text><text cl [...]
-</text><text class="terminal-1143647577-r4" x="0" y="288.4" textLength="12.2" clip-path="url(#terminal-1143647577-line-11)">│</text><text class="terminal-1143647577-r7" x="366" y="288.4" textLength="1073.6" clip-path="url(#terminal-1143647577-line-11)">check-breeze-top-dependencies-limited | check-builtin-literals |                        </text><text cla [...]
-</text><text class="terminal-1143647577-r4" x="0" y="312.8" textLength="12.2" clip-path="url(#terminal-1143647577-line-12)">│</text><text class="terminal-1143647577-r7" x="366" y="312.8" textLength="1073.6" clip-path="url(#terminal-1143647577-line-12)">check-changelog-has-no-duplicates | check-daysago-import-from-utils |                   </text><text class="terminal-1143647577-r [...]
-</text><text class="terminal-1143647577-r4" x="0" y="337.2" textLength="12.2" clip-path="url(#terminal-1143647577-line-13)">│</text><text class="terminal-1143647577-r7" x="366" y="337.2" textLength="1073.6" clip-path="url(#terminal-1143647577-line-13)">check-docstring-param-types | check-example-dags-urls | check-executables-have-shebangs </text><text class="terminal-1143647577-r4" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#terminal-1143647577-line-13 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="361.6" textLength="12.2" clip-path="url(#terminal-1143647577-line-14)">│</text><text class="terminal-1143647577-r7" x="366" y="361.6" textLength="1073.6" clip-path="url(#terminal-1143647577-line-14)">| check-extra-packages-references | check-extras-order | check-for-inclusive-language | </text><text class="terminal-1143647577-r4" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#terminal-11436475 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="386" textLength="12.2" clip-path="url(#terminal-1143647577-line-15)">│</text><text class="terminal-1143647577-r7" x="366" y="386" textLength="1073.6" clip-path="url(#terminal-1143647577-line-15)">check-hooks-apply | check-incorrect-use-of-LoggingMixin |                             [...]
-</text><text class="terminal-1143647577-r4" x="0" y="410.4" textLength="12.2" clip-path="url(#terminal-1143647577-line-16)">│</text><text class="terminal-1143647577-r7" x="366" y="410.4" textLength="1073.6" clip-path="url(#terminal-1143647577-line-16)">check-integrations-are-consistent | check-merge-conflict | check-newsfragments-are-valid</text><text class="terminal-1143647577-r4" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#terminal-1143647577-line-16)">│< [...]
-</text><text class="terminal-1143647577-r4" x="0" y="434.8" textLength="12.2" clip-path="url(#terminal-1143647577-line-17)">│</text><text class="terminal-1143647577-r7" x="366" y="434.8" textLength="1073.6" clip-path="url(#terminal-1143647577-line-17)">| check-no-providers-in-core-examples | check-no-relative-imports |                     </text><text class="termin [...]
-</text><text class="terminal-1143647577-r4" x="0" y="459.2" textLength="12.2" clip-path="url(#terminal-1143647577-line-18)">│</text><text class="terminal-1143647577-r7" x="366" y="459.2" textLength="1073.6" clip-path="url(#terminal-1143647577-line-18)">check-persist-credentials-disabled-in-github-workflows |                              [...]
-</text><text class="terminal-1143647577-r4" x="0" y="483.6" textLength="12.2" clip-path="url(#terminal-1143647577-line-19)">│</text><text class="terminal-1143647577-r7" x="366" y="483.6" textLength="1073.6" clip-path="url(#terminal-1143647577-line-19)">check-pre-commit-information-consistent | check-provide-create-sessions-imports |       </text><text class="terminal-1143647577-r4" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#te [...]
-</text><text class="terminal-1143647577-r4" x="0" y="508" textLength="12.2" clip-path="url(#terminal-1143647577-line-20)">│</text><text class="terminal-1143647577-r7" x="366" y="508" textLength="1073.6" clip-path="url(#terminal-1143647577-line-20)">check-provider-yaml-valid | check-providers-init-file-missing |                         </text><text cl [...]
-</text><text class="terminal-1143647577-r4" x="0" y="532.4" textLength="12.2" clip-path="url(#terminal-1143647577-line-21)">│</text><text class="terminal-1143647577-r7" x="366" y="532.4" textLength="1073.6" clip-path="url(#terminal-1143647577-line-21)">check-providers-subpackages-init-file-exist | check-pydevd-left-in-code |               </text><text class="terminal-1143647577-r4" x="1451.8" y="532 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="556.8" textLength="12.2" clip-path="url(#terminal-1143647577-line-22)">│</text><text class="terminal-1143647577-r7" x="366" y="556.8" textLength="1073.6" clip-path="url(#terminal-1143647577-line-22)">check-revision-heads-map | check-safe-filter-usage-in-html | check-setup-order |        </text><text class="terminal-1143647577-r4" x="1451.8" y="556.8" textLength="12.2" cli [...]
-</text><text class="terminal-1143647577-r4" x="0" y="581.2" textLength="12.2" clip-path="url(#terminal-1143647577-line-23)">│</text><text class="terminal-1143647577-r7" x="366" y="581.2" textLength="1073.6" clip-path="url(#terminal-1143647577-line-23)">check-start-date-not-used-in-defaults | check-system-tests-present |                    </text><text class="terminal-1143647 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="605.6" textLength="12.2" clip-path="url(#terminal-1143647577-line-24)">│</text><text class="terminal-1143647577-r7" x="366" y="605.6" textLength="1073.6" clip-path="url(#terminal-1143647577-line-24)">check-system-tests-tocs | check-xml | codespell | create-missing-init-py-files-tests |  </text><text class="terminal-1143647577-r4" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#termina [...]
-</text><text class="terminal-1143647577-r4" x="0" y="630" textLength="12.2" clip-path="url(#terminal-1143647577-line-25)">│</text><text class="terminal-1143647577-r7" x="366" y="630" textLength="1073.6" clip-path="url(#terminal-1143647577-line-25)">debug-statements | detect-private-key | doctoc | end-of-file-fixer | fix-encoding-pragma</text><text class="terminal-1143647577-r4" x="1451.8" y="630" textLength="12.2" clip-path="url(#terminal-114364757 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="654.4" textLength="12.2" clip-path="url(#terminal-1143647577-line-26)">│</text><text class="terminal-1143647577-r7" x="366" y="654.4" textLength="1073.6" clip-path="url(#terminal-1143647577-line-26)">| flynt | forbid-tabs | identity | insert-license | isort | lint-chart-schema | lint-css</text><text class="terminal-1143647577-r4" x="1451.8" y="654.4" textLength="12.2" cli [...]
-</text><text class="terminal-1143647577-r4" x="0" y="678.8" textLength="12.2" clip-path="url(#terminal-1143647577-line-27)">│</text><text class="terminal-1143647577-r7" x="366" y="678.8" textLength="1073.6" clip-path="url(#terminal-1143647577-line-27)">| lint-dockerfile | lint-helm-chart | lint-javascript | lint-json-schema | lint-markdown</text><text class="terminal-1143647577-r4" x="1451.8" y="678.8" textLength="12.2" clip-path="url(#termina [...]
-</text><text class="terminal-1143647577-r4" x="0" y="703.2" textLength="12.2" clip-path="url(#terminal-1143647577-line-28)">│</text><text class="terminal-1143647577-r7" x="366" y="703.2" textLength="1073.6" clip-path="url(#terminal-1143647577-line-28)">| lint-openapi | mixed-line-ending | pretty-format-json | pydocstyle |                  </text><text class="t [...]
-</text><text class="terminal-1143647577-r4" x="0" y="727.6" textLength="12.2" clip-path="url(#terminal-1143647577-line-29)">│</text><text class="terminal-1143647577-r7" x="366" y="727.6" textLength="1073.6" clip-path="url(#terminal-1143647577-line-29)">python-no-log-warn | pyupgrade | rst-backticks | run-flake8 | run-mypy | run-shellcheck </text><text class="terminal-1143647577-r4" x="1451.8" y="727.6" textLength="12.2" clip-path="ur [...]
-</text><text class="terminal-1143647577-r4" x="0" y="752" textLength="12.2" clip-path="url(#terminal-1143647577-line-30)">│</text><text class="terminal-1143647577-r7" x="366" y="752" textLength="1073.6" clip-path="url(#terminal-1143647577-line-30)">| static-check-autoflake | trailing-whitespace | update-breeze-cmd-output |             </text><text class="terminal-1143647577-r4" x="1451.8" y="75 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="776.4" textLength="12.2" clip-path="url(#terminal-1143647577-line-31)">│</text><text class="terminal-1143647577-r7" x="366" y="776.4" textLength="1073.6" clip-path="url(#terminal-1143647577-line-31)">update-breeze-readme-config-hash | update-extras | update-in-the-wild-to-be-sorted |    </text><text class="terminal-1143647577-r4" x="1451.8" y="776.4" textLength="12.2" clip-path="url(#termina [...]
-</text><text class="terminal-1143647577-r4" x="0" y="800.8" textLength="12.2" clip-path="url(#terminal-1143647577-line-32)">│</text><text class="terminal-1143647577-r7" x="366" y="800.8" textLength="1073.6" clip-path="url(#terminal-1143647577-line-32)">update-inlined-dockerfile-scripts | update-local-yml-file | update-migration-references </text><text class="terminal-1143647577-r4" x="1451.8" y="800.8" textLength="12.2" clip-path="url(#terminal-1143647577-line-32 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="825.2" textLength="12.2" clip-path="url(#terminal-1143647577-line-33)">│</text><text class="terminal-1143647577-r7" x="366" y="825.2" textLength="1073.6" clip-path="url(#terminal-1143647577-line-33)">| update-providers-dependencies | update-setup-cfg-file |                            [...]
-</text><text class="terminal-1143647577-r4" x="0" y="849.6" textLength="12.2" clip-path="url(#terminal-1143647577-line-34)">│</text><text class="terminal-1143647577-r7" x="366" y="849.6" textLength="1073.6" clip-path="url(#terminal-1143647577-line-34)">update-spelling-wordlist-to-be-sorted | update-supported-versions |                     </text><text class="terminal-11 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="874" textLength="12.2" clip-path="url(#terminal-1143647577-line-35)">│</text><text class="terminal-1143647577-r7" x="366" y="874" textLength="1073.6" clip-path="url(#terminal-1143647577-line-35)">update-vendored-in-k8s-json-schema | update-version | yamllint | yesqa)                 </text><text class="terminal-1143647577- [...]
-</text><text class="terminal-1143647577-r4" x="0" y="898.4" textLength="12.2" clip-path="url(#terminal-1143647577-line-36)">│</text><text class="terminal-1143647577-r5" x="24.4" y="898.4" textLength="12.2" clip-path="url(#terminal-1143647577-line-36)">-</text><text class="terminal-1143647577-r5" x="36.6" y="898.4" textLength="61" clip-path="url(#terminal-1143647577-line-36)">-file</text><text class="terminal-1143647577-r6" x="317.2" y="898.4" textLength="24.4" clip-path="url(#terminal-11 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="922.8" textLength="12.2" clip-path="url(#terminal-1143647577-line-37)">│</text><text class="terminal-1143647577-r5" x="24.4" y="922.8" textLength="12.2" clip-path="url(#terminal-1143647577-line-37)">-</text><text class="terminal-1143647577-r5" x="36.6" y="922.8" textLength="48.8" clip-path="url(#terminal-1143647577-line-37)">-all</text><text class="terminal-1143647577-r5" x="85.4" y="922.8" textLength="73.2" clip-path="url(#terminal-11 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="947.2" textLength="12.2" clip-path="url(#terminal-1143647577-line-38)">│</text><text class="terminal-1143647577-r5" x="24.4" y="947.2" textLength="12.2" clip-path="url(#terminal-1143647577-line-38)">-</text><text class="terminal-1143647577-r5" x="36.6" y="947.2" textLength="61" clip-path="url(#terminal-1143647577-line-38)">-show</text><text class="terminal-1143647577-r5" x="97.6" y="947.2" textLength="195.2" clip-path="url(#terminal-11 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="971.6" textLength="12.2" clip-path="url(#terminal-1143647577-line-39)">│</text><text class="terminal-1143647577-r5" x="24.4" y="971.6" textLength="12.2" clip-path="url(#terminal-1143647577-line-39)">-</text><text class="terminal-1143647577-r5" x="36.6" y="971.6" textLength="61" clip-path="url(#terminal-1143647577-line-39)">-last</text><text class="terminal-1143647577-r5" x="97.6" y="971.6" textLength="85.4" clip-path="url(#terminal-114 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="996" textLength="1464" clip-path="url(#terminal-1143647577-line-40)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-1143647577-r2" x="1464" y="996" textLength="12.2" clip-path="url(#terminal-1143647577-line-40)">
-</text><text class="terminal-1143647577-r4" x="0" y="1020.4" textLength="24.4" clip-path="url(#terminal-1143647577-line-41)">╭─</text><text class="terminal-1143647577-r4" x="24.4" y="1020.4" textLength="1415.2" clip-path="url(#terminal-1143647577-line-41)"> Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-1143647577-r4" x="1439.6" y="1020.4" textLength="24.4" clip-path="url(#terminal- [...]
-</text><text class="terminal-1143647577-r4" x="0" y="1044.8" textLength="12.2" clip-path="url(#terminal-1143647577-line-42)">│</text><text class="terminal-1143647577-r5" x="24.4" y="1044.8" textLength="12.2" clip-path="url(#terminal-1143647577-line-42)">-</text><text class="terminal-1143647577-r5" x="36.6" y="1044.8" textLength="85.4" clip-path="url(#terminal-1143647577-line-42)">-commit</text><text class="terminal-1143647577-r5" x="122" y="1044.8" textLength="48.8" clip-path="url(#termi [...]
-</text><text class="terminal-1143647577-r4" x="0" y="1069.2" textLength="12.2" clip-path="url(#terminal-1143647577-line-43)">│</text><text class="terminal-1143647577-r2" x="329.4" y="1069.2" textLength="183" clip-path="url(#terminal-1143647577-line-43)">exclusive with </text><text class="terminal-1143647577-r5" x="512.4" y="1069.2" textLength="12.2" clip-path="url(#terminal-1143647577-line-43)">-</text><text class="terminal-1143647577-r5" x="524.6" y="1069.2" textLength="61" cl [...]
-</text><text class="terminal-1143647577-r4" x="0" y="1093.6" textLength="12.2" clip-path="url(#terminal-1143647577-line-44)">│</text><text class="terminal-1143647577-r7" x="329.4" y="1093.6" textLength="1110.2" clip-path="url(#terminal-1143647577-line-44)">(TEXT)                                      & [...]
-</text><text class="terminal-1143647577-r4" x="0" y="1118" textLength="12.2" clip-path="url(#terminal-1143647577-line-45)">│</text><text class="terminal-1143647577-r5" x="24.4" y="1118" textLength="12.2" clip-path="url(#terminal-1143647577-line-45)">-</text><text class="terminal-1143647577-r5" x="36.6" y="1118" textLength="97.6" clip-path="url(#terminal-1143647577-line-45)">-verbose</text><text class="terminal-1143647577-r6" x="280.6" y="1118" textLength="24.4" clip-path="url(#terminal-1 [...]
-</text><text class="terminal-1143647577-r4" x="0" y="1142.4" textLength="12.2" clip-path="url(#terminal-1143647577-line-46)">│</text><text class="terminal-1143647577-r5" x="24.4" y="1142.4" textLength="12.2" clip-path="url(#terminal-1143647577-line-46)">-</text><text class="terminal-1143647577-r5" x="36.6" y="1142.4" textLength="48.8" clip-path="url(#terminal-1143647577-line-46)">-dry</text><text class="terminal-1143647577-r5" x="85.4" y="1142.4" textLength="48.8" clip-path="url(#termina [...]
-</text><text class="terminal-1143647577-r4" x="0" y="1166.8" textLength="12.2" clip-path="url(#terminal-1143647577-line-47)">│</text><text class="terminal-1143647577-r5" x="24.4" y="1166.8" textLength="12.2" clip-path="url(#terminal-1143647577-line-47)">-</text><text class="terminal-1143647577-r5" x="36.6" y="1166.8" textLength="85.4" clip-path="url(#terminal-1143647577-line-47)">-github</text><text class="terminal-1143647577-r5" x="122" y="1166.8" textLength="134.2" clip-path="url(#term [...]
-</text><text class="terminal-1143647577-r4" x="0" y="1191.2" textLength="12.2" clip-path="url(#terminal-1143647577-line-48)">│</text><text class="terminal-1143647577-r5" x="24.4" y="1191.2" textLength="12.2" clip-path="url(#terminal-1143647577-line-48)">-</text><text class="terminal-1143647577-r5" x="36.6" y="1191.2" textLength="61" clip-path="url(#terminal-1143647577-line-48)">-help</text><text class="terminal-1143647577-r6" x="280.6" y="1191.2" textLength="24.4" clip-path="url(#termina [...]
-</text><text class="terminal-1143647577-r4" x="0" y="1215.6" textLength="1464" clip-path="url(#terminal-1143647577-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-1143647577-r2" x="1464" y="1215.6" textLength="12.2" clip-path="url(#terminal-1143647577-line-49)">
+ <g class="terminal-751396731-matrix">
+ <text class="terminal-751396731-r2" x="1464" y="20" textLength="12.2" clip-path="url(#terminal-751396731-line-0)">
+</text><text class="terminal-751396731-r3" x="12.2" y="44.4" textLength="85.4" clip-path="url(#terminal-751396731-line-1)">Usage: </text><text class="terminal-751396731-r1" x="97.6" y="44.4" textLength="610" clip-path="url(#terminal-751396731-line-1)">breeze static-checks [OPTIONS] [PRECOMMIT_ARGS]...</text><text class="terminal-751396731-r2" x="1464" y="44.4" textLength="12.2" clip-path="url(#terminal-751396731-line-1)">
+</text><text class="terminal-751396731-r2" x="1464" y="68.8" textLength="12.2" clip-path="url(#terminal-751396731-line-2)">
+</text><text class="terminal-751396731-r2" x="12.2" y="93.2" textLength="219.6" clip-path="url(#terminal-751396731-line-3)">Run static checks.</text><text class="terminal-751396731-r2" x="1464" y="93.2" textLength="12.2" clip-path="url(#terminal-751396731-line-3)">
+</text><text class="terminal-751396731-r2" x="1464" y="117.6" textLength="12.2" clip-path="url(#terminal-751396731-line-4)">
+</text><text class="terminal-751396731-r4" x="0" y="142" textLength="24.4" clip-path="url(#terminal-751396731-line-5)">╭─</text><text class="terminal-751396731-r4" x="24.4" y="142" textLength="1415.2" clip-path="url(#terminal-751396731-line-5)"> Pre-commit flags ──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-751396731-r4" x="1439.6" y="142" textLength="24.4" clip-path="url(#terminal-751396731-l [...]
+</text><text class="terminal-751396731-r4" x="0" y="166.4" textLength="12.2" clip-path="url(#terminal-751396731-line-6)">│</text><text class="terminal-751396731-r5" x="24.4" y="166.4" textLength="12.2" clip-path="url(#terminal-751396731-line-6)">-</text><text class="terminal-751396731-r5" x="36.6" y="166.4" textLength="61" clip-path="url(#terminal-751396731-line-6)">-type</text><text class="terminal-751396731-r6" x="317.2" y="166.4" textLength="24.4" clip-path="url(#terminal-751396731-li [...]
+</text><text class="terminal-751396731-r4" x="0" y="190.8" textLength="12.2" clip-path="url(#terminal-751396731-line-7)">│</text><text class="terminal-751396731-r7" x="366" y="190.8" textLength="1073.6" clip-path="url(#terminal-751396731-line-7)">(all | black | blacken-docs | check-airflow-2-2-compatibility |                         [...]
+</text><text class="terminal-751396731-r4" x="0" y="215.2" textLength="12.2" clip-path="url(#terminal-751396731-line-8)">│</text><text class="terminal-751396731-r7" x="366" y="215.2" textLength="1073.6" clip-path="url(#terminal-751396731-line-8)">check-airflow-config-yaml-consistent | check-airflow-providers-have-extras |            </text><text class="terminal-751396731-r4" x="1451.8" y="215.2" textLength="12.2" [...]
+</text><text class="terminal-751396731-r4" x="0" y="239.6" textLength="12.2" clip-path="url(#terminal-751396731-line-9)">│</text><text class="terminal-751396731-r7" x="366" y="239.6" textLength="1073.6" clip-path="url(#terminal-751396731-line-9)">check-apache-license-rat | check-base-operator-usage | check-boring-cyborg-configuration</text><text class="terminal-751396731-r4" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#terminal-751396731-line-9)">│</text><te [...]
+</text><text class="terminal-751396731-r4" x="0" y="264" textLength="12.2" clip-path="url(#terminal-751396731-line-10)">│</text><text class="terminal-751396731-r7" x="366" y="264" textLength="1073.6" clip-path="url(#terminal-751396731-line-10)">| check-breeze-top-dependencies-limited | check-builtin-literals |                      </text><text class="terminal- [...]
+</text><text class="terminal-751396731-r4" x="0" y="288.4" textLength="12.2" clip-path="url(#terminal-751396731-line-11)">│</text><text class="terminal-751396731-r7" x="366" y="288.4" textLength="1073.6" clip-path="url(#terminal-751396731-line-11)">check-changelog-has-no-duplicates | check-daysago-import-from-utils |                   </text><text class="terminal-751396731-r4" x= [...]
+</text><text class="terminal-751396731-r4" x="0" y="312.8" textLength="12.2" clip-path="url(#terminal-751396731-line-12)">│</text><text class="terminal-751396731-r7" x="366" y="312.8" textLength="1073.6" clip-path="url(#terminal-751396731-line-12)">check-docstring-param-types | check-executables-have-shebangs |                         </text><text cl [...]
+</text><text class="terminal-751396731-r4" x="0" y="337.2" textLength="12.2" clip-path="url(#terminal-751396731-line-13)">│</text><text class="terminal-751396731-r7" x="366" y="337.2" textLength="1073.6" clip-path="url(#terminal-751396731-line-13)">check-extra-packages-references | check-extras-order | check-for-inclusive-language |   </text><text class="terminal-751396731-r4" x="1451.8" y="337.2" textLength="12.2" clip-path="url(#terminal-75139673 [...]
+</text><text class="terminal-751396731-r4" x="0" y="361.6" textLength="12.2" clip-path="url(#terminal-751396731-line-14)">│</text><text class="terminal-751396731-r7" x="366" y="361.6" textLength="1073.6" clip-path="url(#terminal-751396731-line-14)">check-hooks-apply | check-incorrect-use-of-LoggingMixin |                             [...]
+</text><text class="terminal-751396731-r4" x="0" y="386" textLength="12.2" clip-path="url(#terminal-751396731-line-15)">│</text><text class="terminal-751396731-r7" x="366" y="386" textLength="1073.6" clip-path="url(#terminal-751396731-line-15)">check-integrations-are-consistent | check-merge-conflict | check-newsfragments-are-valid</text><text class="terminal-751396731-r4" x="1451.8" y="386" textLength="12.2" clip-path="url(#terminal-751396731-line-15)">│</text><text [...]
+</text><text class="terminal-751396731-r4" x="0" y="410.4" textLength="12.2" clip-path="url(#terminal-751396731-line-16)">│</text><text class="terminal-751396731-r7" x="366" y="410.4" textLength="1073.6" clip-path="url(#terminal-751396731-line-16)">| check-no-providers-in-core-examples | check-no-relative-imports |                     </text><text class="terminal-7 [...]
+</text><text class="terminal-751396731-r4" x="0" y="434.8" textLength="12.2" clip-path="url(#terminal-751396731-line-17)">│</text><text class="terminal-751396731-r7" x="366" y="434.8" textLength="1073.6" clip-path="url(#terminal-751396731-line-17)">check-persist-credentials-disabled-in-github-workflows |                              &# [...]
+</text><text class="terminal-751396731-r4" x="0" y="459.2" textLength="12.2" clip-path="url(#terminal-751396731-line-18)">│</text><text class="terminal-751396731-r7" x="366" y="459.2" textLength="1073.6" clip-path="url(#terminal-751396731-line-18)">check-pre-commit-information-consistent | check-provide-create-sessions-imports |       </text><text class="terminal-751396731-r4" x="1451.8" y="459.2" textLength="12.2" clip-path="url(#termina [...]
+</text><text class="terminal-751396731-r4" x="0" y="483.6" textLength="12.2" clip-path="url(#terminal-751396731-line-19)">│</text><text class="terminal-751396731-r7" x="366" y="483.6" textLength="1073.6" clip-path="url(#terminal-751396731-line-19)">check-provider-yaml-valid | check-providers-init-file-missing |                         </text><text cl [...]
+</text><text class="terminal-751396731-r4" x="0" y="508" textLength="12.2" clip-path="url(#terminal-751396731-line-20)">│</text><text class="terminal-751396731-r7" x="366" y="508" textLength="1073.6" clip-path="url(#terminal-751396731-line-20)">check-providers-subpackages-init-file-exist | check-pydevd-left-in-code |               </text><text class="terminal-751396731-r4" x="1451.8" y="508" textLen [...]
+</text><text class="terminal-751396731-r4" x="0" y="532.4" textLength="12.2" clip-path="url(#terminal-751396731-line-21)">│</text><text class="terminal-751396731-r7" x="366" y="532.4" textLength="1073.6" clip-path="url(#terminal-751396731-line-21)">check-revision-heads-map | check-safe-filter-usage-in-html | check-setup-order |        </text><text class="terminal-751396731-r4" x="1451.8" y="532.4" textLength="12.2" clip-pat [...]
+</text><text class="terminal-751396731-r4" x="0" y="556.8" textLength="12.2" clip-path="url(#terminal-751396731-line-22)">│</text><text class="terminal-751396731-r7" x="366" y="556.8" textLength="1073.6" clip-path="url(#terminal-751396731-line-22)">check-start-date-not-used-in-defaults | check-system-tests-present | check-xml |        </text><text class="terminal-751396731-r4" x="1451.8" y="556.8" textLength="12.2" clip-pat [...]
+</text><text class="terminal-751396731-r4" x="0" y="581.2" textLength="12.2" clip-path="url(#terminal-751396731-line-23)">│</text><text class="terminal-751396731-r7" x="366" y="581.2" textLength="1073.6" clip-path="url(#terminal-751396731-line-23)">codespell | debug-statements | detect-private-key | doctoc | end-of-file-fixer |        </text><text class="terminal-751396731-r4" x="1451.8" y="581.2" textLe [...]
+</text><text class="terminal-751396731-r4" x="0" y="605.6" textLength="12.2" clip-path="url(#terminal-751396731-line-24)">│</text><text class="terminal-751396731-r7" x="366" y="605.6" textLength="1073.6" clip-path="url(#terminal-751396731-line-24)">fix-encoding-pragma | flynt | forbid-tabs | identity | insert-license | isort |         </text><text class="terminal-751396731-r4" x="1451.8" y [...]
+</text><text class="terminal-751396731-r4" x="0" y="630" textLength="12.2" clip-path="url(#terminal-751396731-line-25)">│</text><text class="terminal-751396731-r7" x="366" y="630" textLength="1073.6" clip-path="url(#terminal-751396731-line-25)">lint-chart-schema | lint-css | lint-dockerfile | lint-helm-chart | lint-javascript |    </text><text class="terminal-751396731-r4" x="1451.8" y="630" textLength="12.2" clip-path="url [...]
+</text><text class="terminal-751396731-r4" x="0" y="654.4" textLength="12.2" clip-path="url(#terminal-751396731-line-26)">│</text><text class="terminal-751396731-r7" x="366" y="654.4" textLength="1073.6" clip-path="url(#terminal-751396731-line-26)">lint-json-schema | lint-markdown | lint-openapi | mixed-line-ending | pretty-format-json</text><text class="terminal-751396731-r4" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#terminal-75139673 [...]
+</text><text class="terminal-751396731-r4" x="0" y="678.8" textLength="12.2" clip-path="url(#terminal-751396731-line-27)">│</text><text class="terminal-751396731-r7" x="366" y="678.8" textLength="1073.6" clip-path="url(#terminal-751396731-line-27)">| pydocstyle | python-no-log-warn | pyupgrade | rst-backticks | run-flake8 | run-mypy | </text><text class="terminal-751396731-r4" x="1451.8" y="678.8" textLength="12.2" clip-pat [...]
+</text><text class="terminal-751396731-r4" x="0" y="703.2" textLength="12.2" clip-path="url(#terminal-751396731-line-28)">│</text><text class="terminal-751396731-r7" x="366" y="703.2" textLength="1073.6" clip-path="url(#terminal-751396731-line-28)">run-shellcheck | static-check-autoflake | trailing-whitespace | update-breeze-cmd-output</text><text class="terminal-751396731-r4" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#terminal-751396731-line-28) [...]
+</text><text class="terminal-751396731-r4" x="0" y="727.6" textLength="12.2" clip-path="url(#terminal-751396731-line-29)">│</text><text class="terminal-751396731-r7" x="366" y="727.6" textLength="1073.6" clip-path="url(#terminal-751396731-line-29)">| update-breeze-readme-config-hash | update-extras | update-in-the-wild-to-be-sorted |  </text><text class="terminal-751396731-r4" x="1451.8" y="727.6" textLength="12.2" clip-path="url(#terminal-75139673 [...]
+</text><text class="terminal-751396731-r4" x="0" y="752" textLength="12.2" clip-path="url(#terminal-751396731-line-30)">│</text><text class="terminal-751396731-r7" x="366" y="752" textLength="1073.6" clip-path="url(#terminal-751396731-line-30)">update-inlined-dockerfile-scripts | update-local-yml-file | update-migration-references </text><text class="terminal-751396731-r4" x="1451.8" y="752" textLength="12.2" clip-path="url(#terminal-751396731-line-30)">│</text>< [...]
+</text><text class="terminal-751396731-r4" x="0" y="776.4" textLength="12.2" clip-path="url(#terminal-751396731-line-31)">│</text><text class="terminal-751396731-r7" x="366" y="776.4" textLength="1073.6" clip-path="url(#terminal-751396731-line-31)">| update-providers-dependencies | update-setup-cfg-file |                            [...]
+</text><text class="terminal-751396731-r4" x="0" y="800.8" textLength="12.2" clip-path="url(#terminal-751396731-line-32)">│</text><text class="terminal-751396731-r7" x="366" y="800.8" textLength="1073.6" clip-path="url(#terminal-751396731-line-32)">update-spelling-wordlist-to-be-sorted | update-supported-versions |                     </text><text class="terminal-751396 [...]
+</text><text class="terminal-751396731-r4" x="0" y="825.2" textLength="12.2" clip-path="url(#terminal-751396731-line-33)">│</text><text class="terminal-751396731-r7" x="366" y="825.2" textLength="1073.6" clip-path="url(#terminal-751396731-line-33)">update-vendored-in-k8s-json-schema | update-version | yamllint | yesqa)                 </text><text class="terminal-751396731-r [...]
+</text><text class="terminal-751396731-r4" x="0" y="849.6" textLength="12.2" clip-path="url(#terminal-751396731-line-34)">│</text><text class="terminal-751396731-r5" x="24.4" y="849.6" textLength="12.2" clip-path="url(#terminal-751396731-line-34)">-</text><text class="terminal-751396731-r5" x="36.6" y="849.6" textLength="61" clip-path="url(#terminal-751396731-line-34)">-file</text><text class="terminal-751396731-r6" x="317.2" y="849.6" textLength="24.4" clip-path="url(#terminal-751396731 [...]
+</text><text class="terminal-751396731-r4" x="0" y="874" textLength="12.2" clip-path="url(#terminal-751396731-line-35)">│</text><text class="terminal-751396731-r5" x="24.4" y="874" textLength="12.2" clip-path="url(#terminal-751396731-line-35)">-</text><text class="terminal-751396731-r5" x="36.6" y="874" textLength="48.8" clip-path="url(#terminal-751396731-line-35)">-all</text><text class="terminal-751396731-r5" x="85.4" y="874" textLength="73.2" clip-path="url(#terminal-751396731-line-35 [...]
+</text><text class="terminal-751396731-r4" x="0" y="898.4" textLength="12.2" clip-path="url(#terminal-751396731-line-36)">│</text><text class="terminal-751396731-r5" x="24.4" y="898.4" textLength="12.2" clip-path="url(#terminal-751396731-line-36)">-</text><text class="terminal-751396731-r5" x="36.6" y="898.4" textLength="61" clip-path="url(#terminal-751396731-line-36)">-show</text><text class="terminal-751396731-r5" x="97.6" y="898.4" textLength="195.2" clip-path="url(#terminal-751396731 [...]
+</text><text class="terminal-751396731-r4" x="0" y="922.8" textLength="12.2" clip-path="url(#terminal-751396731-line-37)">│</text><text class="terminal-751396731-r5" x="24.4" y="922.8" textLength="12.2" clip-path="url(#terminal-751396731-line-37)">-</text><text class="terminal-751396731-r5" x="36.6" y="922.8" textLength="61" clip-path="url(#terminal-751396731-line-37)">-last</text><text class="terminal-751396731-r5" x="97.6" y="922.8" textLength="85.4" clip-path="url(#terminal-751396731- [...]
+</text><text class="terminal-751396731-r4" x="0" y="947.2" textLength="1464" clip-path="url(#terminal-751396731-line-38)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-751396731-r2" x="1464" y="947.2" textLength="12.2" clip-path="url(#terminal-751396731-line-38)">
+</text><text class="terminal-751396731-r4" x="0" y="971.6" textLength="24.4" clip-path="url(#terminal-751396731-line-39)">╭─</text><text class="terminal-751396731-r4" x="24.4" y="971.6" textLength="1415.2" clip-path="url(#terminal-751396731-line-39)"> Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="terminal-751396731-r4" x="1439.6" y="971.6" textLength="24.4" clip-path="url(#terminal-75139673 [...]
+</text><text class="terminal-751396731-r4" x="0" y="996" textLength="12.2" clip-path="url(#terminal-751396731-line-40)">│</text><text class="terminal-751396731-r5" x="24.4" y="996" textLength="12.2" clip-path="url(#terminal-751396731-line-40)">-</text><text class="terminal-751396731-r5" x="36.6" y="996" textLength="85.4" clip-path="url(#terminal-751396731-line-40)">-commit</text><text class="terminal-751396731-r5" x="122" y="996" textLength="48.8" clip-path="url(#terminal-751396731-line- [...]
+</text><text class="terminal-751396731-r4" x="0" y="1020.4" textLength="12.2" clip-path="url(#terminal-751396731-line-41)">│</text><text class="terminal-751396731-r2" x="329.4" y="1020.4" textLength="183" clip-path="url(#terminal-751396731-line-41)">exclusive with </text><text class="terminal-751396731-r5" x="512.4" y="1020.4" textLength="12.2" clip-path="url(#terminal-751396731-line-41)">-</text><text class="terminal-751396731-r5" x="524.6" y="1020.4" textLength="61" clip-path [...]
+</text><text class="terminal-751396731-r4" x="0" y="1044.8" textLength="12.2" clip-path="url(#terminal-751396731-line-42)">│</text><text class="terminal-751396731-r7" x="329.4" y="1044.8" textLength="1110.2" clip-path="url(#terminal-751396731-line-42)">(TEXT)                                        [...]
+</text><text class="terminal-751396731-r4" x="0" y="1069.2" textLength="12.2" clip-path="url(#terminal-751396731-line-43)">│</text><text class="terminal-751396731-r5" x="24.4" y="1069.2" textLength="12.2" clip-path="url(#terminal-751396731-line-43)">-</text><text class="terminal-751396731-r5" x="36.6" y="1069.2" textLength="97.6" clip-path="url(#terminal-751396731-line-43)">-verbose</text><text class="terminal-751396731-r6" x="280.6" y="1069.2" textLength="24.4" clip-path="url(#terminal- [...]
+</text><text class="terminal-751396731-r4" x="0" y="1093.6" textLength="12.2" clip-path="url(#terminal-751396731-line-44)">│</text><text class="terminal-751396731-r5" x="24.4" y="1093.6" textLength="12.2" clip-path="url(#terminal-751396731-line-44)">-</text><text class="terminal-751396731-r5" x="36.6" y="1093.6" textLength="48.8" clip-path="url(#terminal-751396731-line-44)">-dry</text><text class="terminal-751396731-r5" x="85.4" y="1093.6" textLength="48.8" clip-path="url(#terminal-75139 [...]
+</text><text class="terminal-751396731-r4" x="0" y="1118" textLength="12.2" clip-path="url(#terminal-751396731-line-45)">│</text><text class="terminal-751396731-r5" x="24.4" y="1118" textLength="12.2" clip-path="url(#terminal-751396731-line-45)">-</text><text class="terminal-751396731-r5" x="36.6" y="1118" textLength="85.4" clip-path="url(#terminal-751396731-line-45)">-github</text><text class="terminal-751396731-r5" x="122" y="1118" textLength="134.2" clip-path="url(#terminal-751396731- [...]
+</text><text class="terminal-751396731-r4" x="0" y="1142.4" textLength="12.2" clip-path="url(#terminal-751396731-line-46)">│</text><text class="terminal-751396731-r5" x="24.4" y="1142.4" textLength="12.2" clip-path="url(#terminal-751396731-line-46)">-</text><text class="terminal-751396731-r5" x="36.6" y="1142.4" textLength="61" clip-path="url(#terminal-751396731-line-46)">-help</text><text class="terminal-751396731-r6" x="280.6" y="1142.4" textLength="24.4" clip-path="url(#terminal-75139 [...]
+</text><text class="terminal-751396731-r4" x="0" y="1166.8" textLength="1464" clip-path="url(#terminal-751396731-line-47)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-751396731-r2" x="1464" y="1166.8" textLength="12.2" clip-path="url(#terminal-751396731-line-47)">
</text>
</g>
</g>
diff --git a/scripts/ci/pre_commit/pre_commit_check_2_1_compatibility.py b/scripts/ci/pre_commit/pre_commit_check_2_2_compatibility.py
similarity index 100%
rename from scripts/ci/pre_commit/pre_commit_check_2_1_compatibility.py
rename to scripts/ci/pre_commit/pre_commit_check_2_2_compatibility.py
diff --git a/tests/always/test_project_structure.py b/tests/always/test_project_structure.py
index bd26944233..8db759fac7 100644
--- a/tests/always/test_project_structure.py
+++ b/tests/always/test_project_structure.py
@@ -22,8 +22,6 @@ import os
import unittest
from typing import List
-from parameterized import parameterized
-
ROOT_FOLDER = os.path.realpath(
os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir, os.pardir)
)
@@ -151,142 +149,6 @@ def get_classes_from_file(filepath: str):
return results
-class TestGoogleProviderProjectStructure(unittest.TestCase):
- MISSING_EXAMPLE_DAGS = {
- 'adls_to_gcs',
- 'sql_to_gcs',
- 'bigquery_to_mysql',
- 'cassandra_to_gcs',
- 'drive',
- 'ads_to_gcs',
- }
-
- # Those operators are deprecated and we do not need examples for them
- DEPRECATED_OPERATORS = {
- 'airflow.providers.google.cloud.operators.cloud_storage_transfer_service'
- '.CloudDataTransferServiceS3ToGCSOperator',
- 'airflow.providers.google.cloud.operators.cloud_storage_transfer_service'
- '.CloudDataTransferServiceGCSToGCSOperator',
- 'airflow.providers.google.cloud.operators.dataproc.DataprocSubmitHadoopJobOperator',
- 'airflow.providers.google.cloud.operators.dataproc.DataprocScaleClusterOperator',
- 'airflow.providers.google.cloud.operators.dataproc.DataprocSubmitSparkJobOperator',
- 'airflow.providers.google.cloud.operators.dataproc.DataprocSubmitSparkSqlJobOperator',
- 'airflow.providers.google.cloud.operators.dataproc.DataprocSubmitHiveJobOperator',
- 'airflow.providers.google.cloud.operators.dataproc.DataprocSubmitPigJobOperator',
- 'airflow.providers.google.cloud.operators.dataproc.DataprocSubmitPySparkJobOperator',
- 'airflow.providers.google.cloud.operators.mlengine.MLEngineManageModelOperator',
- 'airflow.providers.google.cloud.operators.mlengine.MLEngineManageVersionOperator',
- 'airflow.providers.google.cloud.operators.dataflow.DataflowCreateJavaJobOperator',
- 'airflow.providers.google.cloud.operators.bigquery.BigQueryPatchDatasetOperator',
- 'airflow.providers.google.cloud.operators.dataflow.DataflowCreatePythonJobOperator',
- 'airflow.providers.google.cloud.operators.bigquery.BigQueryExecuteQueryOperator',
- }
-
- # Those operators should not have examples as they are never used standalone (they are abstract)
- BASE_OPERATORS = {
- 'airflow.providers.google.cloud.operators.compute.ComputeEngineBaseOperator',
- 'airflow.providers.google.cloud.operators.cloud_sql.CloudSQLBaseOperator',
- 'airflow.providers.google.cloud.operators.dataproc.DataprocJobBaseOperator',
- }
-
- # Please at the examples to those operators at the earliest convenience :)
- MISSING_EXAMPLES_FOR_OPERATORS = {
- 'airflow.providers.google.cloud.operators.dataproc.DataprocInstantiateInlineWorkflowTemplateOperator',
- 'airflow.providers.google.cloud.operators.mlengine.MLEngineTrainingCancelJobOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPGetStoredInfoTypeOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPReidentifyContentOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPCreateDeidentifyTemplateOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPCreateDLPJobOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPUpdateDeidentifyTemplateOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPGetDLPJobTriggerOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPListDeidentifyTemplatesOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPGetDeidentifyTemplateOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPListInspectTemplatesOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPListStoredInfoTypesOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPUpdateInspectTemplateOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPDeleteDLPJobOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPListJobTriggersOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPCancelDLPJobOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPGetDLPJobOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPGetInspectTemplateOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPListInfoTypesOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPDeleteDeidentifyTemplateOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPListDLPJobsOperator',
- 'airflow.providers.google.cloud.operators.dlp.CloudDLPRedactImageOperator',
- 'airflow.providers.google.cloud.sensors.gcs.GCSObjectUpdateSensor',
- 'airflow.providers.google.cloud.sensors.gcs.GCSUploadSessionCompleteSensor',
- }
-
- def test_missing_example_for_operator(self):
- """
- Assert that all operators defined under operators, sensors and transfers directories
- are used in any of the example dags
- """
- all_operators = set()
- services = set()
- for resource_type in ["operators", "sensors", "transfers"]:
- operator_files = set(
- self.find_resource_files(top_level_directory="airflow", resource_type=resource_type)
- )
- for filepath in operator_files:
- service_name = os.path.basename(filepath)[: -(len(".py"))]
- if service_name in self.MISSING_EXAMPLE_DAGS:
- continue
- services.add(service_name)
- operators_paths = set(get_classes_from_file(f"{ROOT_FOLDER}/{filepath}"))
- all_operators.update(operators_paths)
-
- for service in services:
- example_dags = self.examples_for_service(service)
- example_paths = {
- path for example_dag in example_dags for path in get_imports_from_file(example_dag)
- }
- all_operators -= example_paths
-
- all_operators -= self.MISSING_EXAMPLES_FOR_OPERATORS
- all_operators -= self.DEPRECATED_OPERATORS
- all_operators -= self.BASE_OPERATORS
- assert set() == all_operators
-
- @parameterized.expand(
- itertools.product(["_system.py", "_system_helper.py"], ["operators", "sensors", "transfers"])
- )
- def test_detect_invalid_system_tests(self, resource_type, filename_suffix):
- operators_tests = self.find_resource_files(top_level_directory="tests", resource_type=resource_type)
- operators_files = self.find_resource_files(top_level_directory="airflow", resource_type=resource_type)
-
- files = {f for f in operators_tests if f.endswith(filename_suffix)}
-
- expected_files = (f"tests/{f[8:]}" for f in operators_files)
- expected_files = (f.replace(".py", filename_suffix).replace("/test_", "/") for f in expected_files)
- expected_files = {f'{f.rpartition("/")[0]}/test_{f.rpartition("/")[2]}' for f in expected_files}
-
- assert set() == files - expected_files
-
- @staticmethod
- def find_resource_files(
- top_level_directory: str = "airflow",
- department: str = "*",
- resource_type: str = "*",
- service: str = "*",
- ):
- python_files = glob.glob(
- f"{ROOT_FOLDER}/{top_level_directory}/providers/google/{department}/{resource_type}/{service}.py"
- )
- # Make path relative
- resource_files = (os.path.relpath(f, ROOT_FOLDER) for f in python_files)
- # Exclude __init__.py and pycache
- resource_files = (f for f in resource_files if not f.endswith("__init__.py"))
- return resource_files
-
- @staticmethod
- def examples_for_service(service_name):
- yield from glob.glob(
- f"{ROOT_FOLDER}/airflow/providers/google/*/example_dags/example_{service_name}*.py"
- )
- yield from glob.glob(f"{ROOT_FOLDER}/tests/system/providers/google/{service_name}/example_*.py")
-
-
class TestOperatorsHooks(unittest.TestCase):
def test_no_illegal_suffixes(self):
illegal_suffixes = ["_operator.py", "_hook.py", "_sensor.py"]
diff --git a/tests/always/test_project_structure.py b/tests/providers/google/test_project_structure.py
similarity index 57%
copy from tests/always/test_project_structure.py
copy to tests/providers/google/test_project_structure.py
index bd26944233..bd2fecade3 100644
--- a/tests/always/test_project_structure.py
+++ b/tests/providers/google/test_project_structure.py
@@ -14,141 +14,15 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-import ast
+
import glob
import itertools
-import mmap
import os
import unittest
-from typing import List
from parameterized import parameterized
-ROOT_FOLDER = os.path.realpath(
- os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir, os.pardir)
-)
-
-
-class TestProjectStructure(unittest.TestCase):
- def test_reference_to_providers_from_core(self):
- for filename in glob.glob(f"{ROOT_FOLDER}/example_dags/**/*.py", recursive=True):
- self.assert_file_not_contains(filename, "providers")
-
- def test_deprecated_packages(self):
- path_pattern = f"{ROOT_FOLDER}/airflow/contrib/**/*.py"
-
- for filename in glob.glob(path_pattern, recursive=True):
- if filename.endswith("/__init__.py"):
- self.assert_file_contains(filename, "This package is deprecated.")
- else:
- self.assert_file_contains(filename, "This module is deprecated.")
-
- def assert_file_not_contains(self, filename: str, pattern: str):
- with open(filename, 'rb', 0) as file, mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as content:
- if content.find(bytes(pattern, 'utf-8')) != -1:
- self.fail(f"File {filename} not contains pattern - {pattern}")
-
- def assert_file_contains(self, filename: str, pattern: str):
- with open(filename, 'rb', 0) as file, mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as content:
- if content.find(bytes(pattern, 'utf-8')) == -1:
- self.fail(f"File {filename} contains illegal pattern - {pattern}")
-
- def test_providers_modules_should_have_tests(self):
- """
- Assert every module in /airflow/providers has a corresponding test_ file in tests/airflow/providers.
- """
- # Deprecated modules that don't have corresponded test
- expected_missing_providers_modules = {
- (
- 'airflow/providers/amazon/aws/hooks/aws_dynamodb.py',
- 'tests/providers/amazon/aws/hooks/test_aws_dynamodb.py',
- )
- }
-
- # TODO: Should we extend this test to cover other directories?
- modules_files = glob.glob(f"{ROOT_FOLDER}/airflow/providers/**/*.py", recursive=True)
-
- # Make path relative
- modules_files = (os.path.relpath(f, ROOT_FOLDER) for f in modules_files)
- # Exclude example_dags
- modules_files = (f for f in modules_files if "/example_dags/" not in f)
- # Exclude __init__.py
- modules_files = (f for f in modules_files if not f.endswith("__init__.py"))
- # Change airflow/ to tests/
- expected_test_files = (
- f'tests/{f.partition("/")[2]}' for f in modules_files if not f.endswith("__init__.py")
- )
- # Add test_ prefix to filename
- expected_test_files = (
- f'{f.rpartition("/")[0]}/test_{f.rpartition("/")[2]}'
- for f in expected_test_files
- if not f.endswith("__init__.py")
- )
-
- current_test_files = glob.glob(f"{ROOT_FOLDER}/tests/providers/**/*.py", recursive=True)
- # Make path relative
- current_test_files = (os.path.relpath(f, ROOT_FOLDER) for f in current_test_files)
- # Exclude __init__.py
- current_test_files = (f for f in current_test_files if not f.endswith("__init__.py"))
-
- modules_files = set(modules_files)
- expected_test_files = set(expected_test_files)
- current_test_files = set(current_test_files)
-
- missing_tests_files = expected_test_files - expected_test_files.intersection(current_test_files)
-
- with self.subTest("Detect missing tests in providers module"):
- expected_missing_test_modules = {pair[1] for pair in expected_missing_providers_modules}
- missing_tests_files = missing_tests_files - set(expected_missing_test_modules)
- assert set() == missing_tests_files
-
- with self.subTest("Verify removed deprecated module also removed from deprecated list"):
- expected_missing_modules = {pair[0] for pair in expected_missing_providers_modules}
- removed_deprecated_module = expected_missing_modules - modules_files
- if removed_deprecated_module:
- self.fail(
- "You've removed a deprecated module:\n"
- f"{removed_deprecated_module}"
- "\n"
- "Thank you very much.\n"
- "Can you remove it from the list of expected missing modules tests, please?"
- )
-
-
-def get_imports_from_file(filepath: str):
- with open(filepath) as py_file:
- content = py_file.read()
- doc_node = ast.parse(content, filepath)
- import_names: List[str] = []
- for current_node in ast.walk(doc_node):
- if not isinstance(current_node, (ast.Import, ast.ImportFrom)):
- continue
- for alias in current_node.names:
- name = alias.name
- fullname = f'{current_node.module}.{name}' if isinstance(current_node, ast.ImportFrom) else name
- import_names.append(fullname)
- return import_names
-
-
-def filepath_to_module(filepath: str):
- filepath = os.path.relpath(os.path.abspath(filepath), ROOT_FOLDER)
- return filepath.replace("/", ".")[: -(len('.py'))]
-
-
-def get_classes_from_file(filepath: str):
- with open(filepath) as py_file:
- content = py_file.read()
- doc_node = ast.parse(content, filepath)
- module = filepath_to_module(filepath)
- results: List[str] = []
- for current_node in ast.walk(doc_node):
- if not isinstance(current_node, ast.ClassDef):
- continue
- name = current_node.name
- if not name.endswith("Operator") and not name.endswith("Sensor") and not name.endswith("Operator"):
- continue
- results.append(f"{module}.{name}")
- return results
+from tests.always.test_project_structure import ROOT_FOLDER, get_classes_from_file, get_imports_from_file
class TestGoogleProviderProjectStructure(unittest.TestCase):
@@ -285,19 +159,3 @@ class TestGoogleProviderProjectStructure(unittest.TestCase):
f"{ROOT_FOLDER}/airflow/providers/google/*/example_dags/example_{service_name}*.py"
)
yield from glob.glob(f"{ROOT_FOLDER}/tests/system/providers/google/{service_name}/example_*.py")
-
-
-class TestOperatorsHooks(unittest.TestCase):
- def test_no_illegal_suffixes(self):
- illegal_suffixes = ["_operator.py", "_hook.py", "_sensor.py"]
- files = itertools.chain(
- *(
- glob.glob(f"{ROOT_FOLDER}/{part}/providers/**/{resource_type}/*.py", recursive=True)
- for resource_type in ["operators", "hooks", "sensors", "example_dags"]
- for part in ["airflow", "tests"]
- )
- )
-
- invalid_files = [f for f in files if any(f.endswith(suffix) for suffix in illegal_suffixes)]
-
- assert [] == invalid_files
diff --git a/tests/system/providers/elasticsearch/__init__.py b/tests/system/providers/elasticsearch/__init__.py
deleted file mode 100644
index 13a83393a9..0000000000
--- a/tests/system/providers/elasticsearch/__init__.py
+++ /dev/null
@@ -1,16 +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.
diff --git a/tests/system/providers/elasticsearch/example_elasticsearch_query.py b/tests/system/providers/elasticsearch/example_elasticsearch_query.py
deleted file mode 100644
index 8edc348a08..0000000000
--- a/tests/system/providers/elasticsearch/example_elasticsearch_query.py
+++ /dev/null
@@ -1,66 +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.
-
-"""
-Example Airflow DAG for Elasticsearch Query.
-"""
-import os
-from datetime import datetime
-
-from airflow import models
-from airflow.decorators import task
-from airflow.providers.elasticsearch.hooks.elasticsearch import ElasticsearchHook
-
-ENV_ID = os.environ.get("SYSTEM_TESTS_ENV_ID")
-DAG_ID = 'elasticsearch_dag'
-CONN_ID = 'elasticsearch_default'
-
-
-@task(task_id='es_print_tables')
-def show_tables():
- """
- show_tables queries elasticsearch to list available tables
- """
- # [START howto_elasticsearch_query]
- es = ElasticsearchHook(elasticsearch_conn_id=CONN_ID)
-
- # Handle ES conn with context manager
- with es.get_conn() as es_conn:
- tables = es_conn.execute('SHOW TABLES')
- for table, *_ in tables:
- print(f"table: {table}")
- return True
- # [END howto_elasticsearch_query]
-
-
-with models.DAG(
- DAG_ID,
- schedule_interval="@once",
- start_date=datetime(2021, 1, 1),
- catchup=False,
- tags=["example", "elasticsearch"],
-) as dag:
- execute_query = show_tables()
- (
- # TEST BODY
- execute_query
- )
-
-from tests.system.utils import get_test_run # noqa: E402
-
-# Needed to run the example DAG with pytest (see: tests/system/README.md#run_via_pytest)
-test_run = get_test_run(dag)