This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a change to branch backport-aca2d59-v3-2-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
from 03452dff574 [v3-2-test] Exclude text non-doc files from triggering
full CI test runs (#64584)
add bfaf2346e3a [v3-2-test] Increase Playwright E2E test retries from 2 to
4 in CI (#64604) (#64605)
add 77063e6ec02 [v3-2-test] Fix Gantt view still visible when time range
is outside dagrun window #64147 (#64179) (#64549)
add ebf50d00ac4 [v3-2-test] Retry uv sync lowest-direct resolution in CI
to handle transient failures (#64565) (#64578)
add 3a11f7fe95f Fix TaskInstance crash with non-serialized operators
missing get_weight (#64557) (#64597)
add e64b7e41d72 [v3-2-test] Fix: Restore live stdout logging for
Elasticsearch log forwarding (#64067) (#64592)
add 8d0fb4b34d1 [v3-2-test] Fix serde deserialization of old-format
builtin types in trigger kwargs (#64615) (#64623)
add 0a000c486d3 [v3-2-test] Fix deferred task resume failure when worker
is older than server (#64598) (#64619)
add 68d98747872 [v3-2-test] fix: restore early return in
check_for_write_conflict (#64062) (#64426)
add beee8b693c0 [v3-2-test] Remove false-positive RFC3986 underscore
warning from Connection.get_uri() (#64345) (#64607)
add d1d24163105 [v3-2-test] Run DB check only for core components in prod
entrypoint (#63413) (#64637)
add 959ebd83c13 [v3-2-test] Fix double-serialization issue by unwrapping
serialized kwargs in `encode_trigger` (#64626) (#64642)
add 3840fae2e16 [v3-2-test] Fix ObjectStoragePath NoCredentialsError when
using conn_id with remote stores (#64634) (#64646)
add 531196158fc [v3-2-test] Guard against null trigger in asset watcher
cleanup (#64659) (#64660)
add aca0852fe10 [v3-2-test] add concurrency in update-constrants-on-push
(#64645) (#64671)
add fc4d75d3b3f [v3-2-test] Skip UI E2E tests on derived full tests
needed, canary, and scheduled builds (#64673) (#64675)
add 7bb81e0b298 [v3-2-test] Temporarily upgrade allowlist-check to latest
version (#64713) (#64717)
add 0df386a2c04 Bump the github-actions-updates group with 3 updates
(#64686)
add e83c1d79cd8 [v3-2-test] Simplify ci_image_build and add test coverage
for remote logging e2e (#64697) (#64698)
add 5baee8a5a58 [v3-2-test] Add --frozen to uv run commands in run_tests
and document uv lock behavior (#64699) (#64721)
add a3c52775a2b [v3-2-test] Fix start_date in example DAGs to avoid TZ
conversion overflow (#63882) (#64758)
add 9765bfcac46 i18n: add missing keys and fix Taiwanese Mandarin
terminology
add dd7e2a6b9cf [v3-2-test] Fix OTel metrics lost in forked task processes
(#64703) (#64720)
add 8e24972d781 [v3-2-test] Fix #62414: Remove spurious blank lines in
filtered task log download (#64235) (#64640)
add 7a998637b74 [v3-2-test] [main] Force building CI image on upgrade
important CI environment (#64536) (#64769)
add fd1962fa027 [v3-2-test] CI: Build CI image after Dockerfiles are
updated in breeze ci upgrade (#64777) (#64781)
add b2b3ce26070 [v3-2-test] UI: Filter DagVersionSelect options based on
selected DagRun (#64736) (#64771)
add 9e2bf8110b4 [v3-2-test] fix(ui): correct external link target and add
rel attributes (#64542) (#64772)
add ab94c71d68f [v3-2-test] Allow revent packages when testing RC versions
(#64774) (#64783)
add f08da988969 [v3-2-test] Add --path-to-airflow-svn definitions to
release verification (#64798) (#64805)
add 6888223bfcf CI: Upgrade important CI environment (#64797)
add 2eaed232d59 [v3-2-test] Fix group/extra bug in initialize_virtualenv
(#62230) (#64808)
add ab2b50e0d5b [v3-2-test] Exclude text non-doc files from triggering
full CI test runs (#64584) (#64809)
add 4e06847c2cd [v3-2-test] Run non-provider mypy checks as regular prek
static checks instead of separate CI jobs (#64780) (#64810)
add e137899474e [v3-2-test] Backport #62849: Fix structlog positional
formatting for single-dict arguments (#64773)
add e17bf20066c [v3-2-test] Remove dependabot alarms in airflow core npm
dependencies (#64791)\n(cherry picked from commit
529b49c57e8b776ca49fc180d877457570d53f1c)\n\nCo-authored-by: Jens Scheffler
<[email protected]> (#64811)
add bb30ec69ce9 [v3-2-test] Install rustup and cargo in CI and prod build
images (#64725) (#64729)
add 0d465d48d2b [v3-2-test] fix mypy error due to 1.20.0 upgrade (#64832)
add d736ea7450a [v3-2-test] Allow UI theme config without tokens (CSS-only
or empty fallback) (#64552) (#64852)
add 64ac0919840 [v3-2-test] connections import now returns non-zero exit
code on failure (#64416) (#64449)
add 1514e296e1a [v3-2-test] Fix Gantt view "Error invalid date" on running
DagRun (#64752) (#64853)
add 11db4670712 [v3-2-test] fix(ui): prevent duplicate nav sidebar when
iframe navigates away from auth pages (#63873) (#64854)
add 53df2f2d6b5 [v3-2-test] Move "Free up disk space" step into
prepare_breeze_and_image action (#64872) (#64873)
add 13c1521afbd [v3-2-test] Docs: Add gh pr create example to provider
release instructions (#64865) (#64866)
add f99b279923a [v3-2-test] Fix TypeError in GET /dags/{dag_id}/tasks when
order_by field has None values (#64384) (#64587)
add 1f1581d0e21 [v3-2-test] Fix N+1 query pattern in task instance states
and count endpoints (#60352) (#64695)
add 7f73bb76d78 [v3-2-test] Run `uv lock --upgrade` locally in `breeze ci
upgrade` instead of inside CI image (#64804) (#64806)
add 072fda71a3f [v3-2-test] Docs: Add JWT authentication docs and
strengthen security model (#64760) (#64849)
add 2e9276863c9 [v3-2-test] Update ASF allowlist-check action to latest
version (#64728) (#64733)
add 43c21fa4a0e [v3-2-test] Load hook metadata from YAML without importing
Hook class (#63826) (#64723)
add c1f0e6e421c Merge branch 'v3-2-test' into backport-aca2d59-v3-2-test
No new revisions were added by this update.
Summary of changes:
.github/actions/breeze/action.yml | 2 +-
.github/actions/install-prek/action.yml | 2 +-
.../actions/prepare_breeze_and_image/action.yml | 3 +
.github/instructions/code-review.instructions.md | 2 +-
.github/workflows/additional-ci-image-checks.yml | 8 +-
.github/workflows/asf-allowlist-check.yml | 2 +-
.github/workflows/basic-tests.yml | 2 +-
.github/workflows/ci-amd-arm.yml | 52 +-
.github/workflows/ci-image-checks.yml | 57 -
.github/workflows/codeql-analysis.yml | 6 +-
.github/workflows/k8s-tests.yml | 3 -
.github/workflows/registry-backfill.yml | 2 +-
.github/workflows/registry-tests.yml | 2 +-
.github/workflows/release_dockerhub_image.yml | 2 +-
.github/workflows/test-providers.yml | 6 -
.github/workflows/update-constraints-on-push.yml | 4 +
.pre-commit-config.yaml | 44 +-
AGENTS.md | 34 +-
Dockerfile | 47 +-
Dockerfile.ci | 59 +-
airflow-core/.pre-commit-config.yaml | 25 +-
.../production-deployment.rst | 9 +-
airflow-core/docs/best-practices.rst | 8 +-
airflow-core/docs/configurations-ref.rst | 25 +-
airflow-core/docs/core-concepts/multi-team.rst | 2 +-
airflow-core/docs/howto/customize-ui.rst | 1 +
airflow-core/docs/howto/set-config.rst | 23 +-
.../docs/installation/upgrading_to_airflow3.rst | 2 +-
airflow-core/docs/public-airflow-interface.rst | 7 +-
.../docs/security/jwt_token_authentication.rst | 398 ++++
airflow-core/docs/security/security_model.rst | 493 ++++-
airflow-core/docs/security/workload.rst | 83 +
airflow-core/newsfragments/64067.bugfix.rst | 1 +
airflow-core/newsfragments/64552.improvement.rst | 1 +
.../auth/managers/simple/ui/package.json | 17 +-
.../auth/managers/simple/ui/pnpm-lock.yaml | 635 +++---
.../src/airflow/api_fastapi/common/types.py | 8 +-
.../api_fastapi/core_api/datamodels/ui/config.py | 10 +
.../api_fastapi/core_api/openapi/_private_ui.yaml | 85 +-
.../api_fastapi/core_api/routes/public/tasks.py | 40 +-
.../core_api/services/ui/connections.py | 32 +-
.../execution_api/routes/task_instances.py | 26 +-
.../execution_api/versions/v2026_04_06.py | 28 +
airflow-core/src/airflow/assets/manager.py | 2 +
.../config_templates/airflow_local_settings.py | 66 +-
.../src/airflow/config_templates/config.yml | 10 +-
.../src/airflow/dag_processing/collection.py | 3 +-
.../example_dags/example_inlet_event_extra.py | 4 +-
.../example_dags/example_outlet_event_extra.py | 6 +-
.../src/airflow/executors/local_executor.py | 1 +
airflow-core/src/airflow/models/taskinstance.py | 11 +-
airflow-core/src/airflow/models/trigger.py | 13 +-
airflow-core/src/airflow/models/variable.py | 4 +-
airflow-core/src/airflow/provider.yaml.schema.json | 4 +
airflow-core/src/airflow/provider_info.schema.json | 4 +
airflow-core/src/airflow/providers_manager.py | 55 +-
airflow-core/src/airflow/serialization/encoders.py | 8 +
.../airflow/ui/openapi-gen/requests/schemas.gen.ts | 109 +-
.../airflow/ui/openapi-gen/requests/types.gen.ts | 26 +-
airflow-core/src/airflow/ui/package.json | 7 +-
airflow-core/src/airflow/ui/playwright.config.ts | 2 +-
airflow-core/src/airflow/ui/pnpm-lock.yaml | 601 +++---
.../ui/public/i18n/locales/zh-TW/admin.json | 3 +-
.../ui/public/i18n/locales/zh-TW/assets.json | 2 +-
.../ui/public/i18n/locales/zh-TW/browse.json | 4 +-
.../ui/public/i18n/locales/zh-TW/common.json | 20 +
.../ui/public/i18n/locales/zh-TW/components.json | 4 +-
.../airflow/ui/public/i18n/locales/zh-TW/dag.json | 3 +-
.../airflow/ui/public/i18n/locales/zh-TW/dags.json | 2 +-
.../ui/src/components/DagVersionSelect.test.tsx | 120 ++
.../airflow/ui/src/components/DagVersionSelect.tsx | 23 +-
.../ui/src/layouts/Details/DetailsLayout.tsx | 2 +
.../airflow/ui/src/layouts/Details/Gantt/Gantt.tsx | 8 +-
.../ui/src/layouts/Details/Gantt/utils.test.ts | 261 +++
.../airflow/ui/src/layouts/Details/Gantt/utils.ts | 8 +-
.../Connections/NothingFoundInfo.test.tsx} | 24 +-
.../ui/src/pages/Connections/NothingFoundInfo.tsx | 2 +-
airflow-core/src/airflow/ui/src/pages/Security.tsx | 12 +
.../ui/src/pages/TaskInstance/Logs/Logs.tsx | 5 +-
.../TaskInstance/Logs/logDownloadContent.test.ts | 131 ++
airflow-core/src/airflow/ui/src/theme.ts | 20 +-
.../airflow/utils/log/non_caching_file_handler.py | 2 +-
.../tests/unit/always/test_providers_manager.py | 8 +
.../tests/unit/api_fastapi/common/test_types.py | 31 +-
.../core_api/routes/public/test_task_instances.py | 4 +-
.../core_api/routes/public/test_tasks.py | 16 +-
.../api_fastapi/core_api/routes/ui/test_config.py | 24 +
.../versions/head/test_task_instances.py | 10 +
.../versions/v2026_04_06/test_task_instances.py | 127 ++
.../tests/unit/dag_processing/test_collection.py | 88 +
.../tests/unit/executors/test_local_executor.py | 7 +-
.../tests/unit/models/test_taskinstance.py | 20 +
.../tests/unit/serialization/test_encoders.py | 181 ++
airflow-ctl/.pre-commit-config.yaml | 14 +-
.../airflowctl/ctl/commands/connection_command.py | 4 +-
.../ctl/commands/test_connections_command.py | 3 +-
contributing-docs/07_local_virtualenv.rst | 75 +-
contributing-docs/08_static_code_checks.rst | 64 +-
.../13_airflow_dependencies_and_extras.rst | 11 +-
dev/README_RELEASE_AIRFLOW.md | 4 +-
dev/README_RELEASE_AIRFLOWCTL.md | 2 +-
dev/README_RELEASE_PROVIDERS.md | 17 +
dev/README_RELEASE_PYTHON_CLIENT.md | 2 +-
dev/breeze/doc/ci/02_images.md | 2 +-
dev/breeze/doc/images/output_ci_upgrade.svg | 46 +-
dev/breeze/doc/images/output_ci_upgrade.txt | 2 +-
.../src/airflow_breeze/commands/ci_commands.py | 17 +-
.../airflow_breeze/commands/ci_commands_config.py | 1 -
.../airflow_breeze/commands/developer_commands.py | 8 +
.../airflow_breeze/commands/registry_commands.py | 2 +-
.../commands/release_management_commands.py | 2 +-
dev/breeze/src/airflow_breeze/global_constants.py | 2 +-
dev/breeze/src/airflow_breeze/utils/packages.py | 2 +-
dev/breeze/src/airflow_breeze/utils/run_tests.py | 13 +-
.../src/airflow_breeze/utils/selective_checks.py | 97 +-
dev/breeze/tests/test_packages.py | 4 +-
dev/breeze/tests/test_selective_checks.py | 268 ++-
dev/breeze/uv.lock | 296 +--
.../react_plugin_template/package.json | 14 +-
.../react_plugin_template/pnpm-lock.yaml | 551 ++++-
devel-common/pyproject.toml | 4 +-
.../src/sphinx_exts/docs_build/package_filter.py | 2 +-
docs/spelling_wordlist.txt | 4 +
providers/airbyte/provider.yaml | 1 +
.../airflow/providers/airbyte/get_provider_info.py | 1 +
providers/alibaba/provider.yaml | 4 +
.../airflow/providers/alibaba/get_provider_info.py | 4 +
providers/amazon/provider.yaml | 5 +
.../airflow/providers/amazon/get_provider_info.py | 5 +
providers/apache/cassandra/provider.yaml | 1 +
.../apache/cassandra/get_provider_info.py | 1 +
providers/apache/drill/provider.yaml | 1 +
.../providers/apache/drill/get_provider_info.py | 1 +
providers/apache/druid/provider.yaml | 1 +
.../providers/apache/druid/get_provider_info.py | 1 +
providers/apache/hdfs/provider.yaml | 1 +
.../providers/apache/hdfs/get_provider_info.py | 1 +
providers/apache/hive/provider.yaml | 3 +
.../providers/apache/hive/get_provider_info.py | 3 +
providers/apache/iceberg/provider.yaml | 1 +
.../providers/apache/iceberg/get_provider_info.py | 1 +
providers/apache/impala/provider.yaml | 1 +
.../providers/apache/impala/get_provider_info.py | 1 +
providers/apache/kafka/provider.yaml | 1 +
.../providers/apache/kafka/get_provider_info.py | 1 +
providers/apache/kylin/provider.yaml | 1 +
.../providers/apache/kylin/get_provider_info.py | 1 +
providers/apache/livy/provider.yaml | 1 +
.../providers/apache/livy/get_provider_info.py | 1 +
providers/apache/pig/provider.yaml | 1 +
.../providers/apache/pig/get_provider_info.py | 1 +
providers/apache/pinot/provider.yaml | 2 +
.../providers/apache/pinot/get_provider_info.py | 2 +
providers/apache/spark/provider.yaml | 4 +
.../providers/apache/spark/get_provider_info.py | 4 +
providers/apache/tinkerpop/provider.yaml | 1 +
.../apache/tinkerpop/get_provider_info.py | 1 +
providers/apprise/provider.yaml | 1 +
.../airflow/providers/apprise/get_provider_info.py | 1 +
providers/arangodb/provider.yaml | 1 +
.../providers/arangodb/get_provider_info.py | 1 +
providers/asana/provider.yaml | 1 +
.../airflow/providers/asana/get_provider_info.py | 1 +
providers/atlassian/jira/provider.yaml | 1 +
.../providers/atlassian/jira/get_provider_info.py | 1 +
providers/cloudant/provider.yaml | 1 +
.../providers/cloudant/get_provider_info.py | 1 +
providers/cncf/kubernetes/provider.yaml | 1 +
.../providers/cncf/kubernetes/get_provider_info.py | 1 +
providers/cohere/provider.yaml | 1 +
.../airflow/providers/cohere/get_provider_info.py | 1 +
providers/common/ai/provider.yaml | 5 +
.../providers/common/ai/get_provider_info.py | 5 +
providers/databricks/provider.yaml | 1 +
.../providers/databricks/get_provider_info.py | 1 +
providers/datadog/provider.yaml | 1 +
.../airflow/providers/datadog/get_provider_info.py | 1 +
providers/dbt/cloud/provider.yaml | 1 +
.../providers/dbt/cloud/get_provider_info.py | 1 +
providers/dingding/provider.yaml | 1 +
.../providers/dingding/get_provider_info.py | 1 +
providers/discord/provider.yaml | 1 +
.../airflow/providers/discord/get_provider_info.py | 1 +
providers/docker/provider.yaml | 1 +
.../airflow/providers/docker/get_provider_info.py | 1 +
providers/elasticsearch/provider.yaml | 1 +
.../providers/elasticsearch/get_provider_info.py | 1 +
providers/exasol/provider.yaml | 1 +
.../airflow/providers/exasol/get_provider_info.py | 1 +
providers/facebook/provider.yaml | 1 +
.../providers/facebook/get_provider_info.py | 1 +
providers/ftp/provider.yaml | 1 +
.../src/airflow/providers/ftp/get_provider_info.py | 6 +-
providers/git/provider.yaml | 1 +
.../src/airflow/providers/git/get_provider_info.py | 1 +
providers/github/provider.yaml | 1 +
.../airflow/providers/github/get_provider_info.py | 1 +
providers/google/provider.yaml | 9 +
.../airflow/providers/google/get_provider_info.py | 9 +
providers/grpc/provider.yaml | 1 +
.../airflow/providers/grpc/get_provider_info.py | 1 +
providers/hashicorp/provider.yaml | 1 +
.../providers/hashicorp/get_provider_info.py | 1 +
providers/http/provider.yaml | 1 +
.../airflow/providers/http/get_provider_info.py | 1 +
providers/imap/provider.yaml | 1 +
.../airflow/providers/imap/get_provider_info.py | 6 +-
providers/influxdb/provider.yaml | 1 +
.../providers/influxdb/get_provider_info.py | 1 +
providers/informatica/provider.yaml | 1 +
.../providers/informatica/get_provider_info.py | 1 +
providers/jdbc/provider.yaml | 1 +
.../airflow/providers/jdbc/get_provider_info.py | 1 +
providers/jenkins/provider.yaml | 1 +
.../airflow/providers/jenkins/get_provider_info.py | 1 +
providers/microsoft/azure/provider.yaml | 17 +
.../providers/microsoft/azure/get_provider_info.py | 17 +
.../providers/microsoft/azure/hooks/data_lake.py | 2 +-
providers/microsoft/mssql/provider.yaml | 1 +
.../providers/microsoft/mssql/get_provider_info.py | 1 +
providers/microsoft/psrp/provider.yaml | 1 +
.../providers/microsoft/psrp/get_provider_info.py | 1 +
providers/microsoft/winrm/provider.yaml | 1 +
.../providers/microsoft/winrm/get_provider_info.py | 1 +
providers/mongo/provider.yaml | 1 +
.../airflow/providers/mongo/get_provider_info.py | 1 +
providers/mysql/provider.yaml | 1 +
.../airflow/providers/mysql/get_provider_info.py | 6 +-
providers/neo4j/provider.yaml | 1 +
.../airflow/providers/neo4j/get_provider_info.py | 6 +-
providers/odbc/provider.yaml | 1 +
.../airflow/providers/odbc/get_provider_info.py | 6 +-
providers/openai/provider.yaml | 1 +
.../airflow/providers/openai/get_provider_info.py | 1 +
providers/openfaas/provider.yaml | 1 +
.../providers/openfaas/get_provider_info.py | 1 +
providers/opensearch/provider.yaml | 1 +
.../providers/opensearch/get_provider_info.py | 1 +
providers/opsgenie/provider.yaml | 1 +
.../providers/opsgenie/get_provider_info.py | 1 +
providers/oracle/provider.yaml | 1 +
.../airflow/providers/oracle/get_provider_info.py | 1 +
providers/pagerduty/provider.yaml | 2 +
.../providers/pagerduty/get_provider_info.py | 2 +
providers/papermill/provider.yaml | 1 +
.../providers/papermill/get_provider_info.py | 1 +
providers/pinecone/provider.yaml | 1 +
.../providers/pinecone/get_provider_info.py | 1 +
providers/postgres/provider.yaml | 1 +
.../providers/postgres/get_provider_info.py | 1 +
providers/presto/provider.yaml | 1 +
.../airflow/providers/presto/get_provider_info.py | 1 +
providers/qdrant/provider.yaml | 1 +
.../airflow/providers/qdrant/get_provider_info.py | 1 +
providers/redis/provider.yaml | 1 +
.../airflow/providers/redis/get_provider_info.py | 1 +
providers/salesforce/provider.yaml | 1 +
.../providers/salesforce/get_provider_info.py | 1 +
providers/samba/provider.yaml | 1 +
.../airflow/providers/samba/get_provider_info.py | 1 +
providers/segment/provider.yaml | 1 +
.../airflow/providers/segment/get_provider_info.py | 1 +
providers/sftp/provider.yaml | 1 +
.../airflow/providers/sftp/get_provider_info.py | 1 +
providers/slack/provider.yaml | 2 +
.../airflow/providers/slack/get_provider_info.py | 2 +
providers/smtp/provider.yaml | 1 +
.../airflow/providers/smtp/get_provider_info.py | 1 +
providers/snowflake/provider.yaml | 1 +
.../providers/snowflake/get_provider_info.py | 1 +
providers/sqlite/provider.yaml | 1 +
.../airflow/providers/sqlite/get_provider_info.py | 1 +
providers/ssh/provider.yaml | 1 +
.../src/airflow/providers/ssh/get_provider_info.py | 1 +
providers/standard/provider.yaml | 2 +
.../providers/standard/get_provider_info.py | 2 +
providers/tableau/provider.yaml | 1 +
.../airflow/providers/tableau/get_provider_info.py | 1 +
providers/telegram/provider.yaml | 1 +
.../providers/telegram/get_provider_info.py | 1 +
providers/teradata/provider.yaml | 1 +
.../providers/teradata/get_provider_info.py | 1 +
providers/trino/provider.yaml | 1 +
.../airflow/providers/trino/get_provider_info.py | 1 +
providers/vertica/provider.yaml | 1 +
.../airflow/providers/vertica/get_provider_info.py | 1 +
providers/weaviate/provider.yaml | 1 +
.../providers/weaviate/get_provider_info.py | 1 +
providers/yandex/provider.yaml | 1 +
.../airflow/providers/yandex/get_provider_info.py | 1 +
.../src/airflow/providers/yandex/hooks/yandex.py | 4 +-
providers/ydb/provider.yaml | 1 +
.../src/airflow/providers/ydb/get_provider_info.py | 1 +
providers/zendesk/provider.yaml | 1 +
.../airflow/providers/zendesk/get_provider_info.py | 1 +
pyproject.toml | 2 +-
scripts/ci/prek/check_extra_packages_ref.py | 2 +-
scripts/ci/prek/check_imports_in_providers.py | 2 +-
scripts/ci/prek/check_security_doc_constants.py | 427 ++++
.../prek/check_shared_distributions_structure.py | 2 +-
.../ci/prek/check_shared_distributions_usage.py | 2 +-
scripts/ci/prek/check_version_consistency.py | 2 +-
scripts/ci/prek/mypy_local_folder.py | 223 +++
scripts/ci/prek/ruff_format.py | 2 +-
scripts/ci/prek/update_airflow_pyproject_toml.py | 4 +-
scripts/ci/prek/update_providers_dependencies.py | 2 +-
scripts/docker/entrypoint_ci.sh | 22 +-
scripts/docker/entrypoint_prod.sh | 14 +-
scripts/docker/install_os_dependencies.sh | 30 +
.../in_container/install_airflow_and_providers.py | 8 +-
scripts/tools/initialize_virtualenv.py | 24 +-
scripts/tools/setup_breeze | 2 +-
.../src/airflow_shared/logging/structlog.py | 39 +-
shared/logging/tests/logging/test_structlog.py | 75 +
.../observability/metrics/otel_logger.py | 16 +
.../observability/metrics/test_otel_logger.py | 43 +
.../src/airflow_shared/serialization/__init__.py | 7 +
task-sdk/.pre-commit-config.yaml | 10 +-
task-sdk/src/airflow/sdk/definitions/connection.py | 5 -
task-sdk/src/airflow/sdk/io/path.py | 38 +
task-sdk/src/airflow/sdk/serde/__init__.py | 7 +-
task-sdk/tests/task_sdk/io/test_path.py | 109 +
task-sdk/tests/task_sdk/serde/test_serde.py | 32 +
uv.lock | 2118 ++++++++++----------
324 files changed, 7012 insertions(+), 2485 deletions(-)
create mode 100644 airflow-core/docs/security/jwt_token_authentication.rst
create mode 100644 airflow-core/newsfragments/64067.bugfix.rst
create mode 100644 airflow-core/newsfragments/64552.improvement.rst
create mode 100644
airflow-core/src/airflow/ui/src/components/DagVersionSelect.test.tsx
create mode 100644
airflow-core/src/airflow/ui/src/layouts/Details/Gantt/utils.test.ts
copy airflow-core/src/airflow/ui/src/{utils/ChakraWrapper.test.tsx =>
pages/Connections/NothingFoundInfo.test.tsx} (63%)
create mode 100644
airflow-core/src/airflow/ui/src/pages/TaskInstance/Logs/logDownloadContent.test.ts
create mode 100644 airflow-core/tests/unit/serialization/test_encoders.py
create mode 100755 scripts/ci/prek/check_security_doc_constants.py
create mode 100755 scripts/ci/prek/mypy_local_folder.py