This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 946097674be Fix conditionals for test types and make them consistent
(#54678)
946097674be is described below
commit 946097674be25b2a8859497a4ffd2088725d95d6
Author: Jarek Potiuk <[email protected]>
AuthorDate: Wed Aug 20 00:55:11 2025 +0200
Fix conditionals for test types and make them consistent (#54678)
The go tests do not depend on CI image being built, also they should
not be run independently on the `run-tests` flag - because
run-tests is generally for our unit tests.
They should be run when `run-go-sdk-tests` is set and without
dependency on ci-images being built. There were also a few
other issues found during this cleanuup:
Several outputs were inconsistently named:
* run-tests was renamed to run-unit-tests
* need-* outputs were renamed to run-*
Some other fixes were applied:
* only-new-ui-files was removed as it is not needed any more as
we do not really need that check to be exposed to actions, it
is only used internally - to not run other tests when only ui
files changed
* run-system-tests was not properly used (it is currently an
alias to run-unit-tests anyway - but foreseen for future
separation$a
* need-javascript-scans and need-python-scans have been removed
as they are no longer used
---
.github/workflows/basic-tests.yml | 2 +-
.github/workflows/ci-amd.yml | 84 +++---
.github/workflows/ci-arm.yml | 47 ++-
.github/workflows/ci-image-checks.yml | 8 +-
.github/workflows/test-providers.yml | 6 +-
dev/breeze/doc/ci/04_selective_checks.md | 13 +-
dev/breeze/src/airflow_breeze/global_constants.py | 6 +-
.../src/airflow_breeze/utils/selective_checks.py | 69 ++---
dev/breeze/tests/test_selective_checks.py | 319 +++++++++++----------
9 files changed, 266 insertions(+), 288 deletions(-)
diff --git a/.github/workflows/basic-tests.yml
b/.github/workflows/basic-tests.yml
index 99559f2cfb4..57cd131d213 100644
--- a/.github/workflows/basic-tests.yml
+++ b/.github/workflows/basic-tests.yml
@@ -32,7 +32,7 @@ on: # yamllint disable-line rule:truthy
description: "Whether to run WWW tests (true/false)"
required: true
type: string
- needs-api-codegen:
+ run-api-codegen:
description: "Whether to run API codegen (true/false)"
required: true
type: string
diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index 4d01c7a388c..cbf45d09908 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -57,6 +57,8 @@ jobs:
outputs:
all-python-versions-list-as-string: >-
${{ steps.selective-checks.outputs.all-python-versions-list-as-string
}}
+ amd-runners: ${{ steps.selective-checks.outputs.amd-runners }}
+ arm-runners: ${{ steps.selective-checks.outputs.arm-runners }}
basic-checks-only: ${{ steps.selective-checks.outputs.basic-checks-only
}}
canary-run: ${{ steps.source-run-info.outputs.canary-run }}
ci-image-build: ${{ steps.selective-checks.outputs.ci-image-build }}
@@ -92,11 +94,6 @@ jobs:
mypy-checks: ${{ steps.selective-checks.outputs.mypy-checks }}
mysql-exclude: ${{ steps.selective-checks.outputs.mysql-exclude }}
mysql-versions: ${{ steps.selective-checks.outputs.mysql-versions }}
- needs-api-codegen: ${{ steps.selective-checks.outputs.needs-api-codegen
}}
- needs-api-tests: ${{ steps.selective-checks.outputs.needs-api-tests }}
- needs-helm-tests: ${{ steps.selective-checks.outputs.needs-helm-tests }}
- needs-mypy: ${{ steps.selective-checks.outputs.needs-mypy }}
- only-new-ui-files: ${{ steps.selective-checks.outputs.only-new-ui-files
}}
postgres-exclude: ${{ steps.selective-checks.outputs.postgres-exclude }}
postgres-versions: ${{ steps.selective-checks.outputs.postgres-versions
}}
prod-image-build: ${{ steps.selective-checks.outputs.prod-image-build }}
@@ -108,18 +105,20 @@ jobs:
pull-request-labels: ${{ steps.source-run-info.outputs.pr-labels }}
python-versions-list-as-string: ${{
steps.selective-checks.outputs.python-versions-list-as-string }}
python-versions: ${{ steps.selective-checks.outputs.python-versions }}
- run-amazon-tests: ${{ steps.selective-checks.outputs.run-amazon-tests }}
run-airflow-ctl-tests: ${{
steps.selective-checks.outputs.run-airflow-ctl-tests }}
+ run-amazon-tests: ${{ steps.selective-checks.outputs.run-amazon-tests }}
+ run-api-codegen: ${{ steps.selective-checks.outputs.run-api-codegen }}
+ run-api-tests: ${{ steps.selective-checks.outputs.run-api-tests }}
run-coverage: ${{ steps.source-run-info.outputs.run-coverage }}
- run-kubernetes-tests: ${{
steps.selective-checks.outputs.run-kubernetes-tests }}
- run-task-sdk-tests: ${{
steps.selective-checks.outputs.run-task-sdk-tests }}
run-go-sdk-tests: ${{ steps.selective-checks.outputs.run-go-sdk-tests }}
+ run-helm-tests: ${{ steps.selective-checks.outputs.run-helm-tests }}
+ run-kubernetes-tests: ${{
steps.selective-checks.outputs.run-kubernetes-tests }}
+ run-mypy: ${{ steps.selective-checks.outputs.run-mypy }}
run-system-tests: ${{ steps.selective-checks.outputs.run-system-tests }}
- run-tests: ${{ steps.selective-checks.outputs.run-tests }}
+ run-task-sdk-tests: ${{
steps.selective-checks.outputs.run-task-sdk-tests }}
run-ui-tests: ${{ steps.selective-checks.outputs.run-ui-tests }}
+ run-unit-tests: ${{ steps.selective-checks.outputs.run-unit-tests }}
run-www-tests: ${{ steps.selective-checks.outputs.run-www-tests }}
- amd-runners: ${{ steps.selective-checks.outputs.amd-runners }}
- arm-runners: ${{ steps.selective-checks.outputs.arm-runners }}
selected-providers-list-as-string: >-
${{ steps.selective-checks.outputs.selected-providers-list-as-string }}
skip-prek-hooks: ${{ steps.selective-checks.outputs.skip-prek-hooks }}
@@ -205,7 +204,7 @@ jobs:
runners: ${{ needs.build-info.outputs.amd-runners }}
run-ui-tests: ${{needs.build-info.outputs.run-ui-tests}}
run-www-tests: ${{needs.build-info.outputs.run-www-tests}}
- needs-api-codegen: ${{needs.build-info.outputs.needs-api-codegen}}
+ run-api-codegen: ${{needs.build-info.outputs.run-api-codegen}}
default-python-version: "${{
needs.build-info.outputs.default-python-version }}"
basic-checks-only: ${{needs.build-info.outputs.basic-checks-only}}
skip-prek-hooks: ${{needs.build-info.outputs.skip-prek-hooks}}
@@ -290,7 +289,7 @@ jobs:
with:
runners: ${{ needs.build-info.outputs.amd-runners }}
platform: "linux/amd64"
- needs-mypy: ${{ needs.build-info.outputs.needs-mypy }}
+ run-mypy: ${{ needs.build-info.outputs.run-mypy }}
mypy-checks: ${{ needs.build-info.outputs.mypy-checks }}
python-versions-list-as-string: ${{
needs.build-info.outputs.python-versions-list-as-string }}
branch: ${{ needs.build-info.outputs.default-branch }}
@@ -305,7 +304,7 @@ jobs:
include-success-outputs: ${{
needs.build-info.outputs.include-success-outputs }}
debug-resources: ${{ needs.build-info.outputs.debug-resources }}
docs-build: ${{ needs.build-info.outputs.docs-build }}
- needs-api-codegen: ${{ needs.build-info.outputs.needs-api-codegen }}
+ run-api-codegen: ${{ needs.build-info.outputs.run-api-codegen }}
default-postgres-version: ${{
needs.build-info.outputs.default-postgres-version }}
run-coverage: ${{ needs.build-info.outputs.run-coverage }}
use-uv: ${{ needs.build-info.outputs.use-uv }}
@@ -325,7 +324,7 @@ jobs:
if: >
needs.build-info.outputs.skip-providers-tests != 'true' &&
needs.build-info.outputs.latest-versions-only != 'true' &&
- needs.build-info.outputs.run-tests == 'true'
+ needs.build-info.outputs.run-unit-tests == 'true'
with:
runners: ${{ needs.build-info.outputs.amd-runners }}
platform: "linux/amd64"
@@ -356,7 +355,7 @@ jobs:
default-python-version: "${{
needs.build-info.outputs.default-python-version }}"
use-uv: ${{ needs.build-info.outputs.use-uv }}
if: >
- needs.build-info.outputs.needs-helm-tests == 'true' &&
+ needs.build-info.outputs.run-helm-tests == 'true' &&
needs.build-info.outputs.default-branch == 'main' &&
needs.build-info.outputs.latest-versions-only != 'true'
@@ -387,8 +386,7 @@ jobs:
skip-providers-tests: ${{ needs.build-info.outputs.skip-providers-tests
}}
use-uv: ${{ needs.build-info.outputs.use-uv }}
default-branch: ${{ needs.build-info.outputs.default-branch }}
-
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
tests-postgres-providers:
name: "Postgres tests: providers"
@@ -417,7 +415,7 @@ jobs:
skip-providers-tests: ${{ needs.build-info.outputs.skip-providers-tests
}}
use-uv: ${{ needs.build-info.outputs.use-uv }}
default-branch: ${{ needs.build-info.outputs.default-branch }}
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
tests-mysql-core:
name: "MySQL tests: core"
@@ -446,7 +444,7 @@ jobs:
skip-providers-tests: ${{ needs.build-info.outputs.skip-providers-tests
}}
use-uv: ${{ needs.build-info.outputs.use-uv }}
default-branch: ${{ needs.build-info.outputs.default-branch }}
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
tests-mysql-providers:
name: "MySQL tests: providers"
@@ -475,7 +473,7 @@ jobs:
skip-providers-tests: ${{ needs.build-info.outputs.skip-providers-tests
}}
use-uv: ${{ needs.build-info.outputs.use-uv }}
default-branch: ${{ needs.build-info.outputs.default-branch }}
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
tests-sqlite-core:
@@ -507,7 +505,7 @@ jobs:
skip-providers-tests: ${{ needs.build-info.outputs.skip-providers-tests
}}
use-uv: ${{ needs.build-info.outputs.use-uv }}
default-branch: ${{ needs.build-info.outputs.default-branch }}
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
tests-sqlite-providers:
name: "Sqlite tests: providers"
@@ -538,7 +536,7 @@ jobs:
skip-providers-tests: ${{ needs.build-info.outputs.skip-providers-tests
}}
use-uv: ${{ needs.build-info.outputs.use-uv }}
default-branch: ${{ needs.build-info.outputs.default-branch }}
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
tests-non-db-core:
@@ -569,7 +567,7 @@ jobs:
skip-providers-tests: ${{ needs.build-info.outputs.skip-providers-tests
}}
use-uv: ${{ needs.build-info.outputs.use-uv }}
default-branch: ${{ needs.build-info.outputs.default-branch }}
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
tests-non-db-providers:
name: "Non-DB tests: providers"
@@ -599,7 +597,7 @@ jobs:
skip-providers-tests: ${{ needs.build-info.outputs.skip-providers-tests
}}
use-uv: ${{ needs.build-info.outputs.use-uv }}
default-branch: ${{ needs.build-info.outputs.default-branch }}
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
tests-special:
name: "Special tests"
@@ -609,7 +607,7 @@ jobs:
contents: read
packages: read
if: >
- needs.build-info.outputs.run-tests == 'true' &&
+ needs.build-info.outputs.run-unit-tests == 'true' &&
(needs.build-info.outputs.canary-run == 'true' ||
needs.build-info.outputs.upgrade-to-newer-dependencies != 'false' ||
needs.build-info.outputs.full-tests-needed == 'true')
@@ -645,7 +643,7 @@ jobs:
platform: "linux/amd64"
testable-core-integrations: ${{
needs.build-info.outputs.testable-core-integrations }}
testable-providers-integrations: ${{
needs.build-info.outputs.testable-providers-integrations }}
- run-system-tests: ${{ needs.build-info.outputs.run-tests }}
+ run-system-tests: ${{ needs.build-info.outputs.run-system-tests }}
default-python-version: "${{
needs.build-info.outputs.default-python-version }}"
default-postgres-version: ${{
needs.build-info.outputs.default-postgres-version }}
default-mysql-version: ${{
needs.build-info.outputs.default-mysql-version }}
@@ -653,7 +651,7 @@ jobs:
debug-resources: ${{ needs.build-info.outputs.debug-resources }}
skip-providers-tests: ${{ needs.build-info.outputs.skip-providers-tests
}}
use-uv: ${{ needs.build-info.outputs.use-uv }}
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
tests-with-lowest-direct-resolution-core:
name: "Low dep tests:core"
@@ -663,7 +661,7 @@ jobs:
contents: read
packages: read
if: >
- needs.build-info.outputs.run-tests == 'true'
+ needs.build-info.outputs.run-unit-tests == 'true'
with:
runners: ${{ needs.build-info.outputs.amd-runners }}
platform: "linux/amd64"
@@ -693,7 +691,7 @@ jobs:
permissions:
contents: read
packages: read
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
with:
runners: ${{ needs.build-info.outputs.amd-runners }}
platform: "linux/amd64"
@@ -776,7 +774,7 @@ jobs:
kubernetes-combos: ${{ needs.build-info.outputs.kubernetes-combos }}
if: >
( needs.build-info.outputs.run-kubernetes-tests == 'true' ||
- needs.build-info.outputs.needs-helm-tests == 'true')
+ needs.build-info.outputs.run-helm-tests == 'true')
tests-task-sdk:
name: "Task SDK tests"
@@ -797,23 +795,17 @@ jobs:
test-type: "task-sdk-tests"
use-local-venv: 'false'
test-timeout: 20
- if: >
- ( needs.build-info.outputs.run-task-sdk-tests == 'true' ||
- needs.build-info.outputs.run-tests == 'true' &&
- needs.build-info.outputs.only-new-ui-files != 'true')
+ if: needs.build-info.outputs.run-task-sdk-tests == 'true'
tests-go-sdk:
name: "Go SDK tests"
- needs: [build-info, build-ci-images]
+ needs: [build-info]
runs-on: ${{ fromJSON(needs.build-info.outputs.amd-runners) }}
timeout-minutes: 15
permissions:
contents: read
packages: read
- if: >
- ( needs.build-info.outputs.run-go-sdk-tests == 'true' ||
- needs.build-info.outputs.run-tests == 'true' &&
- needs.build-info.outputs.only-new-ui-files != 'true')
+ if: needs.build-info.outputs.run-go-sdk-tests == 'true'
env:
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -824,24 +816,20 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #
v4.2.2
with:
persist-credentials: false
-
# keep this in sync with go.mod in go-sdk/
- name: Setup Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 #
v5.5.0
with:
go-version: 1.24
cache-dependency-path: go-sdk/go.sum
-
# keep this in sync with go.mod in go-sdk/
- name: Setup Gotestsum
shell: bash
run: |
go install
gotest.tools/gotestsum@ddd0b05a6878e2e8257a2abe6e7df66cebc53d0e # v1.12.3
gotestsum --version
-
- name: "Cleanup dist files"
run: rm -fv ./dist/*
-
- name: Run Go tests
working-directory: ./go-sdk
run: gotestsum --format testname ./...
@@ -865,10 +853,7 @@ jobs:
test-type: "airflow-ctl-tests"
use-local-venv: 'true'
test-timeout: 20
- if: >
- ( needs.build-info.outputs.run-airflow-ctl-tests == 'true' ||
- needs.build-info.outputs.run-tests == 'true' &&
- needs.build-info.outputs.only-new-ui-files != 'true')
+ if: needs.build-info.outputs.run-airflow-ctl-tests == 'true'
finalize-tests:
name: Finalize tests
@@ -900,6 +885,7 @@ jobs:
- tests-sqlite-providers
- tests-task-sdk
- tests-airflow-ctl
+ - tests-go-sdk
- tests-with-lowest-direct-resolution-core
- tests-with-lowest-direct-resolution-providers
uses: ./.github/workflows/finalize-tests.yml
@@ -947,7 +933,7 @@ jobs:
timeout-minutes: 15
name: "Summarize warnings"
runs-on: ${{ fromJSON(needs.build-info.outputs.amd-runners) }}
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
steps:
- name: "Cleanup repo"
shell: bash
diff --git a/.github/workflows/ci-arm.yml b/.github/workflows/ci-arm.yml
index ec2abf75077..37bac6d7e67 100644
--- a/.github/workflows/ci-arm.yml
+++ b/.github/workflows/ci-arm.yml
@@ -50,6 +50,8 @@ jobs:
outputs:
all-python-versions-list-as-string: >-
${{ steps.selective-checks.outputs.all-python-versions-list-as-string
}}
+ amd-runners: ${{ steps.selective-checks.outputs.amd-runners }}
+ arm-runners: ${{ steps.selective-checks.outputs.arm-runners }}
basic-checks-only: ${{ steps.selective-checks.outputs.basic-checks-only
}}
canary-run: ${{ steps.source-run-info.outputs.canary-run }}
ci-image-build: ${{ steps.selective-checks.outputs.ci-image-build }}
@@ -85,11 +87,6 @@ jobs:
mypy-checks: ${{ steps.selective-checks.outputs.mypy-checks }}
mysql-exclude: ${{ steps.selective-checks.outputs.mysql-exclude }}
mysql-versions: ${{ steps.selective-checks.outputs.mysql-versions }}
- needs-api-codegen: ${{ steps.selective-checks.outputs.needs-api-codegen
}}
- needs-api-tests: ${{ steps.selective-checks.outputs.needs-api-tests }}
- needs-helm-tests: ${{ steps.selective-checks.outputs.needs-helm-tests }}
- needs-mypy: ${{ steps.selective-checks.outputs.needs-mypy }}
- only-new-ui-files: ${{ steps.selective-checks.outputs.only-new-ui-files
}}
postgres-exclude: ${{ steps.selective-checks.outputs.postgres-exclude }}
postgres-versions: ${{ steps.selective-checks.outputs.postgres-versions
}}
prod-image-build: ${{ steps.selective-checks.outputs.prod-image-build }}
@@ -101,18 +98,20 @@ jobs:
pull-request-labels: ${{ steps.source-run-info.outputs.pr-labels }}
python-versions-list-as-string: ${{
steps.selective-checks.outputs.python-versions-list-as-string }}
python-versions: ${{ steps.selective-checks.outputs.python-versions }}
- run-amazon-tests: ${{ steps.selective-checks.outputs.run-amazon-tests }}
run-airflow-ctl-tests: ${{
steps.selective-checks.outputs.run-airflow-ctl-tests }}
+ run-amazon-tests: ${{ steps.selective-checks.outputs.run-amazon-tests }}
+ run-api-codegen: ${{ steps.selective-checks.outputs.run-api-codegen }}
+ run-api-tests: ${{ steps.selective-checks.outputs.run-api-tests }}
run-coverage: ${{ steps.source-run-info.outputs.run-coverage }}
- run-kubernetes-tests: ${{
steps.selective-checks.outputs.run-kubernetes-tests }}
- run-task-sdk-tests: ${{
steps.selective-checks.outputs.run-task-sdk-tests }}
run-go-sdk-tests: ${{ steps.selective-checks.outputs.run-go-sdk-tests }}
+ run-helm-tests: ${{ steps.selective-checks.outputs.run-helm-tests }}
+ run-kubernetes-tests: ${{
steps.selective-checks.outputs.run-kubernetes-tests }}
+ run-mypy: ${{ steps.selective-checks.outputs.run-mypy }}
run-system-tests: ${{ steps.selective-checks.outputs.run-system-tests }}
- run-tests: ${{ steps.selective-checks.outputs.run-tests }}
+ run-task-sdk-tests: ${{
steps.selective-checks.outputs.run-task-sdk-tests }}
run-ui-tests: ${{ steps.selective-checks.outputs.run-ui-tests }}
+ run-unit-tests: ${{ steps.selective-checks.outputs.run-unit-tests }}
run-www-tests: ${{ steps.selective-checks.outputs.run-www-tests }}
- amd-runners: ${{ steps.selective-checks.outputs.amd-runners }}
- arm-runners: ${{ steps.selective-checks.outputs.arm-runners }}
selected-providers-list-as-string: >-
${{ steps.selective-checks.outputs.selected-providers-list-as-string }}
skip-prek-hooks: ${{ steps.selective-checks.outputs.skip-prek-hooks }}
@@ -168,7 +167,7 @@ jobs:
runners: ${{ needs.build-info.outputs.arm-runners }}
run-ui-tests: ${{needs.build-info.outputs.run-ui-tests}}
run-www-tests: ${{needs.build-info.outputs.run-www-tests}}
- needs-api-codegen: ${{needs.build-info.outputs.needs-api-codegen}}
+ run-api-codegen: ${{needs.build-info.outputs.run-api-codegen}}
default-python-version: "${{
needs.build-info.outputs.default-python-version }}"
basic-checks-only: ${{needs.build-info.outputs.basic-checks-only}}
skip-prek-hooks: ${{needs.build-info.outputs.skip-prek-hooks}}
@@ -283,7 +282,7 @@ jobs:
default-python-version: "${{
needs.build-info.outputs.default-python-version }}"
use-uv: ${{ needs.build-info.outputs.use-uv }}
if: >
- needs.build-info.outputs.needs-helm-tests == 'true' &&
+ needs.build-info.outputs.run-helm-tests == 'true' &&
needs.build-info.outputs.default-branch == 'main' &&
needs.build-info.outputs.latest-versions-only != 'true'
@@ -314,7 +313,7 @@ jobs:
skip-providers-tests: ${{ needs.build-info.outputs.skip-providers-tests
}}
use-uv: ${{ needs.build-info.outputs.use-uv }}
default-branch: ${{ needs.build-info.outputs.default-branch }}
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
tests-postgres-providers:
name: "Postgres tests: providers"
@@ -343,7 +342,7 @@ jobs:
skip-providers-tests: ${{ needs.build-info.outputs.skip-providers-tests
}}
use-uv: ${{ needs.build-info.outputs.use-uv }}
default-branch: ${{ needs.build-info.outputs.default-branch }}
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
tests-sqlite-core:
name: "Sqlite tests: core"
@@ -374,7 +373,7 @@ jobs:
skip-providers-tests: ${{ needs.build-info.outputs.skip-providers-tests
}}
use-uv: ${{ needs.build-info.outputs.use-uv }}
default-branch: ${{ needs.build-info.outputs.default-branch }}
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
tests-sqlite-providers:
name: "Sqlite tests: providers"
@@ -405,7 +404,7 @@ jobs:
skip-providers-tests: ${{ needs.build-info.outputs.skip-providers-tests
}}
use-uv: ${{ needs.build-info.outputs.use-uv }}
default-branch: ${{ needs.build-info.outputs.default-branch }}
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
tests-non-db-core:
@@ -436,7 +435,7 @@ jobs:
skip-providers-tests: ${{ needs.build-info.outputs.skip-providers-tests
}}
use-uv: ${{ needs.build-info.outputs.use-uv }}
default-branch: ${{ needs.build-info.outputs.default-branch }}
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
tests-non-db-providers:
name: "Non-DB tests: providers"
@@ -466,7 +465,7 @@ jobs:
skip-providers-tests: ${{ needs.build-info.outputs.skip-providers-tests
}}
use-uv: ${{ needs.build-info.outputs.use-uv }}
default-branch: ${{ needs.build-info.outputs.default-branch }}
- if: needs.build-info.outputs.run-tests == 'true'
+ if: needs.build-info.outputs.run-unit-tests == 'true'
build-prod-images:
name: Build PROD images
@@ -511,7 +510,7 @@ jobs:
kubernetes-combos: ${{ needs.build-info.outputs.kubernetes-combos }}
if: >
( needs.build-info.outputs.run-kubernetes-tests == 'true' ||
- needs.build-info.outputs.needs-helm-tests == 'true')
+ needs.build-info.outputs.run-helm-tests == 'true')
tests-go-sdk:
name: "Go SDK tests"
@@ -521,10 +520,7 @@ jobs:
permissions:
contents: read
packages: read
- if: >
- ( needs.build-info.outputs.run-go-sdk-tests == 'true' ||
- needs.build-info.outputs.run-tests == 'true' &&
- needs.build-info.outputs.only-new-ui-files != 'true')
+ if: needs.build-info.outputs.run-go-sdk-tests == 'true'
env:
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -535,17 +531,14 @@ jobs:
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #
v4.2.2
with:
persist-credentials: false
-
# keep this in sync with go.mod in go-sdk/
- name: Setup Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 #
v5.5.0
with:
go-version: 1.24
cache-dependency-path: go-sdk/go.sum
-
- name: "Cleanup dist files"
run: rm -fv ./dist/*
-
- name: Run Go tests
working-directory: ./go-sdk
run: go test -v ./...
diff --git a/.github/workflows/ci-image-checks.yml
b/.github/workflows/ci-image-checks.yml
index e209aca95a6..32953b67416 100644
--- a/.github/workflows/ci-image-checks.yml
+++ b/.github/workflows/ci-image-checks.yml
@@ -28,7 +28,7 @@ on: # yamllint disable-line rule:truthy
description: "Platform for the build - 'linux/amd64' or 'linux/arm64'"
required: true
type: string
- needs-mypy:
+ run-mypy:
description: "Whether to run mypy checks (true/false)"
required: true
type: string
@@ -88,7 +88,7 @@ on: # yamllint disable-line rule:truthy
description: "Whether to build docs (true/false)"
required: true
type: string
- needs-api-codegen:
+ run-api-codegen:
description: "Whether to run API codegen (true/false)"
required: true
type: string
@@ -211,7 +211,7 @@ jobs:
name: "MyPy checks"
runs-on: ${{ fromJSON(inputs.runners) }}
needs: install-prek
- if: inputs.needs-mypy == 'true'
+ if: inputs.run-mypy == 'true'
strategy:
fail-fast: false
matrix:
@@ -407,7 +407,7 @@ jobs:
timeout-minutes: 60
name: "Test Python API client"
runs-on: ${{ fromJSON(inputs.runners) }}
- if: inputs.needs-api-codegen == 'true'
+ if: inputs.run-api-codegen == 'true'
env:
BACKEND: "postgres"
BACKEND_VERSION: "${{ inputs.default-postgres-version }}"
diff --git a/.github/workflows/test-providers.yml
b/.github/workflows/test-providers.yml
index 3c187c42a07..700f6e54393 100644
--- a/.github/workflows/test-providers.yml
+++ b/.github/workflows/test-providers.yml
@@ -47,7 +47,7 @@ on: # yamllint disable-line rule:truthy
providers-compatibility-tests-matrix:
description: >
JSON-formatted array of providers compatibility tests in the form of
array of dicts
- (airflow-version, python-versions, remove-providers, run-tests)
+ (airflow-version, python-versions, remove-providers, run-unit-tests)
required: true
type: string
providers-test-types-list-as-strings-in-json:
@@ -217,7 +217,7 @@ jobs:
Airflow ${{ matrix.compat.airflow-version }}:Python ${{
matrix.compat.python-version }}
# We do not need to run import check if we run tests, the tests should
cover all the import checks
# automatically
- if: matrix.compat.run-tests != 'true'
+ if: matrix.compat.run-unit-tests != 'true'
env:
AIRFLOW_VERSION: "${{ matrix.compat.airflow-version }}"
run: >
@@ -234,7 +234,7 @@ jobs:
- name: >
Run provider unit tests on Airflow ${{ matrix.compat.airflow-version
}}:Python
${{ matrix.compat.python-version }}:${{
matrix.test-types.description }}
- if: matrix.compat.run-tests == 'true'
+ if: matrix.compat.run-unit-tests == 'true'
env:
PROVIDERS_TEST_TYPES: "${{ matrix.test-types.test_types }}"
AIRFLOW_VERSION: "${{ matrix.compat.airflow-version }}"
diff --git a/dev/breeze/doc/ci/04_selective_checks.md
b/dev/breeze/doc/ci/04_selective_checks.md
index 8f6f255985c..f7bbbb7cc02 100644
--- a/dev/breeze/doc/ci/04_selective_checks.md
+++ b/dev/breeze/doc/ci/04_selective_checks.md
@@ -205,13 +205,6 @@ GitHub Actions to pass the list of parameters to a command
to execute
| mypy-checks | List of folders to
be considered for mypy checks
| \["airflow_aux", "airflow_core"\] | |
| mysql-exclude | Which versions of
MySQL to exclude for tests as JSON array
| [] | |
| mysql-versions | Which versions of
MySQL to use for tests as JSON array
| \['8.0'\] | |
-| needs-api-codegen | Whether
"api-codegen" are needed to run ("true"/"false")
| true | |
-| needs-api-tests | Whether
"api-tests" are needed to run ("true"/"false")
| true | |
-| needs-helm-tests | Whether Helm tests
are needed to run ("true"/"false")
| true | |
-| needs-javascript-scans | Whether javascript
CodeQL scans should be run ("true"/"false")
| true | |
-| needs-mypy | Whether mypy check
is supposed to run in this build
| true | |
-| needs-python-scans | Whether Python
CodeQL scans should be run ("true"/"false")
| true | |
-| only-new-ui-files | Whether only new
UI files are present in the PR ("true"/"false")
| false | |
| postgres-exclude | Which versions of
Postgres to exclude for tests as JSON array
| [] | |
| postgres-versions | Which versions of
Postgres to use for tests as JSON array
| \['12'\] | |
| prod-image-build | Whether PROD image
build is needed
| true | |
@@ -221,11 +214,15 @@ GitHub Actions to pass the list of parameters to a
command to execute
| python-versions | List of python
versions to use for that build
| \['3.10'\] | |
| python-versions-list-as-string | Which versions of
MySQL to use for tests as space-separated string
| 3.10 | * |
| run-amazon-tests | Whether Amazon
tests should be run ("true"/"false")
| true | |
+| run-api-codegen | Whether
"api-codegen" are needed to run ("true"/"false")
| true | |
+| run-api-tests | Whether
"api-tests" are needed to run ("true"/"false")
| true | |
+| run-helm-tests | Whether Helm tests
are needed to run ("true"/"false")
| true | |
| run-kubernetes-tests | Whether Kubernetes
tests should be run ("true"/"false")
| true | |
+| run-mypy | Whether mypy check
is supposed to run in this build
| true | |
| run-system-tests | Whether system
tests should be run ("true"/"false")
| true | |
| run-task-sdk-tests | Whether Task SDK
tests should be run ("true"/"false")
| true | |
-| run-tests | Whether unit tests
should be run ("true"/"false")
| true | |
| run-ui-tests | Whether UI tests
should be run ("true"/"false")
| true | |
+| run-unit-tests | Whether unit tests
should be run ("true"/"false")
| true | |
| run-www-tests | Whether Legacy WWW
tests should be run ("true"/"false")
| true | |
| amd-runners | List of labels
assigned for runners for that build for public AMD runners
| \["ubuntu-22.04"\] | |
| arm-runners | List of labels
assigned for runners for that build for public ARM runners
| \["ubuntu-22.04-arm"\] | |
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py
b/dev/breeze/src/airflow_breeze/global_constants.py
index 64decc9ca46..57e24b12f82 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -752,19 +752,19 @@ PROVIDERS_COMPATIBILITY_TESTS_MATRIX: list[dict[str, str
| list[str]]] = [
"python-version": "3.10",
"airflow-version": "2.10.5",
"remove-providers": "common.messaging fab git keycloak",
- "run-tests": "true",
+ "run-unit-tests": "true",
},
{
"python-version": "3.10",
"airflow-version": "2.11.0",
"remove-providers": "common.messaging fab git keycloak",
- "run-tests": "true",
+ "run-unit-tests": "true",
},
{
"python-version": "3.10",
"airflow-version": "3.0.4",
"remove-providers": "",
- "run-tests": "true",
+ "run-unit-tests": "true",
},
]
diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index 65ca028a6ad..f44e1210049 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -141,7 +141,7 @@ class HashableDict(dict[T, list[str]]):
return hash(frozenset(self))
-CI_FILE_GROUP_MATCHES = HashableDict(
+CI_FILE_GROUP_MATCHES: HashableDict[FileGroupForCi] = HashableDict(
{
FileGroupForCi.ENVIRONMENT_FILES: [
r"^.github/workflows",
@@ -306,7 +306,7 @@ PYTHON_OPERATOR_FILES = [
r"^providers/tests/standard/operators/test_python.py",
]
-TEST_TYPE_MATCHES = HashableDict(
+TEST_TYPE_MATCHES: HashableDict[SelectiveCoreTestType] = HashableDict(
{
SelectiveCoreTestType.API: [
r"^airflow-core/src/airflow/api/",
@@ -757,27 +757,27 @@ class SelectiveChecks:
return checks_to_run
@cached_property
- def needs_mypy(self) -> bool:
+ def run_mypy(self) -> bool:
return self.mypy_checks != []
@cached_property
- def needs_python_scans(self) -> bool:
+ def run_python_scans(self) -> bool:
return self._should_be_run(FileGroupForCi.PYTHON_PRODUCTION_FILES)
@cached_property
- def needs_javascript_scans(self) -> bool:
+ def run_javascript_scans(self) -> bool:
return self._should_be_run(FileGroupForCi.JAVASCRIPT_PRODUCTION_FILES)
@cached_property
- def needs_api_tests(self) -> bool:
+ def run_api_tests(self) -> bool:
return self._should_be_run(FileGroupForCi.API_FILES)
@cached_property
- def needs_ol_tests(self) -> bool:
+ def run_ol_tests(self) -> bool:
return self._should_be_run(FileGroupForCi.ASSET_FILES)
@cached_property
- def needs_api_codegen(self) -> bool:
+ def run_api_codegen(self) -> bool:
return self._should_be_run(FileGroupForCi.API_CODEGEN_FILES)
@cached_property
@@ -814,23 +814,34 @@ class SelectiveChecks:
return self._should_be_run(FileGroupForCi.DOC_FILES)
@cached_property
- def needs_helm_tests(self) -> bool:
+ def run_helm_tests(self) -> bool:
return self._should_be_run(FileGroupForCi.HELM_FILES) and
self._default_branch == "main"
@cached_property
- def run_tests(self) -> bool:
+ def run_unit_tests(self) -> bool:
+ def _only_new_ui_files() -> bool:
+ all_source_files = set(
+ self._matching_files(FileGroupForCi.ALL_SOURCE_FILES,
CI_FILE_GROUP_MATCHES)
+ )
+ new_ui_source_files =
set(self._matching_files(FileGroupForCi.UI_FILES, CI_FILE_GROUP_MATCHES))
+ remaining_files = all_source_files - new_ui_source_files
+
+ if all_source_files and new_ui_source_files and not
remaining_files:
+ return True
+ return False
+
if self.full_tests_needed:
return True
if self._is_canary_run():
return True
- if self.only_new_ui_files:
+ if _only_new_ui_files():
return False
# we should run all test
return self._should_be_run(FileGroupForCi.ALL_SOURCE_FILES)
@cached_property
def run_system_tests(self) -> bool:
- return self.run_tests
+ return self.run_unit_tests
@cached_property
def only_pyproject_toml_files_changed(self) -> bool:
@@ -842,10 +853,10 @@ class SelectiveChecks:
# changes because some of our tests - those that need CI image might
need to be run depending on
# changed rules for static checks that are part of the pyproject.toml
file
return (
- self.run_tests
+ self.run_unit_tests
or self.docs_build
or self.run_kubernetes_tests
- or self.needs_helm_tests
+ or self.run_helm_tests
or self.run_ui_tests
or self.pyproject_toml_changed
or self.any_provider_yaml_or_pyproject_toml_changed
@@ -853,7 +864,7 @@ class SelectiveChecks:
@cached_property
def prod_image_build(self) -> bool:
- return self.run_kubernetes_tests or self.needs_helm_tests
+ return self.run_kubernetes_tests or self.run_helm_tests
def _select_test_type_if_matching(
self, test_types: set[str], test_type: SelectiveCoreTestType
@@ -960,7 +971,7 @@ class SelectiveChecks:
len(all_providers_source_files) == 0
and len(all_providers_distribution_config_files) == 0
and len(assets_source_files) == 0
- and not self.needs_api_tests
+ and not self.run_api_tests
):
# IF API tests are needed, that will trigger extra provider checks
return []
@@ -1021,14 +1032,14 @@ class SelectiveChecks:
@cached_property
def core_test_types_list_as_strings_in_json(self) -> str | None:
- if not self.run_tests:
+ if not self.run_unit_tests:
return None
current_test_types = sorted(set(self._get_core_test_types_to_run()))
return json.dumps(_get_test_list_as_json([current_test_types]))
@cached_property
def providers_test_types_list_as_strings_in_json(self) -> str:
- if not self.run_tests:
+ if not self.run_unit_tests:
return "[]"
current_test_types = set(self._get_providers_test_types_to_run())
if self._default_branch != "main":
@@ -1056,7 +1067,7 @@ class SelectiveChecks:
@cached_property
def individual_providers_test_types_list_as_strings_in_json(self) -> str |
None:
"""Splits the list of test types into several lists of strings (to run
them in parallel)."""
- if not self.run_tests:
+ if not self.run_unit_tests:
return None
current_test_types = sorted(self._get_individual_providers_list())
if not current_test_types:
@@ -1264,7 +1275,7 @@ class SelectiveChecks:
return False
if self._get_providers_test_types_to_run():
return False
- if not self.run_tests:
+ if not self.run_unit_tests:
return True
return True
@@ -1334,19 +1345,9 @@ class SelectiveChecks:
) # ^ sort by Python minor version
return json.dumps(sorted_providers_to_exclude)
- @cached_property
- def only_new_ui_files(self) -> bool:
- all_source_files =
set(self._matching_files(FileGroupForCi.ALL_SOURCE_FILES,
CI_FILE_GROUP_MATCHES))
- new_ui_source_files =
set(self._matching_files(FileGroupForCi.UI_FILES, CI_FILE_GROUP_MATCHES))
- remaining_files = all_source_files - new_ui_source_files
-
- if all_source_files and new_ui_source_files and not remaining_files:
- return True
- return False
-
@cached_property
def testable_core_integrations(self) -> list[str]:
- if not self.run_tests:
+ if not self.run_unit_tests:
return []
return [
integration
@@ -1356,7 +1357,7 @@ class SelectiveChecks:
@cached_property
def testable_providers_integrations(self) -> list[str]:
- if not self.run_tests:
+ if not self.run_unit_tests:
return []
return [
integration
@@ -1384,9 +1385,9 @@ class SelectiveChecks:
suspended_providers.add(provider)
else:
affected_providers.add(provider)
- if self.needs_api_tests:
+ if self.run_api_tests:
affected_providers.add("fab")
- if self.needs_ol_tests:
+ if self.run_ol_tests:
affected_providers.add("openlineage")
if all_providers_affected:
return ALL_PROVIDERS_SENTINEL
diff --git a/dev/breeze/tests/test_selective_checks.py
b/dev/breeze/tests/test_selective_checks.py
index a988755bea4..b9542f72d9d 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -243,8 +243,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions":
f"['{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}']",
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "false",
+ "run-helm-tests": "false",
+ "run-unit-tests": "false",
"run-amazon-tests": "false",
"docs-build": "false",
"skip-prek-hooks": ALL_SKIPPED_COMMITS_ON_NO_CI_IMAGE,
@@ -252,7 +252,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"core-test-types-list-as-strings-in-json": None,
"providers-test-types-list-as-strings-in-json": None,
"individual-providers-test-types-list-as-strings-in-json":
None,
- "needs-mypy": "false",
+ "run-mypy": "false",
"mypy-checks": "[]",
},
id="No tests on simple change",
@@ -278,15 +278,15 @@ def assert_outputs_are_printed(expected_outputs:
dict[str, str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"docs-build": "true",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
"upgrade-to-newer-dependencies": "false",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
"providers-test-types-list-as-strings-in-json":
ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
"individual-providers-test-types-list-as-strings-in-json":
LIST_OF_ALL_PROVIDER_TESTS_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="All tests should be run when API file changed",
@@ -302,8 +302,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"run-amazon-tests": "true",
"docs-build": "true",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
@@ -311,7 +311,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
"providers-test-types-list-as-strings-in-json":
ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
"individual-providers-test-types-list-as-strings-in-json":
LIST_OF_ALL_PROVIDER_TESTS_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="All tests should be run when fastapi files change",
@@ -327,8 +327,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"run-amazon-tests": "true",
"docs-build": "true",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
@@ -336,7 +336,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
"providers-test-types-list-as-strings-in-json":
ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
"individual-providers-test-types-list-as-strings-in-json":
LIST_OF_ALL_PROVIDER_TESTS_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="All tests should run when API test files change",
@@ -353,8 +353,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "true",
+ "run-helm-tests": "false",
+ "run-unit-tests": "true",
"run-amazon-tests": "false",
"docs-build": "true",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_IF_NO_PROVIDERS_UI_AND_HELM_TESTS,
@@ -364,7 +364,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
),
"providers-test-types-list-as-strings-in-json": None,
"individual-providers-test-types-list-as-strings-in-json":
None,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-airflow-core']",
"skip-providers-tests": "true",
},
@@ -385,8 +385,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"run-amazon-tests": "true",
"docs-build": "true",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
@@ -394,7 +394,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
"providers-test-types-list-as-strings-in-json":
ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
"individual-providers-test-types-list-as-strings-in-json":
LIST_OF_ALL_PROVIDER_TESTS_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="All tests and docs should run on API change",
@@ -411,8 +411,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "true",
+ "run-helm-tests": "false",
+ "run-unit-tests": "true",
"run-amazon-tests": "false",
"docs-build": "true",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
@@ -438,7 +438,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
}
]
),
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-providers']",
},
id="Selected Providers and docs should run",
@@ -455,8 +455,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "true",
+ "run-helm-tests": "false",
+ "run-unit-tests": "true",
"run-amazon-tests": "false",
"docs-build": "true",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
@@ -482,7 +482,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
}
]
),
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-providers']",
"skip-providers-tests": "false",
},
@@ -503,8 +503,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "true",
+ "run-helm-tests": "false",
+ "run-unit-tests": "true",
"run-amazon-tests": "false",
"docs-build": "true",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
@@ -530,7 +530,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
}
]
),
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-providers']",
"skip-providers-tests": "false",
},
@@ -551,8 +551,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "true",
+ "run-helm-tests": "false",
+ "run-unit-tests": "true",
"run-amazon-tests": "false",
"docs-build": "true",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
@@ -578,7 +578,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
}
]
),
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-providers']",
"skip-providers-tests": "false",
},
@@ -597,8 +597,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "false",
+ "run-helm-tests": "false",
+ "run-unit-tests": "false",
"run-amazon-tests": "false",
"docs-build": "true",
"skip-prek-hooks": ALL_SKIPPED_COMMITS_ON_NO_CI_IMAGE,
@@ -606,7 +606,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"upgrade-to-newer-dependencies": "false",
"core-test-types-list-as-strings-in-json": None,
"providers-test-types-list-as-strings-in-json": None,
- "needs-mypy": "false",
+ "run-mypy": "false",
"mypy-checks": "[]",
},
id="Only docs builds should run - no tests needed",
@@ -622,10 +622,10 @@ def assert_outputs_are_printed(expected_outputs:
dict[str, str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-api-tests": "false",
- "needs-helm-tests": "false",
+ "run-api-tests": "false",
+ "run-helm-tests": "false",
"run-kubernetes-tests": "false",
- "run-tests": "true",
+ "run-unit-tests": "true",
"run-task-sdk-tests": "true",
"docs-build": "true",
"full-tests-needed": "false",
@@ -634,7 +634,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"upgrade-to-newer-dependencies": "false",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
"providers-test-types-list-as-strings-in-json":
ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-providers', 'mypy-task-sdk']",
},
id="Task SDK source file changed - Task SDK, Core and provider
tests should run",
@@ -655,8 +655,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"run-amazon-tests": "true",
"docs-build": "true",
"skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_UI,
@@ -675,7 +675,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
}
]
),
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-providers']",
},
id="Helm tests, providers (both upstream and downstream),"
@@ -697,8 +697,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"run-amazon-tests": "true",
"docs-build": "true",
"skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_UI,
@@ -730,7 +730,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
{"description": "http", "test_types":
"Providers[http]"},
]
),
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-providers']",
},
id="Helm tests, http and all relevant providers, kubernetes
tests and "
@@ -752,8 +752,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"run-amazon-tests": "false",
"docs-build": "true",
"skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_UI,
@@ -785,8 +785,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"docs-build": "true",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_IF_NO_PROVIDERS_AND_UI,
"run-amazon-tests": "false",
@@ -796,7 +796,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
[{"description": "Always", "test_types": "Always"}]
),
"providers-test-types-list-as-strings-in-json": None,
- "needs-mypy": "false",
+ "run-mypy": "false",
"mypy-checks": "[]",
},
id="Docs should run even if unimportant files were added and
prod image "
@@ -814,8 +814,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
ALL_PYTHON_VERSIONS_AS_STRING,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"run-amazon-tests": "true",
"docs-build": "true",
"full-tests-needed": "true",
@@ -823,7 +823,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"upgrade-to-newer-dependencies": "true",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
"providers-test-types-list-as-strings-in-json":
ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="Everything should run and upgrading to newer requirements
as dependencies change",
@@ -841,8 +841,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "true",
+ "run-helm-tests": "false",
+ "run-unit-tests": "true",
"docs-build": "true",
# no python files changed so flynt should not run
"skip-prek-hooks": "flynt," +
ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
@@ -863,7 +863,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
}
]
),
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-providers']",
},
id="Providers tests run including amazon tests if only amazon
provider.yaml files changed",
@@ -878,8 +878,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "true",
+ "run-helm-tests": "false",
+ "run-unit-tests": "true",
"run-amazon-tests": "false",
"docs-build": "true",
"skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
@@ -891,7 +891,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"providers-test-types-list-as-strings-in-json": json.dumps(
[{"description": "airbyte", "test_types":
"Providers[airbyte]"}]
),
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-providers']",
},
id="Providers tests run without amazon tests if no amazon file
changed",
@@ -908,8 +908,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "true",
+ "run-helm-tests": "false",
+ "run-unit-tests": "true",
"run-amazon-tests": "true",
"docs-build": "true",
"skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
@@ -929,7 +929,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
}
]
),
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-providers']",
},
id="Providers tests run including amazon tests if amazon provider
files changed",
@@ -948,8 +948,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "true",
+ "run-helm-tests": "false",
+ "run-unit-tests": "true",
"run-amazon-tests": "false",
"docs-build": "true",
"run-kubernetes-tests": "false",
@@ -966,7 +966,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
}
]
),
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-airflow-core', 'mypy-providers']",
},
id="Only Always and common providers tests should run when only
common.io and tests/always changed",
@@ -980,8 +980,8 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"run-amazon-tests": "true",
"docs-build": "true",
"run-kubernetes-tests": "true",
@@ -989,7 +989,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str,
str], stderr: str):
"upgrade-to-newer-dependencies": "false",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
"providers-test-types-list-as-strings-in-json":
ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="All tests to run when standard operator changed",
@@ -1005,8 +1005,8 @@ def assert_outputs_are_printed(expected_outputs:
dict[str, str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"run-amazon-tests": "true",
"docs-build": "true",
"full-tests-needed": "true",
@@ -1014,7 +1014,7 @@ def assert_outputs_are_printed(expected_outputs:
dict[str, str], stderr: str):
"upgrade-to-newer-dependencies": "false",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
"providers-test-types-list-as-strings-in-json":
ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="All tests should be run when tests/utils/ change",
@@ -1031,8 +1031,8 @@ def assert_outputs_are_printed(expected_outputs:
dict[str, str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"run-amazon-tests": "true",
"docs-build": "true",
"full-tests-needed": "true",
@@ -1043,7 +1043,7 @@ def assert_outputs_are_printed(expected_outputs:
dict[str, str], stderr: str):
"testable-core-integrations": "['kerberos', 'redis']",
"testable-providers-integrations": "['celery',
'cassandra', 'drill', 'tinkerpop', 'kafka', "
"'mongo', 'pinot', 'qdrant', 'redis', 'trino', 'ydb']",
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="All tests should be run when devel-common/ change",
@@ -1060,17 +1060,18 @@ def assert_outputs_are_printed(expected_outputs:
dict[str, str], stderr: str):
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "false",
- "run-amazon-tests": "false",
"docs-build": "false",
"full-tests-needed": "false",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_IF_NO_CODE_PROVIDERS_AND_HELM_TESTS,
"upgrade-to-newer-dependencies": "false",
- "needs-mypy": "false",
+ "run-mypy": "false",
"mypy-checks": "[]",
+ "run-helm-tests": "false",
"run-ui-tests": "true",
- "only-new-ui-files": "true",
+ "run-unit-tests": "false",
+ "run-go-sdk-tests": "false",
+ "run-airflow-ctl-tests": "false",
+ "run-amazon-tests": "false",
},
id="Run only ui tests for PR with new UI only changes.",
)
@@ -1084,8 +1085,8 @@ def assert_outputs_are_printed(expected_outputs:
dict[str, str], stderr: str):
"python-versions": f"['{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}']",
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
- "needs-helm-tests": "false",
- "run-tests": "false",
+ "run-helm-tests": "false",
+ "run-unit-tests": "false",
"run-amazon-tests": "false",
"docs-build": "true",
"skip-prek-hooks": ALL_SKIPPED_COMMITS_ON_NO_CI_IMAGE,
@@ -1093,7 +1094,7 @@ def assert_outputs_are_printed(expected_outputs:
dict[str, str], stderr: str):
"core-test-types-list-as-strings-in-json": None,
"providers-test-types-list-as-strings-in-json": None,
"individual-providers-test-types-list-as-strings-in-json":
None,
- "needs-mypy": "false",
+ "run-mypy": "false",
"mypy-checks": "[]",
},
id="Run docs-build for RELEASE_NOTES.rst",
@@ -1107,8 +1108,8 @@ def assert_outputs_are_printed(expected_outputs:
dict[str, str], stderr: str):
"python-versions": f"['{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}']",
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"run-amazon-tests": "false",
"docs-build": "true",
"skip-prek-hooks":
"check-provider-yaml-valid,flynt,identity,mypy-airflow-core,mypy-airflow-ctl,mypy-dev,mypy-devel-common,mypy-providers,mypy-task-sdk,ts-compile-lint-simple-auth-manager-ui,ts-compile-lint-ui",
@@ -1116,7 +1117,7 @@ def assert_outputs_are_printed(expected_outputs:
dict[str, str], stderr: str):
"core-test-types-list-as-strings-in-json": None,
"providers-test-types-list-as-strings-in-json": None,
"individual-providers-test-types-list-as-strings-in-json":
None,
- "needs-mypy": "false",
+ "run-mypy": "false",
"mypy-checks": "[]",
},
id="Run docs-build for chart/RELEASE_NOTES.rst",
@@ -1130,8 +1131,8 @@ def assert_outputs_are_printed(expected_outputs:
dict[str, str], stderr: str):
"python-versions": f"['{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}']",
"python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
- "needs-helm-tests": "false",
- "run-tests": "false",
+ "run-helm-tests": "false",
+ "run-unit-tests": "false",
"run-amazon-tests": "false",
"docs-build": "true",
"skip-prek-hooks": ALL_SKIPPED_COMMITS_ON_NO_CI_IMAGE,
@@ -1139,7 +1140,7 @@ def assert_outputs_are_printed(expected_outputs:
dict[str, str], stderr: str):
"core-test-types-list-as-strings-in-json": None,
"providers-test-types-list-as-strings-in-json": None,
"individual-providers-test-types-list-as-strings-in-json":
None,
- "needs-mypy": "false",
+ "run-mypy": "false",
"mypy-checks": "[]",
},
id="Run docs-build for SECURITY.md",
@@ -1153,7 +1154,7 @@ def assert_outputs_are_printed(expected_outputs:
dict[str, str], stderr: str):
pytest.param(
("devel-common/pyproject.toml",),
{
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="All mypy checks should run when
devel-common/pyproject.toml changes",
@@ -1317,7 +1318,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"kubernetes-combos-list-as-string":
f"{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}-{DEFAULT_KUBERNETES_VERSION}",
"ci-image-build": "true",
"prod-image-build": "true",
- "run-tests": "true",
+ "run-unit-tests": "true",
"skip-providers-tests": "false",
"docs-build": "true",
"docs-list-as-string": ALL_DOCS_SELECTED_FOR_BUILD,
@@ -1326,7 +1327,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"upgrade-to-newer-dependencies": "false",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
"providers-test-types-list-as-strings-in-json":
ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="Everything should run including all providers when git
provider is changed"
@@ -1352,7 +1353,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"kubernetes-combos-list-as-string":
ZIP_PYTHON_AND_KUBERNETES_VERSIONS_AS_STRING,
"ci-image-build": "true",
"prod-image-build": "true",
- "run-tests": "true",
+ "run-unit-tests": "true",
"skip-providers-tests": "false",
"docs-build": "true",
"docs-list-as-string": ALL_DOCS_SELECTED_FOR_BUILD,
@@ -1361,7 +1362,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"upgrade-to-newer-dependencies": "false",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
"providers-test-types-list-as-strings-in-json":
ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="Everything should run including all providers when full
tests are needed, "
@@ -1387,7 +1388,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"kubernetes-combos-list-as-string":
f"{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}-{DEFAULT_KUBERNETES_VERSION}",
"ci-image-build": "true",
"prod-image-build": "true",
- "run-tests": "true",
+ "run-unit-tests": "true",
"skip-providers-tests": "false",
"docs-build": "true",
"docs-list-as-string": ALL_DOCS_SELECTED_FOR_BUILD,
@@ -1396,7 +1397,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"upgrade-to-newer-dependencies": "false",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
"providers-test-types-list-as-strings-in-json":
ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="Everything should run including all providers when full
tests are needed "
@@ -1422,7 +1423,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"kubernetes-combos-list-as-string":
f"{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}-{DEFAULT_KUBERNETES_VERSION}",
"ci-image-build": "true",
"prod-image-build": "true",
- "run-tests": "true",
+ "run-unit-tests": "true",
"skip-providers-tests": "false",
"docs-build": "true",
"docs-list-as-string": ALL_DOCS_SELECTED_FOR_BUILD,
@@ -1431,7 +1432,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"upgrade-to-newer-dependencies": "false",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
"providers-test-types-list-as-strings-in-json":
ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="Everything should run including all providers when full
tests are needed "
@@ -1458,7 +1459,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"kubernetes-combos-list-as-string":
f"{ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS[-1]}-{ALLOWED_KUBERNETES_VERSIONS[-1]}",
"ci-image-build": "true",
"prod-image-build": "true",
- "run-tests": "true",
+ "run-unit-tests": "true",
"skip-providers-tests": "false",
"docs-build": "true",
"docs-list-as-string": ALL_DOCS_SELECTED_FOR_BUILD,
@@ -1467,7 +1468,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"upgrade-to-newer-dependencies": "false",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
"providers-test-types-list-as-strings-in-json":
ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="Everything should run including all providers when full
tests are needed "
@@ -1494,7 +1495,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"kubernetes-combos-list-as-string":
f"{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}-{DEFAULT_KUBERNETES_VERSION}",
"ci-image-build": "true",
"prod-image-build": "true",
- "run-tests": "true",
+ "run-unit-tests": "true",
"skip-providers-tests": "false",
"docs-build": "true",
"docs-list-as-string": ALL_DOCS_SELECTED_FOR_BUILD,
@@ -1503,7 +1504,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"upgrade-to-newer-dependencies": "false",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
"providers-test-types-list-as-strings-in-json":
ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="Everything should run including full providers when full "
@@ -1527,7 +1528,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"kubernetes-combos-list-as-string":
f"{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}-{DEFAULT_KUBERNETES_VERSION}",
"ci-image-build": "true",
"prod-image-build": "true",
- "run-tests": "true",
+ "run-unit-tests": "true",
"skip-providers-tests": "false",
"docs-build": "true",
"docs-list-as-string": ALL_DOCS_SELECTED_FOR_BUILD,
@@ -1537,7 +1538,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
"providers-test-types-list-as-strings-in-json":
ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
"individual-providers-test-types-list-as-strings-in-json":
LIST_OF_ALL_PROVIDER_TESTS_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="Everything should run including full providers when "
@@ -1560,7 +1561,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"all-versions": "false",
"ci-image-build": "true",
"prod-image-build": "true",
- "run-tests": "true",
+ "run-unit-tests": "true",
"skip-providers-tests": "true",
"docs-build": "true",
"docs-list-as-string": "apache-airflow docker-stack",
@@ -1568,7 +1569,7 @@ def test_full_test_needed_when_scripts_changes(files:
tuple[str, ...], expected_
"skip-prek-hooks": All_SKIPPED_COMMITS_IF_NON_MAIN_BRANCH,
"upgrade-to-newer-dependencies": "false",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS_EXCEPT_PROVIDERS,
},
id="Everything should run except Providers and lint prek "
@@ -1603,15 +1604,15 @@ def test_expected_output_full_tests_needed(
"all-python-versions":
f"['{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}']",
"all-python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "false",
+ "run-helm-tests": "false",
+ "run-unit-tests": "false",
"skip-providers-tests": "true",
"docs-build": "false",
"docs-list-as-string": None,
"full-tests-needed": "false",
"upgrade-to-newer-dependencies": "false",
"core-test-types-list-as-strings-in-json": None,
- "needs-mypy": "false",
+ "run-mypy": "false",
"mypy-checks": "[]",
},
id="Nothing should run if only non-important files changed",
@@ -1624,10 +1625,10 @@ def test_expected_output_full_tests_needed(
{
"all-python-versions":
f"['{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}']",
"all-python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
- "needs-helm-tests": "false",
+ "run-helm-tests": "false",
"ci-image-build": "true",
"prod-image-build": "true",
- "run-tests": "true",
+ "run-unit-tests": "true",
"skip-providers-tests": "true",
"docs-build": "true",
"docs-list-as-string": "apache-airflow docker-stack",
@@ -1637,7 +1638,7 @@ def test_expected_output_full_tests_needed(
"core-test-types-list-as-strings-in-json": json.dumps(
[{"description": "Always", "test_types": "Always"}]
),
- "needs-mypy": "false",
+ "run-mypy": "false",
"mypy-checks": "[]",
},
id="No Helm tests, No providers no lint charts, should run if "
@@ -1654,8 +1655,8 @@ def test_expected_output_full_tests_needed(
"all-python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "false",
- "run-tests": "true",
+ "run-helm-tests": "false",
+ "run-unit-tests": "true",
"skip-providers-tests": "true",
"docs-build": "true",
"docs-list-as-string": "apache-airflow docker-stack",
@@ -1665,7 +1666,7 @@ def test_expected_output_full_tests_needed(
"core-test-types-list-as-strings-in-json": json.dumps(
[{"description": "Always...CLI", "test_types": "Always
CLI"}]
),
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-airflow-core']",
},
id="Only CLI tests and Kubernetes tests should run if cli/chart
files changed in non-main branch",
@@ -1680,8 +1681,8 @@ def test_expected_output_full_tests_needed(
"all-python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "true",
+ "run-helm-tests": "false",
+ "run-unit-tests": "true",
"skip-providers-tests": "true",
"docs-build": "true",
"docs-list-as-string": "apache-airflow docker-stack",
@@ -1689,7 +1690,7 @@ def test_expected_output_full_tests_needed(
"run-kubernetes-tests": "false",
"upgrade-to-newer-dependencies": "false",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-airflow-core']",
},
id="All tests except Providers and helm lint prek "
@@ -1724,14 +1725,14 @@ def test_expected_output_pull_request_v2_7(
"all-python-versions-list-as-string":
ALL_PYTHON_VERSIONS_AS_STRING,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"docs-build": "true",
"docs-list-as-string": ALL_DOCS_SELECTED_FOR_BUILD,
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
"upgrade-to-newer-dependencies": "true",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="All tests run on push even if unimportant file changed",
@@ -1745,14 +1746,14 @@ def test_expected_output_pull_request_v2_7(
"all-python-versions-list-as-string":
ALL_PYTHON_VERSIONS_AS_STRING,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "false",
- "run-tests": "true",
+ "run-helm-tests": "false",
+ "run-unit-tests": "true",
"docs-build": "true",
"skip-prek-hooks": All_SKIPPED_COMMITS_IF_NON_MAIN_BRANCH,
"docs-list-as-string": "apache-airflow docker-stack",
"upgrade-to-newer-dependencies": "true",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS_EXCEPT_PROVIDERS,
},
id="All tests except Providers and Helm run on push"
@@ -1768,14 +1769,14 @@ def test_expected_output_pull_request_v2_7(
"all-python-versions-list-as-string":
ALL_PYTHON_VERSIONS_AS_STRING,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"docs-build": "true",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
"docs-list-as-string": ALL_DOCS_SELECTED_FOR_BUILD,
"upgrade-to-newer-dependencies": "true",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="All tests run on push if core file changed",
@@ -1808,15 +1809,15 @@ def test_expected_output_push(
"all-python-versions":
f"['{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}']",
"all-python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "false",
+ "run-helm-tests": "false",
+ "run-unit-tests": "false",
"skip-providers-tests": "true",
"docs-build": "false",
"docs-list-as-string": None,
"upgrade-to-newer-dependencies": "false",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_IF_NOT_IMPORTANT_FILES_CHANGED,
"core-test-types-list-as-strings-in-json": None,
- "needs-mypy": "false",
+ "run-mypy": "false",
"mypy-checks": "[]",
},
id="Nothing should run if only non-important files changed",
@@ -1829,8 +1830,8 @@ def test_expected_output_push(
"all-python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "true",
+ "run-helm-tests": "false",
+ "run-unit-tests": "true",
"skip-providers-tests": "true",
"docs-build": "true",
"docs-list-as-string": ALL_DOCS_SELECTED_FOR_BUILD,
@@ -1839,7 +1840,7 @@ def test_expected_output_push(
"core-test-types-list-as-strings-in-json": json.dumps(
[{"description": "Always", "test_types": "Always"}]
),
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-airflow-core']",
},
id="Only Always and docs build should run if only system tests
changed",
@@ -1859,8 +1860,8 @@ def test_expected_output_push(
"all-python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"skip-providers-tests": "false",
"docs-build": "true",
"docs-list-as-string": "apache-airflow helm-chart amazon
apache.beam apache.cassandra "
@@ -1885,7 +1886,7 @@ def test_expected_output_push(
}
]
),
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-airflow-core', 'mypy-providers']",
},
id="CLI tests and Google-related provider tests should run if
cli/chart files changed but "
@@ -1898,8 +1899,8 @@ def test_expected_output_push(
"all-python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "true",
+ "run-helm-tests": "false",
+ "run-unit-tests": "true",
"skip-providers-tests": "true",
"docs-build": "true",
"docs-list-as-string": "apache-airflow",
@@ -1907,7 +1908,7 @@ def test_expected_output_push(
"run-kubernetes-tests": "false",
"upgrade-to-newer-dependencies": "false",
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-airflow-core']",
},
id="Tests for all airflow core types except providers should run
if model file changed",
@@ -1919,15 +1920,15 @@ def test_expected_output_push(
"all-python-versions":
f"['{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}']",
"all-python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"skip-providers-tests": "false",
"docs-build": "true",
"docs-list-as-string": "",
"upgrade-to-newer-dependencies": "false",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
id="pre commit ts-compile-format-lint should not be ignored if
openapi spec changed.",
@@ -1947,8 +1948,8 @@ def test_expected_output_push(
"all-python-versions-list-as-string":
DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
- "run-tests": "true",
+ "run-helm-tests": "false",
+ "run-unit-tests": "true",
"skip-providers-tests": "false",
"docs-build": "true",
"docs-list-as-string": "apache-airflow task-sdk amazon
common.compat common.io common.sql "
@@ -1968,7 +1969,7 @@ def test_expected_output_push(
}
]
),
- "needs-mypy": "false",
+ "run-mypy": "false",
"mypy-checks": "[]",
},
id="Trigger openlineage and related providers tests when Assets
files changed",
@@ -2013,15 +2014,15 @@ def
test_no_commit_provided_trigger_full_build_for_any_event_type(github_event):
"all-python-versions-list-as-string":
ALL_PYTHON_VERSIONS_AS_STRING,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"docs-build": "true",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
"upgrade-to-newer-dependencies": (
"true" if github_event in [GithubEvents.PUSH,
GithubEvents.SCHEDULE] else "false"
),
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
str(stderr),
@@ -2052,15 +2053,15 @@ def
test_files_provided_trigger_full_build_for_any_event_type(github_event):
"all-python-versions-list-as-string":
ALL_PYTHON_VERSIONS_AS_STRING,
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
- "run-tests": "true",
+ "run-helm-tests": "true",
+ "run-unit-tests": "true",
"docs-build": "true",
"skip-prek-hooks":
ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
"upgrade-to-newer-dependencies": (
"true" if github_event in [GithubEvents.PUSH,
GithubEvents.SCHEDULE] else "false"
),
"core-test-types-list-as-strings-in-json":
ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
str(stderr),
@@ -2236,7 +2237,7 @@ def test_docs_filter(files: tuple[str, ...],
expected_outputs: dict[str, str]):
{
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "true",
+ "run-helm-tests": "true",
},
id="Only helm test files changed",
)
@@ -2261,7 +2262,7 @@ def test_helm_tests_trigger_ci_build(files: tuple[str,
...], expected_outputs: d
{
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
+ "run-helm-tests": "false",
},
id="Amazon provider.yaml",
),
@@ -2270,7 +2271,7 @@ def test_helm_tests_trigger_ci_build(files: tuple[str,
...], expected_outputs: d
{
"ci-image-build": "true",
"prod-image-build": "false",
- "needs-helm-tests": "false",
+ "run-helm-tests": "false",
},
id="Amazon pyproject.toml",
),
@@ -2279,7 +2280,7 @@ def test_helm_tests_trigger_ci_build(files: tuple[str,
...], expected_outputs: d
{
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "false",
+ "run-helm-tests": "false",
},
id="CNCF Kubernetes provider.yaml",
),
@@ -2288,7 +2289,7 @@ def test_helm_tests_trigger_ci_build(files: tuple[str,
...], expected_outputs: d
{
"ci-image-build": "true",
"prod-image-build": "true",
- "needs-helm-tests": "false",
+ "run-helm-tests": "false",
},
id="CNCF Kubernetes pyproject.toml",
),
@@ -2374,7 +2375,7 @@ def test_provider_compatibility_checks(labels: tuple[str,
...], expected_outputs
pytest.param(
("README.md",),
{
- "needs-mypy": "false",
+ "run-mypy": "false",
"mypy-checks": "[]",
},
"main",
@@ -2384,7 +2385,7 @@ def test_provider_compatibility_checks(labels: tuple[str,
...], expected_outputs
pytest.param(
("airflow-core/src/airflow/cli/file.py",),
{
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-airflow-core']",
},
"main",
@@ -2394,7 +2395,7 @@ def test_provider_compatibility_checks(labels: tuple[str,
...], expected_outputs
pytest.param(
("airflow-core/src/airflow/models/file.py",),
{
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-airflow-core']",
},
"main",
@@ -2404,7 +2405,7 @@ def test_provider_compatibility_checks(labels: tuple[str,
...], expected_outputs
pytest.param(
("task-sdk/src/airflow/sdk/a_file.py",),
{
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": "['mypy-providers', 'mypy-task-sdk']",
},
"main",
@@ -2414,7 +2415,7 @@ def test_provider_compatibility_checks(labels: tuple[str,
...], expected_outputs
pytest.param(
("dev/a_package/a_file.py",),
{
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
"main",
@@ -2424,7 +2425,7 @@ def test_provider_compatibility_checks(labels: tuple[str,
...], expected_outputs
pytest.param(
("readme.md",),
{
- "needs-mypy": "true",
+ "run-mypy": "true",
"mypy-checks": ALL_MYPY_CHECKS,
},
"main",