Dev-iL opened a new pull request, #73598: URL: https://github.com/apache/airflow/pull/73598
## Summary Provider metadata can currently exclude an entire Python minor, but it cannot express that a provider requires a particular patch release within a minor that Airflow still supports. For example, a dependency may require Python 3.10.1 while Airflow continues to support Python 3.10.0 and later. Using `excluded-python-versions` to represent that requirement excludes all of Python 3.10. In the uv workspace, that can raise the effective workspace floor to the next minor and make the workspace unavailable on the current lowest supported Python version. Leaving the provider dependency unmarked creates the opposite problem: the root package extras can attempt to resolve the provider on Python versions below its actual requirement. This change adds an explicit full-version floor to `provider.yaml` and carries it through provider metadata generation and root-package dependency markers. The floor is limited to a patch release within Airflow core's lowest supported Python minor; a provider that needs a higher minor must wait for core's floor to advance because uv intersects workspace members' `requires-python` constraints. ## Changes - Add the optional `min-python-version` field (`X.Y.Z`) to the provider schema and validate that its minor matches Airflow core's lowest supported Python minor. - Propagate the floor into generated provider distribution metadata and use a `python_full_version` marker for dependencies in the root package extras. Extend the marker check to catch missing or insufficient markers. - Require a contiguous rationale comment directly above each `min-python-version`, `excluded-python-versions`, and `excluded-platforms` key. Document the exception fields and add the missing rationale for Cassandra's Python 3.14 exclusion. - Add tests for floor validation, metadata generation, root marker generation and checking, and rationale enforcement. ## Validation - Breeze package/dependency tests: 97 passed. - Scripts tests: 1,377 passed. - Ruff formatting/checks and `prek run --from-ref upstream/main --stage pre-commit` passed on the complete framework-plus-provider stack. - Negative checks confirmed that malformed floors and floors above the supported minor fail with actionable messages, and that missing root markers or rationale comments are rejected. --- ##### Was generative AI tooling used to co-author this PR? <!-- If generative AI tooling has been used in the process of authoring this PR, please change below checkbox to `[X]` followed by the name of the tool, uncomment the "Generated-by". --> - [x] Yes (please specify the tool below) Generated-by: Codex following [the guidelines](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions) --- * Read the **[Pull Request Guidelines](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#pull-request-guidelines)** for more information. Note: commit author/co-author name and email in commits become permanently public when merged. * For fundamental code changes, an Airflow Improvement Proposal ([AIP](https://cwiki.apache.org/confluence/display/AIRFLOW/Airflow+Improvement+Proposals)) is needed. * When adding dependency, check compliance with the [ASF 3rd Party License Policy](https://www.apache.org/legal/resolved.html#category-x). * For significant user-facing changes create newsfragment: `{pr_number}.significant.rst`, in [airflow-core/newsfragments](https://github.com/apache/airflow/tree/main/airflow-core/newsfragments). You can add this file in a follow-up commit after the PR is created so you know the PR number. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
