Hey fellow Airflowers, I have cut Airflow 2.6.0rc1. This email is calling a vote on the release, which will last at least 72 hours, from Monday, April 24, 2023 at 8:16 am UTC until Thursday, April 27, 2023 at 8:16 pm UTC <https://www.timeanddate.com/worldclock/fixedtime.html?msg=8&iso=20230427T0816&p1=1440>, and until 3 binding +1 votes have been received.
Consider this my (binding) +1. Airflow 2.6.0rc1 is available at: https://dist.apache.org/repos/dist/dev/airflow/2.6.0rc1/ *apache-airflow-2.6.0-source.tar.gz* is a source release that comes with INSTALL instructions. *apache-airflow-2.6.0.tar.gz* is the binary Python "sdist" release. *apache_airflow-2.6.0-py3-none-any.whl* is the binary Python wheel "binary" release. Public keys are available at: https://dist.apache.org/repos/dist/release/airflow/KEYS Please vote accordingly: [ ] +1 approve [ ] +0 no opinion [ ] -1 disapprove with the reason Only votes from PMC members are binding, but all members of the community are encouraged to test the release and vote with "(non-binding)". The test procedure for PMCs and Contributors who would like to test this RC are described in https://github.com/apache/airflow/blob/main/dev/README_RELEASE_AIRFLOW.md\#verify-the-release-candidate-by-pmcs Please note that the version number excludes the `rcX` string, so it's now simply 2.6.0. This will allow us to rename the artifact without modifying the artifact checksums when we actually release. Release Notes: https://github.com/apache/airflow/blob/2.6.0rc1/RELEASE_NOTES.rst Changes since 2.5.3: *New Features* - Skip PythonVirtualenvOperator task when it returns a provided exit code (#30690) - rename skip_exit_code to skip_on_exit_code and allow providing multiple codes (#30692) - Add skip_on_exit_code also to ExternalPythonOperator (#30738) - Add ``max_active_tis_per_dagrun`` for Dynamic Task Mapping (#29094) - Add serializer for pandas dataframe (#30390) - Deferrable ``TriggerDagRunOperator`` (#30292) - Add command to get DAG Details via CLI (#30432) - Adding ContinuousTimetable and support for @continuous schedule_interval (#29909) - Allow customized rules to check if a file has dag (#30104) - Add a new Airflow conf to specify a SSL ca cert for Kubernetes client (#30048) - Bash sensor has an explicit retry code (#30080) - Add filter task upstream/downstream to grid view (#29885) - Add testing a connection via Airflow CLI (#29892) - Support deleting the local log files when using remote logging (#29772) - ``Blocklist`` to disable specific metric tags or metric names (#29881) - Add a new graph inside of the grid view (#29413) - Add database ``check_migrations`` config (#29714) - add output format arg for ``cli.dags.trigger`` (#29224) - Make json and yaml available in templates (#28930) - Enable tagged metric names for existing Statsd metric publishing events | influxdb-statsd support (#29093) - Add arg --yes to ``db export-archived`` command. (#29485) - Make the policy functions pluggable (#28558) - Add ``airflow db drop-archived`` command (#29309) - Enable individual trigger logging (#27758) - Implement new filtering options in graph view (#29226) - Add triggers for ExternalTask (#29313) - Add command to export purged records to CSV files (#29058) - Add ``FileTrigger`` (#29265) - Emit DataDog statsd metrics with metadata tags (#28961) - Add some statsd metrics for dataset (#28907) - Add --overwrite option to ``connections import`` CLI command (#28738) - Add general-purpose "notifier" concept to DAGs (#28569) - Add a new conf to wait past_deps before skipping a task (#27710) - Add Flink on K8s Operator (#28512) - Allow Users to disable SwaggerUI via configuration (#28354) - Show mapped task groups in graph (#28392) - Log FileTaskHandler to work with KubernetesExecutor's multi_namespace_mode (#28436) - Add a new config for adapting masked secrets to make it easier to prevent secret leakage in logs (#28239) - List specific config section and its values using the cli (#28334) - KubernetesExecutor multi_namespace_mode can use namespace list to avoid requiring cluster role (#28047) - Automatically save and allow restore of recent DAG run configs (#27805) - Added exclude_microseconds to cli (#27640) *Improvements* - Update the error message for invalid use of poke-only sensors (#30821) - Update log level in scheduler critical section edge case (#30694) - AIP-51 Removing Executor Coupling from Core Airflow (`AIP-51 < https://github.com/apache/airflow/pulls?q=is%3Apr+is%3Amerged+label%3AAIP-51+milestone%3A%22Airflow+2.6.0%22 >`_) - Add multiple exit code handling in skip logic for BashOperator (#30739) - Updated app to support configuring the caching hash method for FIPS v2 (#30675) - Preload airflow imports before dag parsing to save time (#30495) - Improve task & run actions ``UX`` in grid view (#30373) - Speed up TaskGroups with caching property of group_id (#30284) - Use the engine provided in the session (#29804) - Type related import optimization for Executors (#30361) - Add more type hints to the code base (#30503) - Always use self.appbuilder.get_session in security managers (#30233) - Update SQLAlchemy ``select()`` to new style (#30515) - Refactor out xcom constants from models (#30180) - Add exception class name to DAG-parsing error message (#30105) - Rename statsd_allow_list and statsd_block_list to ``metrics_*_list`` (#30174) - Improve serialization of tuples and sets (#29019) - Make cleanup method in trigger an async one (#30152) - Lazy load serialization modules (#30094) - SLA callbacks no longer add files to the dag_processing manager queue (#30076) - Add task.trigger rule to grid_data (#30130) - Speed up log template sync by avoiding ORM (#30119) - Separate cli_parser.py into two modules (#29962) - Explicit skipped states list for ExternalTaskSensor (#29933) - Add task state hover highlighting to new graph (#30100) - Store grid tabs in url params (#29904) - Use custom Connexion resolver to load lazily (#29992) - Delay Kubernetes import in secret masker (#29993) - Delay ConnectionModelView init until it's accessed (#29946) - Scheduler, make stale DAG deactivation threshold configurable instead of using dag processing timeout (#29446) - Improve grid view height calculations (#29563) - Avoid importing executor during conf validation (#29569) - Make permissions for FileTaskHandler group-writeable and configurable (#29506) - Add colors in help outputs of Airflow CLI commands #28789 (#29116) - Add a param for get_dags endpoint to list only unpaused dags (#28713) - Expose updated_at filter for dag run and task instance endpoints (#28636) - Increase length of user identifier columns (#29061) - Update gantt chart UI to display queued state of tasks (#28686) - Add index on log.dttm (#28944) - Display only the running configuration in configurations view (#28892) - Cap dropdown menu size dynamically (#28736) - Added JSON linter to connection edit / add UI for field extra. On connection edit screen, existing extra data will be displayed indented (#28583) - Use labels instead of pod name for pod log read in k8s exec (#28546) - Use time not tries for queued & running re-checks. (#28586) - CustomTTYColoredFormatter should inherit TimezoneAware formatter (#28439) - Improve past depends handling in Airflow CLI tasks.run command (#28113) - Support using a list of callbacks in ``on_*_callback/sla_miss_callbacks`` (#28469) - Better table name validation for db clean (#28246) - Use object instead of array in config.yml for config template (#28417) - Add markdown rendering for task notes. (#28245) - Show mapped task groups in grid view (#28208) - Add ``renamed`` and ``previous_name`` in config sections (#28324) - Speed up most Users/Role CLI commands (#28259) - Speed up Airflow role list command (#28244) - Refactor serialization (#28067, #30819, #30823) - Allow longer pod names for k8s executor / KPO (#27736) - Updates health check endpoint to include ``triggerer`` status (#27755) *Bug Fixes* - Count mapped upstream only if all are finished (#30641) - ExternalTaskSensor: add external_task_group_id to template_fields (#30401) - Improve url detection for task instance details (#30779) - Use material icons for dag import error banner (#30771) - Fix misc grid/graph view UI bugs (#30752) - Add a collapse grid button (#30711) - Fix d3 dependencies (#30702) - Simplify logic to resolve tasks stuck in queued despite stalled_task_timeout (#30375) - When clearing task instances try to get associated DAGs from database (#29065) - Fix mapped tasks partial arguments when DAG default args are provided (#29913) - Deactivate DAGs deleted from within zip files (#30608) - Recover from ``too old resource version exception`` by retrieving the latest ``resource_version`` (#30425) - Fix possible race condition when refreshing DAGs (#30392) - Use custom validator for OpenAPI request body (#30596) - Fix ``TriggerDagRunOperator`` with deferrable parameter (#30406) - Speed up dag runs deletion (#30330) - Do not use template literals to construct html elements (#30447) - Fix deprecation warning in ``example_sensor_decorator`` DAG (#30513) - Avoid logging sensitive information in triggerer job log (#30110) - Add a new parameter for base sensor to catch the exceptions in poke method (#30293) - Fix dag run conf encoding with non-JSON serializable values (#28777) - Added fixes for Airflow to be usable on Windows Dask-Workers (#30249) - Force DAG last modified time to UTC (#30243) - Fix EmptySkipOperator in example dag (#30269) - Make the webserver startup respect update_fab_perms (#30246) - Ignore error when changing log folder permissions (#30123) - Disable ordering DagRuns by note (#30043) - Fix reading logs from finished KubernetesExecutor worker pod (#28817) - Mask out non-access bits when comparing file modes (#29886) - Remove Run task action from UI (#29706) - Fix log tailing issues with legacy log view (#29496) - Fixes to how DebugExecutor handles sensors (#28528) - Ensure that pod_mutation_hook is called before logging the pod name (#28534) - Handle OverflowError on exponential backoff in next_run_calculation (#28172) *Misc/Internal* - Make eager upgrade additional dependencies optional (#30811) - Upgrade to pip 23.1.1 (#30808) - Remove protobuf limitation from eager upgrade (#30182) - Remove protobuf limitation from eager upgrade (#30182) - Deprecate ``skip_exit_code`` in ``BashOperator`` (#30734) - Remove gauge ``scheduler.tasks.running`` (#30374) - Bump json5 to 1.0.2 and eslint-plugin-import to 2.27.5 in ``/airflow/www`` (#30568) - Add tests to PythonOperator (#30362) - Add asgiref as a core dependency (#30527) - Discovery safe mode toggle comment clarification (#30459) - Upgrade moment-timezone package to fix Tehran tz (#30455) - Bump loader-utils from 2.0.0 to 2.0.4 in ``/airflow/www`` (#30319) - Bump babel-loader from 8.1.0 to 9.1.0 in ``/airflow/www`` (#30316) - DagBag: Use ``dag.fileloc`` instead of ``dag.full_filepath`` in exception message (#30610) - Change log level of serialization information (#30239) - Minor DagRun helper method cleanup (#30092) - Improve type hinting in stats.py (#30024) - Limit ``importlib-metadata`` backport to < 5.0.0 (#29924) - Align cncf provider file names with AIP-21 (#29905) - Upgrade FAB to 4.3.0 (#29766) - Clear ExecutorLoader cache in tests (#29849) - Lazy load Task Instance logs in UI (#29827) - added warning log for max page limit exceeding api calls (#29788) - Aggressively cache entry points in process (#29625) - Don't use ``importlib.metadata`` to get Version for speed (#29723) - Upgrade Mypy to 1.0 (#29468) - Rename ``db export-cleaned`` to ``db export-archived`` (#29450) - listener: simplify API by replacing SQLAlchemy event-listening by direct calls (#29289) - No multi-line log entry for bash env vars (#28881) - Switch to ruff for faster static checks (#28893) - Remove horizontal lines in TI logs (#28876) - Make allowed_deserialization_classes more intuitive (#28829) - Propagate logs to stdout when in k8s executor pod (#28440) - Fix code readability, add docstrings to json_client (#28619) - AIP-51 - Misc. Compatibility Checks (#28375) - Fix is_local for LocalKubernetesExecutor (#28288) - Move Hive macros to the provider (#28538) - Rerun flaky PinotDB integration test (#28562) - Add pre-commit hook to check session default value (#28007) - Refactor get_mapped_group_summaries for web UI (#28374) - Add support for k8s 1.26 (#28320) - Replace ``freezegun`` with time-machine (#28193) - Completed D400 for ``airflow/kubernetes/*`` (#28212) - Completed D400 for multiple folders (#27969) - Drop k8s 1.21 and 1.22 support (#28168) - Remove unused task_queue attr from k8s scheduler class (#28049) - Completed D400 for multiple folders (#27767, #27768) *Doc only changes* - Add instructions on how to avoid accidental airflow upgrade/downgrade (#30813) - Add explicit information about how to write task logs (#30732) - Better explanation on how to log from tasks (#30746) - Use correct import path for Dataset (#30617) - Create ``audit_logs.rst`` (#30405) - Adding taskflow API example for sensors (#30344) - Add clarification about timezone aware dags (#30467) - Clarity params documentation (#30345) - Fix unit for task duration metric (#30273) - Update dag-run.rst for dead links of cli commands (#30254) - Add Write efficient Python code section to Reducing DAG complexity (#30158) - Allow to specify which connection, variable or config are being looked up in the backend using ``*_lookup_pattern`` parameters (#29580) - Add Documentation for notification feature extension (#29191) - Clarify that executor interface is public but instances are not (#29200) - Add Public Interface description to Airflow documentation (#28300) - Add documentation for task group mapping (#28001) - Some fixes to metrics doc (#30290) Cheers, Ephraim