Skip to content

Commit 28e7213

Browse files
authored
Automate exclusion of providers in lowest-dependency tests (apache#41991)
The "lowest" dependency tests had "hard-coded" exclusion for those providers that were excluded in specific python versions. This change automates it: * selective checks produce dictionary python -> excluded versions * the dictionary (as string) is passed to unit tests in actions * the dictionary (as string) is passed to breeze container as EXCLUDED_PROVIDERS variable * "is_provider_excluded.py" checks if the provider is excluded and exits with success if so Related: apache#41555
1 parent 0429bf4 commit 28e7213

25 files changed

+338
-194
lines changed

.github/workflows/ci.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ jobs:
106106
docs-list-as-string: ${{ steps.selective-checks.outputs.docs-list-as-string }}
107107
skip-pre-commits: ${{ steps.selective-checks.outputs.skip-pre-commits }}
108108
providers-compatibility-checks: ${{ steps.selective-checks.outputs.providers-compatibility-checks }}
109+
excluded-providers-as-string: ${{ steps.selective-checks.outputs.excluded-providers-as-string }}
109110
helm-test-packages: ${{ steps.selective-checks.outputs.helm-test-packages }}
110111
debug-resources: ${{ steps.selective-checks.outputs.debug-resources }}
111112
runs-on-as-json-default: ${{ steps.selective-checks.outputs.runs-on-as-json-default }}
@@ -365,6 +366,7 @@ jobs:
365366
image-tag: ${{ needs.build-info.outputs.image-tag }}
366367
python-versions: ${{ needs.build-info.outputs.python-versions }}
367368
backend-versions: ${{ needs.build-info.outputs.postgres-versions }}
369+
excluded-providers-as-string: ${{ needs.build-info.outputs.excluded-providers-as-string }}
368370
excludes: ${{ needs.build-info.outputs.postgres-exclude }}
369371
parallel-test-types-list-as-string: ${{ needs.build-info.outputs.parallel-test-types-list-as-string }}
370372
include-success-outputs: ${{ needs.build-info.outputs.include-success-outputs }}
@@ -389,6 +391,7 @@ jobs:
389391
image-tag: ${{ needs.build-info.outputs.image-tag }}
390392
python-versions: ${{ needs.build-info.outputs.python-versions }}
391393
backend-versions: ${{ needs.build-info.outputs.mysql-versions }}
394+
excluded-providers-as-string: ${{ needs.build-info.outputs.excluded-providers-as-string }}
392395
excludes: ${{ needs.build-info.outputs.mysql-exclude }}
393396
parallel-test-types-list-as-string: ${{ needs.build-info.outputs.parallel-test-types-list-as-string }}
394397
include-success-outputs: ${{ needs.build-info.outputs.include-success-outputs }}
@@ -415,6 +418,7 @@ jobs:
415418
python-versions: ${{ needs.build-info.outputs.python-versions }}
416419
# No versions for sqlite
417420
backend-versions: "['']"
421+
excluded-providers-as-string: ${{ needs.build-info.outputs.excluded-providers-as-string }}
418422
excludes: ${{ needs.build-info.outputs.sqlite-exclude }}
419423
parallel-test-types-list-as-string: ${{ needs.build-info.outputs.parallel-test-types-list-as-string }}
420424
include-success-outputs: ${{ needs.build-info.outputs.include-success-outputs }}
@@ -441,6 +445,7 @@ jobs:
441445
python-versions: ${{ needs.build-info.outputs.python-versions }}
442446
# No versions for non-db
443447
backend-versions: "['']"
448+
excluded-providers-as-string: ${{ needs.build-info.outputs.excluded-providers-as-string }}
444449
excludes: ${{ needs.build-info.outputs.sqlite-exclude }}
445450
parallel-test-types-list-as-string: ${{ needs.build-info.outputs.parallel-test-types-list-as-string }}
446451
include-success-outputs: ${{ needs.build-info.outputs.include-success-outputs }}
@@ -469,6 +474,7 @@ jobs:
469474
default-python-version: ${{ needs.build-info.outputs.default-python-version }}
470475
python-versions: ${{ needs.build-info.outputs.python-versions }}
471476
default-postgres-version: ${{ needs.build-info.outputs.default-postgres-version }}
477+
excluded-providers-as-string: ${{ needs.build-info.outputs.excluded-providers-as-string }}
472478
canary-run: ${{ needs.build-info.outputs.canary-run }}
473479
upgrade-to-newer-dependencies: ${{ needs.build-info.outputs.upgrade-to-newer-dependencies }}
474480
debug-resources: ${{ needs.build-info.outputs.debug-resources }}
@@ -512,6 +518,7 @@ jobs:
512518
image-tag: ${{ needs.build-info.outputs.image-tag }}
513519
python-versions: ${{ needs.build-info.outputs.python-versions }}
514520
backend-versions: "['${{ needs.build-info.outputs.default-postgres-version }}']"
521+
excluded-providers-as-string: ${{ needs.build-info.outputs.excluded-providers-as-string }}
515522
excludes: "[]"
516523
parallel-test-types-list-as-string: ${{ needs.build-info.outputs.separate-test-types-list-as-string }}
517524
include-success-outputs: ${{ needs.build-info.outputs.include-success-outputs }}

.github/workflows/run-unit-tests.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ on: # yamllint disable-line rule:truthy
5353
description: "The list of backend versions (stringified JSON array) to run the tests on."
5454
required: true
5555
type: string
56+
excluded-providers-as-string:
57+
description: "Excluded providers (per Python version) as json string"
58+
required: true
59+
type: string
5660
excludes:
5761
description: "Excluded combos (stringified JSON array of python-version/backend-version dicts)"
5862
required: true
@@ -133,6 +137,7 @@ jobs:
133137
DOWNGRADE_SQLALCHEMY: "${{ inputs.downgrade-sqlalchemy }}"
134138
DOWNGRADE_PENDULUM: "${{ inputs.downgrade-pendulum }}"
135139
ENABLE_COVERAGE: "${{ inputs.run-coverage }}"
140+
EXCLUDED_PROVIDERS: "${{ inputs.excluded-providers-as-string }}"
136141
FORCE_LOWEST_DEPENDENCIES: "${{ inputs.force-lowest-dependencies }}"
137142
GITHUB_REPOSITORY: ${{ github.repository }}
138143
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/special-tests.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ on: # yamllint disable-line rule:truthy
4040
description: "Which version of python should be used by default"
4141
required: true
4242
type: string
43+
excluded-providers-as-string:
44+
description: "Excluded providers (per Python version) as json string"
45+
required: true
46+
type: string
4347
python-versions:
4448
description: "The list of python versions (stringified JSON array) to run the tests on."
4549
required: true
@@ -77,6 +81,7 @@ jobs:
7781
image-tag: ${{ inputs.image-tag }}
7882
python-versions: "['${{ inputs.default-python-version }}']"
7983
backend-versions: "['${{ inputs.default-postgres-version }}']"
84+
excluded-providers-as-string: ${{ inputs.excluded-providers-as-string }}
8085
excludes: "[]"
8186
parallel-test-types-list-as-string: ${{ inputs.parallel-test-types-list-as-string }}
8287
include-success-outputs: ${{ needs.build-info.outputs.include-success-outputs }}
@@ -99,6 +104,7 @@ jobs:
99104
image-tag: ${{ inputs.image-tag }}
100105
python-versions: "['${{ inputs.default-python-version }}']"
101106
backend-versions: "['${{ inputs.default-postgres-version }}']"
107+
excluded-providers-as-string: ${{ inputs.excluded-providers-as-string }}
102108
excludes: "[]"
103109
parallel-test-types-list-as-string: ${{ inputs.parallel-test-types-list-as-string }}
104110
include-success-outputs: ${{ needs.build-info.outputs.include-success-outputs }}
@@ -121,6 +127,7 @@ jobs:
121127
image-tag: ${{ inputs.image-tag }}
122128
python-versions: "['${{ inputs.default-python-version }}']"
123129
backend-versions: "['${{ inputs.default-postgres-version }}']"
130+
excluded-providers-as-string: ${{ inputs.excluded-providers-as-string }}
124131
excludes: "[]"
125132
parallel-test-types-list-as-string: ${{ inputs.parallel-test-types-list-as-string }}
126133
include-success-outputs: ${{ needs.build-info.outputs.include-success-outputs }}
@@ -143,6 +150,7 @@ jobs:
143150
image-tag: ${{ inputs.image-tag }}
144151
python-versions: "['${{ inputs.default-python-version }}']"
145152
backend-versions: "['${{ inputs.default-postgres-version }}']"
153+
excluded-providers-as-string: ${{ inputs.excluded-providers-as-string }}
146154
excludes: "[]"
147155
parallel-test-types-list-as-string: ${{ inputs.parallel-test-types-list-as-string }}
148156
include-success-outputs: ${{ needs.build-info.outputs.include-success-outputs }}
@@ -164,6 +172,7 @@ jobs:
164172
image-tag: ${{ inputs.image-tag }}
165173
python-versions: "['${{ inputs.default-python-version }}']"
166174
backend-versions: "['${{ inputs.default-postgres-version }}']"
175+
excluded-providers-as-string: ${{ inputs.excluded-providers-as-string }}
167176
excludes: "[]"
168177
parallel-test-types-list-as-string: ${{ inputs.parallel-test-types-list-as-string }}
169178
include-success-outputs: ${{ needs.build-info.outputs.include-success-outputs }}
@@ -185,6 +194,7 @@ jobs:
185194
image-tag: ${{ inputs.image-tag }}
186195
python-versions: "['${{ inputs.default-python-version }}']"
187196
backend-versions: "['${{ inputs.default-postgres-version }}']"
197+
excluded-providers-as-string: ${{ inputs.excluded-providers-as-string }}
188198
excludes: "[]"
189199
parallel-test-types-list-as-string: ${{ inputs.parallel-test-types-list-as-string }}
190200
include-success-outputs: ${{ needs.build-info.outputs.include-success-outputs }}
@@ -206,6 +216,7 @@ jobs:
206216
image-tag: ${{ inputs.image-tag }}
207217
python-versions: "['${{ inputs.default-python-version }}']"
208218
backend-versions: "['${{ inputs.default-postgres-version }}']"
219+
excluded-providers-as-string: ${{ inputs.excluded-providers-as-string }}
209220
excludes: "[]"
210221
parallel-test-types-list-as-string: ${{ inputs.parallel-test-types-list-as-string }}
211222
include-success-outputs: ${{ needs.build-info.outputs.include-success-outputs }}

Dockerfile.ci

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,26 +1114,26 @@ function check_force_lowest_dependencies() {
11141114
if [[ ${FORCE_LOWEST_DEPENDENCIES=} != "true" ]]; then
11151115
return
11161116
fi
1117-
EXTRA=""
1117+
export EXTRA=""
11181118
if [[ ${TEST_TYPE=} =~ Providers\[.*\] ]]; then
11191119
# shellcheck disable=SC2001
1120-
EXTRA=$(echo "[${TEST_TYPE}]" | sed 's/Providers\[\(.*\)\]/\1/')
1120+
EXTRA=$(echo "[${TEST_TYPE}]" | sed 's/Providers\[\(.*\)\]/\1/' | sed 's/\./-/')
1121+
export EXTRA
11211122
echo
11221123
echo "${COLOR_BLUE}Forcing dependencies to lowest versions for provider: ${EXTRA}${COLOR_RESET}"
11231124
echo
1125+
if ! /opt/airflow/scripts/in_container/is_provider_excluded.py; then
1126+
echo
1127+
echo "Skipping ${EXTRA} provider check on Python ${PYTHON_MAJOR_MINOR_VERSION}!"
1128+
echo
1129+
exit 0
1130+
fi
11241131
else
11251132
echo
11261133
echo "${COLOR_BLUE}Forcing dependencies to lowest versions for Airflow.${COLOR_RESET}"
11271134
echo
11281135
fi
11291136
set -x
1130-
# TODO: hard-code explicitly papermill on 3.12 but we should automate it
1131-
if [[ ${EXTRA} == "[papermill]" && ${PYTHON_MAJOR_MINOR_VERSION} == "3.12" ]]; then
1132-
echo
1133-
echo "Skipping papermill check on Python 3.12!"
1134-
echo
1135-
exit 0
1136-
fi
11371137
uv pip install --python "$(which python)" --resolution lowest-direct --upgrade --editable ".${EXTRA}"
11381138
set +x
11391139
}

0 commit comments

Comments
 (0)