Changelogs >

Apache-airflow

PyUp actively tracks 437,546 Python packages for vulnerabilities to keep your Python environments secure.

Scan your dependencies

2.3.3

Bug Fixes
- Fix exception in mini task scheduler (24865)
- Fix cycle bug with attaching label to task group (24847)
- Fix timestamp defaults for ``sensorinstance`` (24638)
- Move fallible ``ti.task.dag`` assignment back inside ``try/except`` block (24533) (24592)
- Add missing types to ``FSHook`` (24470)
- Mask secrets in ``stdout`` for ``airflow tasks test`` (24362)
- ``DebugExecutor`` use ``ti.run()`` instead of ``ti._run_raw_task`` (24357)
- Fix bugs in ``URI`` constructor for ``MySQL`` connection (24320)
- Missing ``scheduleinterval`` nullable true added in ``openapi`` (24253)
- Unify ``return_code`` interface for task runner (24093)
- Handle occasional deadlocks in trigger with retries (24071)
- Remove special serde logic for mapped ``op_kwargs`` (23860)
- ``ExternalTaskSensor`` respects ``soft_fail`` if the external task enters a ``failed_state`` (23647)
- Fix ``StatD`` timing metric units (21106)
- Add ``cache_ok`` flag to sqlalchemy TypeDecorators. (24499)
- Allow for ``LOGGING_LEVEL=DEBUG`` (23360)
- Fix grid date ticks (24738, 24849)
- Debounce status highlighting in Grid view (24710)
- Fix Grid vertical scrolling (24684)
- don't try to render child rows for closed groups (24637)
- Do not calculate grid root instances (24528)
- Maintain grid view selection on filtering upstream (23779)
- Speed up ``grid_data`` endpoint by 10x (24284)
- Apply per-run log templates to log handlers (24153)
- Don't crash scheduler if exec config has old k8s objects (24117)
- ``TI.log_url`` fix for ``map_index`` (24335)
- Fix migration ``0080_2_0_2`` - Replace null values before setting column not null (24585)
- Patch ``sql_alchemy_conn`` if old Postgres schemes used (24569)
- Seed ``log_template`` table (24511)
- Fix deprecated ``log_id_template`` value (24506)
- Fix toast messages (24505)
- Add indexes for CASCADE deletes for ``task_instance`` (24488)
- Return empty dict if Pod JSON encoding fails (24478)
- Improve grid rendering performance with a custom tooltip (24417, 24449)
- Check for ``run_id`` for grid group summaries (24327)
- Optimize calendar view for cron scheduled DAGs (24262)
- Use ``get_hostname`` instead of ``socket.getfqdn`` (24260)
- Check that edge nodes actually exist (24166)
- Fix ``useTasks`` crash on error (24152)
- Do not fail re-queued TIs (23846)
- Reduce grid view API calls (24083)
- Rename Permissions to Permission Pairs. (24065)
- Replace ``use_task_execution_date`` with ``use_task_logical_date`` (23983)
- Grid fix details button truncated and small UI tweaks (23934)
- Add TaskInstance State ``REMOVED`` to finished states and success states (23797)
- Fix mapped task immutability after clear (23667)
- Fix permission issue for dag that has dot in name (23510)
- Fix closing connection ``dbapi.get_pandas_df`` (23452)
- Check bag DAG ``schedule_interval`` match timetable (23113)
- Parse error for task added to multiple groups (23071)
- Fix flaky order of returned dag runs (24405)
- Migrate ``jsx`` files that affect run/task selection to ``tsx`` (24509)
- Fix links to sources for examples (24386)
- Set proper ``Content-Type`` and ``chartset`` on ``grid_data`` endpoint (24375)

Doc only changes

- Fix doc description of ``[core]`` parallelism config setting (23768)
- Update templates doc to mention ``extras`` and format Airflow ``Vars`` / ``Conns`` (24735)
- Document built in Timetables (23099)
- Alphabetizes two tables (23923)
- Clarify that users should not use Maria DB (24556)
- Add imports to deferring code samples (24544)
- Add note about image regeneration in June 2022 (24524)
- Small cleanup of ``get_current_context()`` chapter (24482)
- Fix default 2.2.5 ``log_id_template`` (24455)
- Update description of installing providers separately from core (24454)
- Mention context variables and logging (24304)

Misc/Internal

- Do not support ``MSSQL`` less than ``v2017`` in code (24095)
- Drop Python ``3.6`` compatibility objects/modules (24048)
- Remove upper-binding for SQLAlchemy (24819)
- Remove internet explorer support (24495)
- Removing magic status code numbers from ``api_connexion`` (24050)
- Upgrade FAB to ``4.1.2`` (24619)
- Switch Markdown engine to ``markdown-it-py`` (19702)
- Update ``rich`` to latest version across the board. (24186)
- Get rid of ``TimedJSONWebSignatureSerializer`` (24519)
- Update flask-appbuilder ``authlib``/ ``oauth`` dependency (24516)
- Upgrade to ``webpack`` 5 (24485)
- Add ``typescript`` (24337)
- The JWT claims in the request to retrieve logs have been standardized: we use ``nbf`` and ``aud`` claims for
maturity and audience of the requests. Also "filename" payload field is used to keep log name. (24519)
- Address all ``yarn`` test warnings (24722)
- Upgrade to react 18 and chakra 2 (24430)
- Refactor ``DagRun.verify_integrity`` (24114)
- Upgrade FAB to ``4.1.1`` (24399)
- We now need at least ``Flask-WTF 0.15`` (24621)

2.3.2

Not secure
Bug Fixes
- Run the ``check_migration`` loop at least once
- Fix grid view for mapped tasks (24059)
- Icons in grid view for different DAG run types (23970)
- Faster grid view (23951)
- Disallow calling expand with no arguments (23463)
- Add missing ``is_mapped`` field to Task response. (23319)
- DagFileProcessorManager: Start a new process group only if current process not a session leader (23872)
- Mask sensitive values for not-yet-running TIs (23807)
- Add cascade to ``dag_tag`` to ``dag`` foreign key (23444)
- Use ``--subdir`` argument value for standalone dag processor. (23864)
- Highlight task states by hovering on legend row (23678)
- Fix and speed up grid view (23947)
- Prevent UI from crashing if grid task instances are null (23939)
- Remove redundant register exit signals in ``dag-processor`` command (23886)
- Add ``__wrapped__`` property to ``_TaskDecorator`` (23830)
- Fix UnboundLocalError when ``sql`` is empty list in DbApiHook (23816)
- Enable clicking on DAG owner in autocomplete dropdown (23804)
- Simplify flash message for ``_airflow_moved`` tables (23635)
- Exclude missing tasks from the gantt view (23627)

Doc only changes
- Add column names for DB Migration Reference (23853)

Misc/Internal
- Remove pinning for xmltodict (23992)

2.3.1

Not secure
Bug Fixes

- Automatically reschedule stalled queued tasks in ``CeleryExecutor`` (23690)
- Fix expand/collapse all buttons (23590)
- Grid view status filters (23392)
- Expand/collapse all groups (23487)
- Fix retrieval of deprecated non-config values (23723)
- Fix secrets rendered in UI when task is not executed. (22754)
- Fix provider import error matching (23825)
- Fix regression in ignoring symlinks (23535)
- Fix ``dag-processor`` fetch metadata database config (23575)
- Fix auto upstream dep when expanding non-templated field (23771)
- Fix task log is not captured (23684)
- Add ``reschedule`` to the serialized fields for the ``BaseSensorOperator`` (23674)
- Modify db clean to also catch the ProgrammingError exception (23699)
- Remove titles from link buttons (23736)
- Fix grid details header text overlap (23728)
- Ensure ``execution_timeout`` as timedelta (23655)
- Don't run pre-migration checks for downgrade (23634)
- Add index for event column in log table (23625)
- Implement ``send_callback`` method for ``CeleryKubernetesExecutor`` and ``LocalKubernetesExecutor`` (23617)
- Fix ``PythonVirtualenvOperator`` templated_fields (23559)
- Apply specific ID collation to ``root_dag_id`` too (23536)
- Prevent ``KubernetesJobWatcher`` getting stuck on resource too old (23521)
- Fix scheduler crash when expanding with mapped task that returned none (23486)
- Fix broken dagrun links when many runs start at the same time (23462)
- Fix: Exception when parsing log 20966 (23301)
- Handle invalid date parsing in webserver views. (23161)
- Pools with negative open slots should not block other pools (23143)
- Move around overflow, position and padding (23044)
- Change approach to finding bad rows to LEFT OUTER JOIN. (23528)
- Only count bad refs when ``moved`` table exists (23491)
- Visually distinguish task group summary (23488)
- Remove color change for highly nested groups (23482)
- Optimize 2.3.0 pre-upgrade check queries (23458)
- Add backward compatibility for ``core__sql_alchemy_conn__cmd`` (23441)
- Fix literal cross product expansion (23434)
- Fix broken task instance link in xcom list (23367)
- Fix connection test button (23345)
- fix cli ``airflow dags show`` for mapped operator (23339)
- Hide some task instance attributes (23338)
- Don't show grid actions if server would reject with permission denied (23332)
- Use run_id for ``ti.mark_success_url`` (23330)
- Fix update user auth stats (23314)
- Use ``<Time />`` in Mapped Instance table (23313)
- Fix duplicated Kubernetes DeprecationWarnings (23302)
- Store grid view selection in url params (23290)
- Remove custom signal handling in Triggerer (23274)
- Override pool for TaskInstance when pool is passed from cli. (23258)
- Show warning if '/' is used in a DAG run ID (23106)
- Use kubernetes queue in kubernetes hybrid executors (23048)
- Add tags inside try block. (21784)

Doc only changes

- Move ``dag_processing.processor_timeouts`` to counters section (23393)
- Clarify that bundle extras should not be used for PyPi installs (23697)
- Synchronize support for Postgres and K8S in docs (23673)
- Replace DummyOperator references in docs (23502)
- Add doc notes for keyword-only args for ``expand()`` and ``partial()`` (23373)
- Document fix for broken elasticsearch logs with 2.3.0+ upgrade (23821)

Misc/Internal

- Add typing for airflow/configuration.py (23716)
- Disable Flower by default from docker-compose (23685)
- Added postgres 14 to support versions(including breeze) (23506)
- add K8S 1.24 support (23637)
- Refactor code references from tree to grid (23254)

2.3.0

Not secure
New Features
- Add dynamic task mapping (https://github.com/apache/airflow/pulls?q=is%3Apr+is%3Amerged+label%3AAIP-42+milestone%3A%22Airflow+2.3.0%22)
- New Grid View replaces Tree View (18675)
- Templated ``requirements.txt`` in Python Operators (17349)
- Allow reuse of decorated tasks (22941)
- Move the database configuration to a new section (22284)
- Add ``SmoothOperator`` (22813)
- Make operator's ``execution_timeout`` configurable (22389)
- Events Timetable (22332)
- Support dag serialization with custom ``ti_deps`` rules (22698)
- Support log download in task log view (22804)
- support for continue backfill on failures (22697)
- Add ``dag-processor`` cli command (22305)
- Add possibility to create users in LDAP mode (22619)
- Add ``ignore_first_depends_on_past`` for scheduled jobs (22491)
- Update base sensor operator to support XCOM return value (20656)
- Add an option for run id in the ui trigger screen (21851)
- Enable JSON serialization for connections (19857)
- Add REST API endpoint for bulk update of DAGs (19758)
- Add queue button to click-on-DagRun interface. (21555)
- Add ``list-import-errors`` to ``airflow dags`` command (22084)
- Store callbacks in database if ``standalone_dag_processor`` config is True. (21731)
- Add LocalKubernetesExecutor (19729)
- Add ``celery.task_timeout_error`` metric (21602)
- Airflow ``db downgrade`` cli command (21596)
- Add ``ALL_SKIPPED`` trigger rule (21662)
- Add ``db clean`` CLI command for purging old data (20838)
- Add ``celery_logging_level`` (21506)
- Support different timeout value for dag file parsing (21501)
- Support generating SQL script for upgrades (20962)
- Add option to compress Serialized dag data (21332)
- Branch python operator decorator (20860)
- Add Audit Log View to Dag View (20733)
- Add missing StatsD metric for failing SLA Callback notification (20924)
- Add ``ShortCircuitOperator`` configurability for respecting downstream trigger rules (20044)
- Allow using Markup in page title in Webserver (20888)
- Add Listener Plugin API that tracks TaskInstance state changes (20443)
- Add context var hook to inject more env vars (20361)
- Add a button to set all tasks to skipped (20455)
- Cleanup pending pods (20438)
- Add config to warn public deployment exposure in UI (18557)
- Log filename template records (20165)
- Added windows extensions (16110)
- Showing approximate time until next dag_run in Airflow (20273)
- Extend config window on UI (20052)
- Add show dag dependencies feature to CLI (19985)
- Add cli command for 'airflow dags reserialize` (19471)
- Add missing description field to Pool schema(REST API) (19841)
- Introduce DagRun action to change state to queued. (19353)
- Add DAG run details page (19705)
- Add role export/import to cli tools (18916)
- Adding ``dag_id_pattern`` parameter to the ``/dags`` endpoint (18924)

Improvements
- Show schedule_interval/timetable description in UI (16931)
- Added column duration to DAG runs view (19482)
- Enable use of custom conn extra fields without prefix (22607)
- Initialize finished counter at zero (23080)
- Improve logging of optional provider features messages (23037)
- Meaningful error message in resolve_template_files (23027)
- Update ImportError items instead of deleting and recreating them (22928)
- Add option ``--skip-init`` to db reset command (22989)
- Support importing connections from files with ".yml" extension (22872)
- Support glob syntax in ``.airflowignore`` files (21392) (22051)
- Hide pagination when data is a single page (22963)
- Support for sorting DAGs in the web UI (22671)
- Speed up ``has_access`` decorator by ~200ms (22858)
- Add XComArg to lazy-imported list of Airflow module (22862)
- Add more fields to REST API dags/dag_id/details endpoint (22756)
- Don't show irrelevant/duplicated/"internal" Task attrs in UI (22812)
- No need to load whole ti in current_state (22764)
- Pickle dag exception string fix (22760)
- Better verification of Localexecutor's parallelism option (22711)
- log backfill exceptions to sentry (22704)
- retry commit on MySQL deadlocks during backfill (22696)
- Add more fields to REST API get DAG(dags/dag_id) endpoint (22637)
- Use timetable to generate planned days for current year (22055)
- Disable connection pool for celery worker (22493)
- Make date picker label visible in trigger dag view (22379)
- Expose ``try_number`` in airflow vars (22297)
- Add generic connection type (22310)
- Add a few more fields to the taskinstance finished log message (22262)
- Pause auto-refresh if scheduler isn't running (22151)
- Show DagModel details. (21868)
- Add pip_install_options to PythonVirtualenvOperator (22158)
- Show import error for ``airflow dags list`` CLI command (21991)
- Pause auto-refresh when page is hidden (21904)
- Default args type check (21809)
- Enhance magic methods on XComArg for UX (21882)
- py files don't have to be checked ``is_zipfiles`` in refresh_dag (21926)
- Fix TaskDecorator type hints (21881)
- Add 'Show record' option for variables (21342)
- Use DB where possible for quicker ``airflow dag`` subcommands (21793)
- REST API: add rendered fields in task instance. (21741)
- Change the default auth backend to session (21640)
- Don't check if ``py`` DAG files are zipped during parsing (21538)
- Switch XCom implementation to use ``run_id`` (20975)
- Action log on Browse Views (21569)
- Implement multiple API auth backends (21472)
- Change logging level details of connection info in ``get_connection()`` (21162)
- Support mssql in airflow db shell (21511)
- Support config ``worker_enable_remote_control`` for celery (21507)
- Log memory usage in ``CgroupTaskRunner`` (21481)
- Modernize DAG-related URL routes and rename "tree" to "grid" (20730)
- Move Zombie detection to ``SchedulerJob`` (21181)
- Improve speed to run ``airflow`` by 6x (21438)
- Add more SQL template fields renderers (21237)
- Simplify fab has access lookup (19294)
- Log context only for default method (21244)
- Log trigger status only if at least one is running (21191)
- Add optional features in providers. (21074)
- Better multiple_outputs inferral for task.python (20800)
- Improve handling of string type and non-attribute ``template_fields`` (21054)
- Remove un-needed deps/version requirements (20979)
- Correctly specify overloads for TaskFlow API for type-hinting (20933)
- Introduce notification_sent to SlaMiss view (20923)
- Rewrite the task decorator as a composition (20868)
- Add "Greater/Smaller than or Equal" to filters in the browse views (20602) (20798)
- Rewrite DAG run retrieval in task command (20737)
- Speed up creation of DagRun for large DAGs (5k+ tasks) by 25-130% (20722)
- Make native environment Airflow-flavored like sandbox (20704)
- Better error when param value has unexpected type (20648)
- Add filter by state in DagRun REST API (List Dag Runs) (20485)
- Prevent exponential memory growth in Tasks with custom logging handler (20541)
- Set default logger in logging Mixin (20355)
- Reduce deprecation warnings from www (20378)
- Add hour and minute to time format on x-axis of all charts using nvd3.lineChart (20002)
- Add specific warning when Task asks for more slots than pool defined with (20178)
- UI: Update duration column for better human readability (20112)
- Use Viewer role as example public role (19215)
- Properly implement DAG param dict copying (20216)
- ``ShortCircuitOperator`` push XCom by returning python_callable result (20071)
- Add clear logging to tasks killed due to a Dagrun timeout (19950)
- Change log level for Zombie detection messages (20204)
- Better confirmation prompts (20183)
- Only execute TIs of running DagRuns (20182)
- Check and run migration in commands if necessary (18439)
- Log only when Zombies exists (20118)
- Increase length of the email and username (19932)
- Add more filtering options for TI's in the UI (19910)
- Dynamically enable "Test Connection" button by connection type (19792)
- Avoid littering postgres server logs with "could not obtain lock" with HA schedulers (19842)
- Renamed ``Connection.get_hook`` parameter to make it the same as in ``SqlSensor`` and ``SqlOperator``. (19849)
- Add hook_params in SqlSensor using the latest changes from PR 18718. (18431)
- Speed up webserver boot time by delaying provider initialization (19709)
- Configurable logging of ``XCOM`` value in PythonOperator (19378)
- Minimize production js files (19658)
- Add ``hook_params`` in ``BaseSqlOperator`` (18718)
- Add missing "end_date" to hash components (19281)
- More friendly output of the airflow plugins command + add timetables (19298)
- Add sensor default timeout config (19119)
- Update ``taskinstance`` REST API schema to include dag_run_id field (19105)
- Adding feature in bash operator to append the user defined env variable to system env variable (18944)
- Duplicate Connection: Added logic to query if a connection id exists before creating one (18161)

Bug Fixes
- Use inherited 'trigger_tasks' method (23016)
- In DAG dependency detector, use class type instead of class name (21706)
- Fix tasks being wrongly skipped by schedule_after_task_execution (23181)
- Fix X-Frame enabled behaviour (23222)
- Allow ``extra`` to be nullable in connection payload as per schema(REST API). (23183)
- Fix ``dag_id`` extraction for dag level access checks in web ui (23015)
- Fix timezone display for logs on UI (23075)
- Include message in graph errors (23021)
- Change trigger dropdown left position (23013)
- Don't add planned tasks for legacy DAG runs (23007)
- Add dangling rows check for TaskInstance references (22924)
- Validate the input params in connection ``CLI`` command (22688)
- Fix trigger event payload is not persisted in db (22944)
- Drop "airflow moved" tables in command ``db reset`` (22990)
- Add max width to task group tooltips (22978)
- Add template support for ``external_task_ids``. (22809)
- Allow ``DagParam`` to hold falsy values (22964)
- Fix regression in pool metrics (22939)
- Priority order tasks even when using pools (22483)
- Do not clear XCom when resuming from deferral (22932)
- Handle invalid JSON metadata in ``get_logs_with_metadata endpoint``. (22898)
- Fix pre-upgrade check for rows dangling w.r.t. dag_run (22850)
- Fixed backfill interference with scheduler (22701)
- Support conf param override for backfill runs (22837)
- Correctly interpolate pool name in ``PoolSlotsAvailableDep`` statues (22807)
- Fix ``email_on_failure`` with ``render_template_as_native_obj`` (22770)
- Fix processor cleanup on ``DagFileProcessorManager`` (22685)
- Prevent meta name clash for task instances (22783)
- remove json parse for gantt chart (22780)
- Check for missing dagrun should know version (22752)
- Fixes ``ScheduleInterval`` spec (22635)
- Fixing task status for non-running and non-committed tasks (22410)
- Do not log the hook connection details even at DEBUG level (22627)
- Stop crashing when empty logs are received from kubernetes client (22566)
- Fix bugs about timezone change (22525)
- Fix entire DAG stops when one task has end_date (20920)
- Use logger to print message during task execution. (22488)
- Make sure finalizers are not skipped during exception handling (22475)
- update smart sensor docs and minor fix on ``is_smart_sensor_compatible()`` (22386)
- Fix ``run_id`` k8s and elasticsearch compatibility with Airflow 2.1 (22385)
- Allow to ``except_skip`` None on ``BranchPythonOperator`` (20411)
- Fix incorrect datetime details (DagRun views) (21357)
- Remove incorrect deprecation warning in secrets backend (22326)
- Remove ``RefreshConfiguration`` workaround for K8s token refreshing (20759)
- Masking extras in GET ``/connections/<connection>`` endpoint (22227)
- Set ``queued_dttm`` when submitting task to directly to executor (22259)
- Addressed some issues in the tutorial mentioned in discussion 22233 (22236)
- Change default python executable to python3 for docker decorator (21973)
- Don't validate that Params are JSON when NOTSET (22000)
- Add per-DAG delete permissions (21938)
- Fix handling some None parameters in kubernetes 23 libs. (21905)
- Fix handling of empty (None) tags in ``bulk_write_to_db`` (21757)
- Fix DAG date range bug (20507)
- Removed ``request.referrer`` from views.py (21751)
- Make ``DbApiHook`` use ``get_uri`` from Connection (21764)
- Fix some migrations (21670)
- [de]serialize resources on task correctly (21445)
- Add params ``dag_id``, ``task_id`` etc to ``XCom.serialize_value`` (19505)
- Update test connection functionality to use custom form fields (21330)
- fix all "high" npm vulnerabilities (21526)
- Fix bug incorrectly removing action from role, rather than permission. (21483)
- Fix relationship join bug in FAB/SecurityManager with SQLA 1.4 (21296)
- Use Identity instead of Sequence in SQLAlchemy 1.4 for MSSQL (21238)
- Ensure ``on_task_instance_running`` listener can get at task (21157)
- Return to the same place when triggering a DAG (20955)
- Fix task ID deduplication in ``task_group`` (20870)
- Add downgrade to some FAB migrations (20874)
- Only validate Params when DAG is triggered (20802)
- Fix ``airflow trigger`` cli (20781)
- Fix task instances iteration in a pool to prevent blocking (20816)
- Allow depending to a ``task_group`` as a whole (20671)
- Use original task's ``start_date`` if a task continues after deferral (20062)
- Disabled edit button in task instances list view page (20659)
- Fix a package name import error (20519) (20519)
- Remove ``execution_date`` label when get cleanup pods list (20417)
- Remove unneeded FAB REST API endpoints (20487)
- Fix parsing of Cloudwatch log group arn containing slashes (14667) (19700)
- Sanity check for MySQL's TIMESTAMP column (19821)
- Allow using default celery command group with executors subclassed from Celery-based executors. (18189)
- Move ``class_permission_name`` to mixin so it applies to all classes (18749)
- Adjust trimmed_pod_id and replace '.' with '-' (19036)
- Pass custom_headers to send_email and send_email_smtp (19009)
- Ensure ``catchup=False`` is used in example dags (19396)
- Edit permalinks in OpenApi description file (19244)
- Navigate directly to DAG when selecting from search typeahead list (18991)
- [Minor] Fix padding on home page (19025)


Doc only changes
- Update doc for DAG file processing (23209)
- Replace changelog/updating with release notes and ``towncrier`` now (22003)
- Fix wrong reference in tracking-user-activity.rst (22745)
- Remove references to ``rbac = True`` from docs (22725)
- Doc: Update description for executor-bound dependencies (22601)
- Update check-health.rst (22372)
- Stronger language about Docker Compose customizability (22304)
- Update logging-tasks.rst (22116)
- Add example config of ``sql_alchemy_connect_args`` (22045)
- Update best-practices.rst (22053)
- Add information on DAG pausing/deactivation/deletion (22025)
- Add brief examples of integration test dags you might want (22009)
- Run inclusive language check on CHANGELOG (21980)
- Add detailed email docs for Sendgrid (21958)
- Add docs for ``db upgrade`` / ``db downgrade`` (21879)
- Update modules_management.rst (21889)
- Fix UPDATING section on SqlAlchemy 1.4 scheme changes (21887)
- Update TaskFlow tutorial doc to show how to pass "operator-level" args. (21446)
- Fix doc - replace decreasing by increasing (21805)
- Add another way to dynamically generate DAGs to docs (21297)
- Add extra information about time synchronization needed (21685)
- Update debug.rst docs (21246)
- Replaces the usage of ``postgres://`` with ``postgresql://`` (21205)
- Fix task execution process in ``CeleryExecutor`` docs (20783)

Misc/Internal
- Bring back deprecated security manager functions (23243)
- Replace usage of ``DummyOperator`` with ``EmptyOperator`` (22974)
- Deprecate ``DummyOperator`` in favor of ``EmptyOperator`` (22832)
- Remove unnecessary python 3.6 conditionals (20549)
- Bump ``moment`` from 2.29.1 to 2.29.2 in /airflow/www (22873)
- Bump ``prismjs`` from 1.26.0 to 1.27.0 in /airflow/www (22823)
- Bump ``nanoid`` from 3.1.23 to 3.3.2 in /airflow/www (22803)
- Bump ``minimist`` from 1.2.5 to 1.2.6 in /airflow/www (22798)
- Remove dag parsing from db init command (22531)
- Update our approach for executor-bound dependencies (22573)
- Use ``Airflow.Base.metadata`` in FAB models (22353)
- Limit docutils to make our documentation pretty again (22420)
- Add Python 3.10 support (22050)
- [FEATURE] add 1.22 1.23 K8S support (21902)
- Remove pandas upper limit now that SQLA is 1.4+ (22162)
- Patch ``sql_alchemy_conn`` if old postgres scheme used (22333)
- Protect against accidental misuse of XCom.get_value() (22244)
- Order filenames for migrations (22168)
- Don't try to auto generate migrations for Celery tables (22120)
- Require SQLAlchemy 1.4 (22114)
- bump sphinx-jinja (22101)
- Add compat shim for SQLAlchemy to avoid warnings (21959)
- Rename ``xcom.dagrun_id`` to ``xcom.dag_run_id`` (21806)
- Deprecate non-JSON ``conn.extra`` (21816)
- Bump upper bound version of ``jsonschema`` to 5.0 (21712)
- Deprecate helper utility ``days_ago`` (21653)
- Remove :type lines now ``sphinx-autoapi`` supports type hints (20951)
- Silence deprecation warning in tests (20900)
- Use ``DagRun.run_id`` instead of ``execution_date`` when updating state of TIs (UI & REST API) (18724)
- Add Context stub to Airflow packages (20817)
- Update Kubernetes library version (18797)
- Rename ``PodLauncher`` to ``PodManager`` (20576)
- Removes Python 3.6 support (20467)
- Add deprecation warning for non-json-serializable params (20174)
- Rename TaskMixin to DependencyMixin (20297)
- Deprecate passing execution_date to XCom methods (19825)
- Remove ``get_readable_dags`` and ``get_editable_dags``, and ``get_accessible_dags``. (19961)
- Remove postgres 9.6 support (19987)
- Removed hardcoded connection types. Check if hook is instance of DbApiHook. (19639)
- add kubernetes 1.21 support (19557)
- Add FAB base class and set import_name explicitly. (19667)
- Removes unused state transitions to handle auto-changing view permissions. (19153)
- Chore: Use enum for ``__var`` and ``__type`` members (19303)
- Use fab models (19121)
- Consolidate method names between Airflow Security Manager and FAB default (18726)
- Remove distutils usages for Python 3.10 (19064)
- Removing redundant ``max_tis_per_query`` initialisation on SchedulerJob (19020)
- Remove deprecated usage of ``init_role()`` from API (18820)
- Remove duplicate code on dbapi hook (18821)

2.2.5

Not secure
Bug Fixes
- Check and disallow a relative path for sqlite (22530)
- Fixed dask executor and tests (22027)
- Fix broken links to celery documentation (22364)
- Fix incorrect data provided to tries & landing times charts (21928)
- Fix assignment of unassigned triggers (21770)
- Fix triggerer ``--capacity`` parameter (21753)
- Fix graph autorefresh on page load (21736)
- Fix filesystem sensor for directories (21729)
- Fix stray ``order_by(TaskInstance.execution_date)`` (21705)
- Correctly handle multiple '=' in LocalFileSystem secrets. (21694)
- Log exception in local executor (21667)
- Disable ``default_pool`` delete on web ui (21658)
- Extends ``typing-extensions`` to be installed with python 3.8+ 21566 (21567)
- Dispose unused connection pool (21565)
- Fix logging JDBC SQL error when task fails (21540)
- Filter out default configs when overrides exist. (21539)
- Fix Resources ``__eq__`` check (21442)
- Fix ``max_active_runs=1`` not scheduling runs when ``min_file_process_interval`` is high (21413)
- Reduce DB load incurred by Stale DAG deactivation (21399)
- Fix race condition between triggerer and scheduler (21316)
- Fix trigger dag redirect from task instance log view (21239)
- Log traceback in trigger excs (21213)
- A trigger might use a connection; make sure we mask passwords (21207)
- Update ``ExternalTaskSensorLink`` to handle templated ``external_dag_id`` (21192)
- Ensure ``clear_task_instances`` sets valid run state (21116)
- Fix: Update custom connection field processing (20883)
- Truncate stack trace to DAG user code for exceptions raised during execution (20731)
- Fix duplicate trigger creation race condition (20699)
- Fix Tasks getting stuck in scheduled state (19747)
- Fix: Do not render undefined graph edges (19684)
- Set ``X-Frame-Options`` header to DENY only if ``X_FRAME_ENABLED`` is set to true. (19491)

Doc only changes
- adding ``on_execute_callback`` to callbacks docs (22362)
- Add documentation on specifying a DB schema. (22347)
- Fix postgres part of pipeline example of tutorial (21586)
- Extend documentation for states of DAGs & tasks and update trigger rules docs (21382)
- DB upgrade is required when updating Airflow (22061)
- Remove misleading MSSQL information from the docs (21998)

Misc
- Add the new Airflow Trove Classifier to setup.cfg (22241)
- Rename ``to_delete`` to ``to_cancel`` in TriggerRunner (20658)
- Update Flask-AppBuilder to ``3.4.5`` (22596)

2.2.4

Not secure
Bug Fixes

- Adding missing login provider related methods from Flask-Appbuilder (21294)
- Fix slow DAG deletion due to missing ``dag_id`` index for job table (20282)
- Add a session backend to store session data in the database (21478)
- Show task status only for running dags or only for the last finished dag (21352)
- Use compat data interval shim in log handlers (21289)
- Fix mismatch in generated run_id and logical date of DAG run (18707)
- Fix TriggerDagRunOperator extra link (19410)
- Add possibility to create user in the Remote User mode (19963)
- Avoid deadlock when rescheduling task (21362)
- Fix the incorrect scheduling time for the first run of dag (21011)
- Fix Scheduler crash when executing task instances of missing DAG (20349)
- Deferred tasks does not cancel when DAG is marked fail (20649)
- Removed duplicated dag_run join in ``Dag.get_task_instances()`` (20591)
- Avoid unintentional data loss when deleting DAGs (20758)
- Fix session usage in ``/rendered-k8s`` view (21006)
- Fix ``airflow dags backfill --reset-dagruns`` errors when run twice (21062)
- Do not set ``TaskInstance.max_tries`` in ``refresh_from_task`` (21018)
- Don't require dag_id in body in dagrun REST API endpoint (21024)
- Add Roles from Azure OAUTH Response in internal Security Manager (20707)
- Allow Viewing DagRuns and TIs if a user has DAG "read" perms (20663)
- Fix running ``airflow dags test <dag_id> <execution_dt>`` results in error when run twice (21031)
- Switch to non-vendored latest connexion library (20910)
- Bump flask-appbuilder to ``>=3.3.4`` (20628)
- upgrade celery to ``5.2.3`` (19703)
- Bump croniter from ``<1.1`` to ``<1.2`` (20489)
- Lift off upper bound for MarkupSafe (20113)
- Avoid calling ``DAG.following_schedule()`` for ``TaskInstance.get_template_context()`` (20486)
- Fix(standalone): Remove hardcoded Webserver port (20429)
- Remove unnecssary logging in experimental API (20356)
- Un-ignore DeprecationWarning (20322)
- Deepcopying Kubernetes Secrets attributes causing issues (20318)
- Fix(dag-dependencies): fix arrow styling (20303)
- Adds retry on taskinstance retrieval lock (20030)
- Correctly send timing metrics when using dogstatsd (fix schedule_delay metric) (19973)
- Enhance ``multiple_outputs`` inference of dict typing (19608)
- Fixing ses email backend (18042)
- Pin Markupsafe until we are able to upgrade Flask/Jinja (21664)

Doc only changes

- Added explaining concept of logical date in DAG run docs (21433)
- Add note about Variable precedence with env vars (21568)
- Update error docs to include before_send option (21275)
- Augment xcom docs (20755)
- Add documentation and release policy on "latest" constraints (21093)
- Add a link to the DAG model in the Python API reference (21060)
- Added an enum param example (20841)
- Compare taskgroup and subdag (20700)
- Add note about reserved ``params`` keyword (20640)
- Improve documentation on ``Params`` (20567)
- Fix typo in MySQL Database creation code (Set up DB docs) (20102)
- Add requirements.txt description (20048)
- Clean up ``default_args`` usage in docs (19803)
- Add docker-compose explanation to conn localhost (19076)
- Update CSV ingest code for tutorial (18960)
- Adds Pendulum 1.x -> 2.x upgrade documentation (18955)
- Updating explicit arg example in TaskFlow API tutorial doc (18907)
- Adds back documentation about context usage in Python/`task` (18868)
- Clean up dynamic `start_date` values from docs (19607)
- Docs for multiple pool slots (20257)
- Update upgrading.rst with detailed code example of how to resolve post-upgrade warning (19993)

Misc

- Deprecate some functions in the experimental API (19931)
- Deprecate smart sensors (20151)

2.2.3

Not secure
Bug Fixes

- Lazy Jinja2 context (20217)
- Exclude ``snowflake-sqlalchemy`` v1.2.5 (20245)
- Move away from legacy ``importlib.resources`` API (19091)
- Move setgid as the first command executed in forked task runner (20040)
- Fix race condition when starting ``DagProcessorAgent`` (19935)
- Limit ``httpx`` to <0.20.0 (20218)
- Log provider import errors as debug warnings (20172)
- Bump minimum required ``alembic`` version (20153)
- Fix log link in gantt view (20121)
- fixing 19028 by moving chown to use sudo (20114)
- Lift off upper bound for ``MarkupSafe`` (20113)
- Fix infinite recursion on redact log (20039)
- Fix db downgrades (19994)
- Context class handles deprecation (19886)
- Fix possible reference to undeclared variable (19933)
- Validate ``DagRun`` state is valid on assignment (19898)
- Workaround occasional deadlocks with MSSQL (19856)
- Enable task run setting to be able reinitialise (19845)
- Fix log endpoint for same task (19672)
- Cast macro datetime string inputs explicitly (19592)
- Do not crash with stacktrace when task instance is missing (19478)
- Fix log timezone in task log view (19342) (19401)
- Fix: Add taskgroup tooltip to graph view (19083)
- Rename execution date in forms and tables (19063)
- Simplify "invalid TI state" message (19029)
- Handle case of nonexistent file when preparing file path queue (18998)
- Do not create dagruns for DAGs with import errors (19367)
- Fix field relabeling when switching between conn types (19411)
- ``KubernetesExecutor`` should default to template image if used (19484)
- Fix task instance api cannot list task instances with ``None`` state (19487)
- Fix IntegrityError in ``DagFileProcessor.manage_slas`` (19553)
- Declare data interval fields as serializable (19616)
- Relax timetable class validation (19878)
- Fix labels used to find queued ``KubernetesExecutor`` pods (19904)
- Fix moved data migration check for MySQL when replcation is used (19999)

Doc only changes

- Warn without tracebacks when example_dags are missing deps (20295)
- Deferrable operators doc clarification (20150)
- Ensure the example DAGs are all working (19355)
- Updating core example DAGs to use TaskFlow API where applicable (18562)
- Add xcom clearing behaviour on task retries (19968)
- Add a short chapter focusing on adapting secret format for connections (19859)
- Add information about supported OS-es for Apache Airflow (19855)
- Update docs to reflect that changes to the ``base_log_folder`` require updating other configs (19793)
- Disclaimer in ``KubernetesExecutor`` pod template docs (19686)
- Add upgrade note on ``execution_date`` -> ``run_id`` (19593)
- Expanding ``.output`` operator property information in TaskFlow tutorial doc (19214)
- Add example SLA DAG (19563)
- Add a proper example to patch DAG (19465)
- Add DAG file processing description to Scheduler Concepts (18954)
- Updating explicit arg example in TaskFlow API tutorial doc (18907)
- Adds back documentation about context usage in Python/`task` (18868)
- Add release date for when an endpoint/field is added in the REST API (19203)
- Better ``pod_template_file`` examples (19691)
- Add decription on how you can customize image entrypoint (18915)
- Dags-in-image pod template example should not have dag mounts (19337)

2.2.2

Not secure
Bug Fixes

- Fix bug when checking for existence of a Variable (19395)
- Fix Serialization when``relativedelta`` is passed as ``schedule_interval`` (19418)
- Fix moving of dangling TaskInstance rows for SQL Server (19425)
- Fix task instance modal in gantt view (19258)
- Fix serialization of ``Params`` with set data type (19267)
- Check if job object is ``None`` before calling ``.is_alive()`` (19380)
- Task should fail immediately when pod is unprocessable (19359)
- Fix downgrade for a DB Migration (19390)
- Only mark SchedulerJobs as failed, not any jobs (19375)
- Fix message on "Mark as" confirmation page (19363)
- Bugfix: Check next run exists before reading data interval (19307)
- Fix MySQL db migration with default encoding/collation (19268)
- Fix hidden tooltip position (19261)
- ``sqlite_default`` Connection has been hard-coded to ``/tmp``, use ``gettempdir`` instead (19255)
- Fix Toggle Wrap on DAG code page (19211)
- Clarify "dag not found" error message in CLI (19338)
- Add Note to SLA regarding ``schedule_interval`` (19173)
- Use ``execution_date`` to check for existing ``DagRun`` for ``TriggerDagRunOperator`` (18968)
- Add explicit session parameter in ``PoolSlotsAvailableDep`` (18875)
- FAB still requires ``WTForms<3.0`` (19466)
- Fix missing dagruns when ``catchup=True`` (19528)

Doc only changes

- Add missing parameter documentation for "timetable" (19282)
- Improve Kubernetes Executor docs (19339)
- Update image tag used in docker docs

2.2.1

Not secure
Bug Fixes

- Fix Unexpected commit error in schedulerjob (19213)
- Add DagRun.logical_date as a property (19198)
- Clear ti.next_method and ti.next_kwargs on task finish (19183)
- Faster PostgreSQL db migration to Airflow 2.2 (19166)
- Remove incorrect type comment in ``Swagger2Specification._set_defaults`` classmethod (19065)
- Add TriggererJob to jobs check command (19179, 19185)
- Hide tooltip when next run is ``None`` (19112)
- Crerate TI context with data interval compat layer (19148)
- Fix queued dag runs changes ``catchup=False`` behaviour (19130, 19145)
- add detailed information to logging when a dag or a task finishes. (19097)
- Warn about unsupported Python 3.10 (19060)
- Fix catchup by limiting queued dagrun creation using ``max_active_runs`` (18897)
- Prevent scheduler crash when serialized dag is missing (19113)
- Don't install SQLAlchemy/Pendulum adapters for other DBs (18745)
- Workaround libstdcpp TLS error (19010)
- Change `ds`, `ts`, etc. back to use logical date (19088)
- Ensure task state doesn't change when marked as failed/success/skipped (19095)
- Relax packaging requirement (19087)
- Rename trigger page label to Logical Date (19061)
- Allow Param to support a default value of ``None`` (19034)
- Upgrade old DAG/task param format when deserializing from the DB (18986)
- Don't bake ENV and _cmd into tmp config for non-sudo (18772)
- CLI: Fail ``backfill`` command before loading DAGs if missing args (18994)
- BugFix: Null execution date on insert to ``task_fail`` violating NOT NULL (18979)
- Try to move "dangling" rows in upgradedb (18953)
- Row lock TI query in ``SchedulerJob._process_executor_events`` (18975)
- Sentry before send fallback (18980)
- Fix ``XCom.delete`` error in Airflow 2.2.0 (18956)
- Check python version before starting triggerer (18926)

Doc only changes

- Update access control documentation for TaskInstances and DagRuns (18644)
- Add information about keepalives for managed Postgres (18850)
- Doc: Add Callbacks Section to Logging & Monitoring (18842)
- Group PATCH DAGrun together with other DAGRun endpoints (18885)

2.2.0

Not secure
New Features

- AIP-39: Add (customizable) Timetable class to Airflow for richer scheduling behaviour (15397, 16030,
16352, 17030, 17122, 17414, 17552, 17755, 17989, 18084, 18088, 18244, 18266, 18420, 18434,
18421, 18475, 18499, 18573, 18522, 18729, 18706, 18742, 18786, 18804)
- AIP-40: Add Deferrable "Async" Tasks (15389, 17564, 17565, 17601, 17745, 17747, 17748, 17875,
17876, 18129, 18210, 18214, 18552, 18728, 18414)
- Add a Docker Taskflow decorator (15330, 18739)
- Add Airflow Standalone command (15826)
- Display alert messages on dashboard from local settings (18284)
- Advanced Params using json-schema (17100)
- Ability to test connections from UI or API (15795, 18750)
- Add Next Run to UI (17732)
- Add default weight rule configuration option (18627)
- Add a calendar field to choose the execution date of the DAG when triggering it (16141)
- Allow setting specific ``cwd`` for BashOperator (17751)
- Show import errors in DAG views (17818)
- Add pre/post execution hooks [Experimental] (17576)
- Added table to view providers in Airflow ui under admin tab (15385)
- Adds secrets backend/logging/auth information to provider yaml (17625)
- Add date format filters to Jinja environment (17451)
- Introduce ``RESTARTING`` state (16681)
- Webserver: Unpause DAG on manual trigger (16569)
- API endpoint to create new user (16609)
- Add ``insert_args`` for support transfer replace (15825)
- Add recursive flag to glob in filesystem sensor (16894)
- Add conn to jinja template context (16686)
- Add ``default_args`` for ``TaskGroup`` (16557)
- Allow adding duplicate connections from UI (15574)
- Allow specifying multiple URLs via the CORS config option (17941)
- Implement API endpoint for DAG deletion (17980)
- Add DAG run endpoint for marking a dagrun success or failed(17839)
- Add support for ``kinit`` options ``[-f|-F]`` and ``[-a|-A]`` (17816)
- Queue support for ``DaskExecutor`` using Dask Worker Resources (16829, 18720)
- Make auto refresh interval configurable (18107)

Improvements

- Small improvements for Airflow UI (18715, 18795)
- Rename ``processor_poll_interval`` to ``scheduler_idle_sleep_time`` (18704)
- Check the allowed values for the logging level (18651)
- Fix error on triggering a dag that doesn't exist using ``dagrun_conf`` (18655)
- Add muldelete action to ``TaskInstanceModelView`` (18438)
- Avoid importing DAGs during clean DB installation (18450)
- Require can_edit on DAG privileges to modify TaskInstances and DagRuns (16634)
- Make Kubernetes job description fit on one log line (18377)
- Always draw borders if task instance state is null or undefined (18033)
- Inclusive Language (18349)
- Improved log handling for zombie tasks (18277)
- Adding ``Variable.update`` method and improving detection of variable key collisions (18159)
- Add note about params on trigger DAG page (18166)
- Change ``TaskInstance`` and ``TaskReschedule`` PK from ``execution_date`` to ``run_id`` (17719)
- Adding ``TaskGroup`` support in ``BaseOperator.chain()`` (17456)
- Advises the kernel to not cache log files generated by Airflow (18054)
- Allow filtering DAGS by tags in the REST API (18090)
- Optimize imports of Providers Manager (18052)
- Adds capability of Warnings for incompatible community providers (18020)
- Serialize the ``template_ext`` attribute to show it in UI (17985)
- Add ``robots.txt`` and ``X-Robots-Tag`` header (17946)
- Refactor ``BranchDayOfWeekOperator``, ``DayOfWeekSensor`` (17940)
- Update error message to guide the user into self-help mostly (17929)
- Update to Celery 5 (17397)
- Avoid redirect loop for users with no permissions (17838)
- Improve graph view load time for dags with open groups (17821)
- Add links to provider's documentation (17736)
- Remove Marshmallow schema warnings (17753)
- Rename ``none_failed_or_skipped`` by ``none_failed_min_one_success`` trigger rule (17683)
- Remove ``[core] store_dag_code`` & use DB to get Dag Code (16342)
- Rename ``task_concurrency`` to ``max_active_tis_per_dag`` (17708)
- Import Hooks lazily individually in providers manager (17682)
- Adding support for multiple task-ids in the external task sensor (17339)
- Replace ``execution_date`` with ``run_id`` in airflow tasks run command (16666)
- Avoid endless redirect loop when user has no roles (17613)
- Make output from users cli command more consistent (17642)
- Open relative extra links in place (17477)
- Move ``worker_log_server_port`` option to the logging section (17621)
- Use gunicorn to serve logs generated by worker (17591)
- Improve validation of Group id (17578)
- Simplify 404 page (17501)
- Add XCom.clear so it's hookable in custom XCom backend (17405)
- Add deprecation notice for ``SubDagOperator`` (17488)
- Support DAGS folder being in different location on scheduler and runners (16860)
- Remove /dagrun/create and disable edit form generated by F.A.B (17376)
- Enable specifying dictionary paths in ``template_fields_renderers`` (17321)
- error early if virtualenv is missing (15788)
- Handle connection parameters added to Extra and custom fields (17269)
- Fix ``airflow celery stop`` to accept the pid file. (17278)
- Remove DAG refresh buttons (17263)
- Deprecate dummy trigger rule in favor of always (17144)
- Be verbose about failure to import ``airflow_local_settings`` (17195)
- Include exit code in ``AirflowException`` str when ``BashOperator`` fails. (17151)
- Adding EdgeModifier support for chain() (17099)
- Only allows supported field types to be used in custom connections (17194)
- Secrets backend failover (16404)
- Warn on Webserver when using ``SQLite`` or ``SequentialExecutor`` (17133)
- Extend ``init_containers`` defined in ``pod_override`` (17537)
- Client-side filter dag dependencies (16253)
- Improve executor validation in CLI (17071)
- Prevent running ``airflow db init/upgrade`` migrations and setup in parallel. (17078)
- Update ``chain()`` and ``cross_downstream()`` to support ``XComArgs`` (16732)
- Improve graph view refresh (16696)
- When a task instance fails with exception, log it (16805)
- Set process title for ``serve-logs`` and ``LocalExecutor`` (16644)
- Rename ``test_cycle`` to ``check_cycle`` (16617)
- Set process title for Worker when using ``LocalExecutor`` (16623)
- Add schema as ``DbApiHook`` instance attribute (16521, 17423)
- Improve compatibility with MSSQL (9973)
- Add transparency for unsupported connection type (16220)
- Call resource based fab methods (16190)
- Format more dates with timezone (16129)
- Replace deprecated ``dag.sub_dag`` with ``dag.partial_subset`` (16179)
- Treat ``AirflowSensorTimeout`` as immediate failure without retrying (12058)
- Marking success/failed automatically clears failed downstream tasks (13037)
- Add close/open indicator for import dag errors (16073)
- Add collapsible import errors (16072)
- Always return a response in TI's ``action_clear`` view (15980)
- Add cli command to delete user by email (15873)
- Use resource and action names for FAB permissions (16410)
- Rename DAG concurrency (``[core] dag_concurrency``) settings for easier understanding (16267, 18730)
- Calendar UI improvements (16226)
- Refactor: ``SKIPPED`` should not be logged again as ``SUCCESS`` (14822)
- Remove version limits for dnspython (18046, 18162)
- Accept custom run ID in TriggerDagRunOperator (18788)

Bug Fixes

- Make REST API patch user endpoint work the same way as the UI (18757)
- Properly set ``start_date`` for cleared tasks (18708)
- Ensure task_instance exists before running update on its state(REST API) (18642)
- Make ``AirflowDateTimePickerWidget`` a required field (18602)
- Retry deadlocked transactions on deleting old rendered task fields (18616)
- Fix `retry_exponential_backoff` divide by zero error when retry delay is zero (17003)
- Improve how UI handles datetimes (18611, 18700)
- Bugfix: dag_bag.get_dag should return None, not raise exception (18554)
- Only show the task modal if it is a valid instance (18570)
- Fix accessing rendered ``{{ task.x }}`` attributes from within templates (18516)
- Add missing email type of connection (18502)
- Don't use flash for "same-page" UI messages. (18462)
- Fix task group tooltip (18406)
- Properly fix dagrun update state endpoint (18370)
- Properly handle ti state difference between executor and scheduler (17819)
- Fix stuck "queued" tasks in KubernetesExecutor (18152)
- Don't permanently add zip DAGs to ``sys.path`` (18384)
- Fix random deadlocks in MSSQL database (18362)
- Deactivating DAGs which have been removed from files (17121)
- When syncing dags to db remove ``dag_tag`` rows that are now unused (8231)
- Graceful scheduler shutdown on error (18092)
- Fix mini scheduler not respecting ``wait_for_downstream`` dep (18338)
- Pass exception to ``run_finished_callback`` for Debug Executor (17983)
- Make ``XCom.get_one`` return full, not abbreviated values (18274)
- Use try/except when closing temporary file in task_runner (18269)
- show next run if not none (18273)
- Fix DB session handling in ``XCom.set`` (18240)
- Sort adopted tasks in ``_check_for_stalled_adopted_tasks`` method (18208)
- Fix external_executor_id not being set for manually run jobs (17207)
- Fix deleting of zipped Dags in Serialized Dag Table (18243)
- Return explicit error on user-add for duplicated email (18224)
- Remove loading dots even when last run data is empty (18230)
- Swap dag import error dropdown icons (18207)
- Automatically create section when migrating config (16814)
- Set encoding to utf-8 by default while reading task logs (17965)
- Set task state to failed when pod is DELETED while running (18095)
- Apply parent dag permissions to subdags (18160)
- Change id collation for MySQL to case-sensitive (18072)
- Logs task launch exception in ``StandardTaskRunner`` (17967)
- Applied permissions to ``self._error_file`` (15947)
- Hide variable import form if user lacks permission (18000)
- Fix blank dag dependencies view (17990)
- Add missing menu access for dag dependencies and configurations pages (17450)
- Fix passing Jinja templates in ``DateTimeSensor`` (17959)
- Fixing bug which restricted the visibility of ImportErrors (17924)
- Fix grammar in ``traceback.html`` (17942)
- Fix ``DagRunState`` enum query for ``MySQLdb`` driver (17886)
- Fixed button size in "Actions" group. (17902)
- Fix log links on graph TI modal (17862)
- Only show import errors for DAGs a user can access (17835)
- Show all import_errors from zip files (17759)
- fix EXTRA_LOGGER_NAMES param and related docs (17808)
- Use one interpreter for Airflow and gunicorn (17805)
- Fix: Mysql 5.7 id utf8mb3 (14535)
- Fix dag_processing.last_duration metric random holes (17769)
- Automatically use ``utf8mb3_general_ci`` collation for MySQL (17729)
- Fix wrong query on running tis (17631)
- Add root to tree refresh url (17633)
- Do not delete running DAG from the UI (17630)
- Rescue if a DagRun's DAG was removed from db (17544)
- fix: filter condition of ``TaskInstance`` does not work 17535 (17548)
- Regression on pid reset to allow task start after heartbeat (17333)
- Dont use TaskInstance in CeleryExecutor.trigger_tasks (16248)
- Remove locks for upgrades in MSSQL (17213)
- Create virtualenv via python call (17156)
- Ensure a DAG is acyclic when running ``DAG.cli()`` (17105)
- Translate non-ascii characters (17057)
- Change the logic of ``None`` comparison in ``model_list`` template (16893)
- Have UI and POST /task_instances_state API endpoint have same behaviour (16539)
- ensure task is skipped if missing sla (16719)
- Fix direct use of ``cached_property`` module (16710)
- Fix TI success confirm page (16650)
- Cattrs 1.7.0 released by the end of May 2021 break lineage usage (16173)
- Fix Celery executor getting stuck randomly because of reset_signals in multiprocessing (15989)
- Modify return value check in python virtualenv jinja template (16049)
- Fix dag dependency search (15924)
- Make custom JSON encoder support ``Decimal`` (16383)
- Bugfix: Allow clearing tasks with just ``dag_id`` and empty ``subdir`` (16513)
- Convert port value to a number before calling test connection (16497)
- Handle missing/null serialized DAG dependencies (16393)
- Correctly set ``dag.fileloc`` when using the ``dag`` decorator (16384)
- Fix TI success/failure links (16233)
- Correctly implement autocomplete early return in ``airflow/www/views.py`` (15940)
- Backport fix to allow pickling of Loggers to Python 3.6 (18798)
- Fix bug that Backfill job fail to run when there are tasks run into ``reschedule`` state (17305, 18806)


Doc only changes

- Update ``dagbag_size`` documentation (18824)
- Update documentation about bundle extras (18828)
- Fix wrong Postgres ``search_path`` set up instructions (17600)
- Remove ``AIRFLOW_GID`` from Docker images (18747)
- Improve error message for BranchPythonOperator when no task_id to follow (18471)
- Improve guidance to users telling them what to do on import timeout (18478)
- Explain scheduler fine-tuning better (18356)
- Added example JSON for airflow pools import (18376)
- Add ``sla_miss_callback`` section to the documentation (18305)
- Explain sentry default environment variable for subprocess hook (18346)
- Refactor installation pages (18282)
- Improves installing from sources pages for all components (18251)
- Doc: Use ``closer.lua`` script for downloading sources (18179)
- Improves quick-start docker-compose warnings and documentation (18164)
- Production-level support for MSSQL (18382)
- Update non-working example in documentation (18067)
- Improve the description of how to handle dynamic task generation (17963)
- Remove default_args pattern + added get_current_context() use for Core Airflow example DAGs (16866)
- Update max_tis_per_query to better render on the webpage (17971)
- Adds Github Oauth example with team based authorization (17896)
- Update docker.rst (17882)
- Example xcom update (17749)
- Add doc warning about connections added via envvars (17915)
- fix wrong documents around upgrade-check.rst (17903)
- Add Brent to Committers list (17873)
- Improves documentation about modules management (17757)
- Remove deprecated metrics from metrics.rst (17772)
- Make sure "production-readiness" of docker-compose is well explained (17731)
- Doc: Update Upgrade to v2 docs with Airflow 1.10.x EOL dates (17710)
- Doc: Replace deprecated param from docstrings (17709)
- docs(dagowner): describe dag owner more carefully (17699)
- docs(impersonation): update note so avoid misintrepretation (17701)
- Docs: Make ``DAG.is_active`` read-only in API (17667)
- Improve cross-links to operators and hooks references (17622)
- Update documentation regarding Python 3.9 support (17611)
- Fix MySQL database character set instruction (17603)
- Document overriding ``XCom.clear`` for data lifecycle management (17589)
- Path correction in docs for airflow core (17567)
- docs(celery): reworded, add actual multiple queues example (17541)
- Doc: Add FAQ to speed up parsing with tons of dag files (17519)
- Improve image building documentation for new users (17409)
- Doc: Strip unnecessary arguments from MariaDB JIRA URL (17296)
- Update warning about MariaDB and multiple schedulers (17287)
- Doc: Recommend using same configs on all Airflow components (17146)
- Move docs about masking to a new page (17007)
- Docs: Suggest use of Env vars instead of Airflow Vars in best practises doc (16926)
- Docs: Better description for ``pod_template_file`` (16861)
- Add Aneesh Joseph as Airflow Committer (16835)
- Docs: Added new pipeline example for the tutorial docs (16548)
- Remove upstart from docs (16672)
- Add new committers: ``Jed`` and ``TP`` (16671)
- Docs: Fix ``flask-ouathlib`` to ``flask-oauthlib`` in Upgrading docs (16320)
- Docs: Fix creating a connection docs (16312)
- Docs: Fix url for ``Elasticsearch`` (16275)
- Small improvements for README.md files (16244)
- Fix docs for ``dag_concurrency`` (16177)
- Check syntatic correctness for code-snippets (16005)
- Improvements for Docker Image docs (14843)
- Add proper link for wheel packages in docs. (15999)
- Add Docs for ``default_pool`` slots (15997)
- Add memory usage warning in quick-start documentation (15967)
- Update example ``KubernetesExecutor`` ``git-sync`` pod template file (15904)
- Docs: Fix Taskflow API docs (16574)
- Added new pipeline example for the tutorial docs (16084)
- Updating the DAG docstring to include ``render_template_as_native_obj`` (16534)
- Update docs on setting up SMTP (16523)
- Docs: Fix API verb from ``POST`` to ``PATCH`` (16511)

Misc/Internal

- Renaming variables to be consistent with code logic (18685)
- Simplify strings previously split across lines (18679)
- fix exception string of ``BranchPythonOperator`` (18623)
- Add multiple roles when creating users (18617)
- Move FABs base Security Manager into Airflow. (16647)
- Remove unnecessary css state colors (18461)
- Update ``boto3`` to ``<1.19`` (18389)
- Improve coverage for ``airflow.security.kerberos module`` (18258)
- Fix kinesis test (18337)
- Fix provider test acessing importlib-resources (18228)
- Silence warnings in tests from using SubDagOperator (18275)
- Fix usage of ``range(len())`` to ``enumerate`` (18174)
- Test coverage on the autocomplete view (15943)
- Update version added fields in airflow/config_templates/config.yml (18128)
- Add "packaging" to core requirements (18122)
- Adds LoggingMixins to BaseTrigger (18106)
- Limit colorlog version (6.x is incompatible) (18099)
- Fix building docs in ``main`` builds (18035)
- Remove upper-limit on ``tenacity`` (17593)
- Remove redundant ``numpy`` dependency (17594)
- Bump ``mysql-connector-python`` to latest version (17596)
- Make ``pandas`` an optional core dependency (17575)
- Add more typing to airflow.utils.helpers (15582)
- Chore: Some code cleanup in ``airflow/utils/db.py`` (17090)
- Refactor: Remove processor_factory from DAG processing (16659)
- Remove AbstractDagFileProcessorProcess from dag processing (16816)
- Update TaskGroup typing (16811)
- Update ``click`` to 8.x (16779)
- Remove remaining Pylint disables (16760)
- Remove duplicated try, there is already a try in create_session (16701)
- Removes pylint from our toolchain (16682)
- Refactor usage of unneeded function call (16653)
- Add type annotations to setup.py (16658)
- Remove SQLAlchemy <1.4 constraint (16630) (Note: our dependencies still have a requirement on <1.4)
- Refactor ``dag.clear`` method (16086)
- Use ``DAG_ACTIONS`` constant (16232)
- Use updated ``_get_all_non_dag_permissions`` method (16317)
- Add updated-name wrappers for built-in FAB methods (16077)
- Pins ``docutils`` to <0.17 until breaking behaviour is fixed (16133)
- Remove ``TaskInstance.log_filepath`` attribute (15217)
- Removes unnecessary function call in ``airflow/www/app.py`` (15956)
- Move ``plyvel`` to google provider extra (15812)
- Update permission migrations to use new naming scheme (16400)
- Use resource and action names for FAB (16380)
- Swap out calls to ``find_permission_view_menu`` for ``get_permission`` wrapper (16377)
- Fix deprecated default for ``fab_logging_level`` to ``WARNING`` (18783)
- Allow running tasks from UI when using ``CeleryKubernetesExecutor`` (18441)

2.1.4

Not secure
Bug Fixes

- Fix deprecation error message rather than silencing it (18126)
- Limit the number of queued dagruns created by the Scheduler (18065)
- Fix ``DagRun`` execution order from queued to running not being properly followed (18061)
- Fix ``max_active_runs`` not allowing moving of queued dagruns to running (17945)
- Avoid redirect loop for users with no permissions (17838)
- Avoid endless redirect loop when user has no roles (17613)
- Fix log links on graph TI modal (17862)
- Hide variable import form if user lacks permission (18000)
- Improve dag/task concurrency check (17786)
- Fix Clear task instances endpoint resets all DAG runs bug (17961)
- Fixes incorrect parameter passed to views (18083) (18085)
- Fix Sentry handler from ``LocalTaskJob`` causing error (18119)
- Limit ``colorlog`` version (6.x is incompatible) (18099)
- Only show Pause/Unpause tooltip on hover (17957)
- Improve graph view load time for dags with open groups (17821)
- Increase width for Run column (17817)
- Fix wrong query on running tis (17631)
- Add root to tree refresh url (17633)
- Do not delete running DAG from the UI (17630)
- Improve discoverability of Provider packages' functionality
- Do not let ``create_dagrun`` overwrite explicit ``run_id`` (17728)
- BugFix: Regression on pid reset to allow task start after heartbeat (17333)
- Set task state to failed when pod is DELETED while running (18095)
- Advises the kernel to not cache log files generated by Airflow (18054)
- Sort adopted tasks in ``_check_for_stalled_adopted_tasks`` method (18208)
- Fix ``DagRunState`` enum query for ``MySQLdb`` driver (17886)

Doc only changes

- Update version added fields in airflow/config_templates/config.yml (18128)
- Improve the description of how to handle dynamic task generation (17963)
- Improve cross-links to operators and hooks references (17622)
- Doc: Fix replacing Airflow version for Docker stack (17711)
- Make the providers operators/hooks reference much more usable (17768)
- Update description about the new ``connection-types`` provider meta-data
- Suggest to use secrets backend for variable when it contains sensitive data (17319)
- Improves quick-start docker-compose warnings and documentation (18164)
- Separate Installing from sources section and add more details (18171)
- Doc: Use ``closer.lua`` script for downloading sources (18179)
- Doc: Improve installing from sources (18194)
- Improves installing from sources pages for all components (18251)

2.1.3

Not secure
Bug Fixes

- Fix task retries when they receive ``sigkill`` and have retries and properly handle ``sigterm`` (16301)
- Fix redacting secrets in context exceptions. (17618)
- Fix race condition with dagrun callbacks (16741)
- Add 'queued' to DagRunState (16854)
- Add 'queued' state to DagRun (16401)
- Fix external elasticsearch logs link (16357)
- Add proper warning message when recorded PID is different from current PID (17411)
- Fix running tasks with ``default_impersonation`` config (17229)
- Rescue if a DagRun's DAG was removed from db (17544)
- Fixed broken json_client (17529)
- Handle and log exceptions raised during task callback (17347)
- Fix CLI ``kubernetes cleanup-pods`` which fails on invalid label key (17298)
- Show serialization exceptions in DAG parsing log (17277)
- Fix: ``TaskInstance`` does not show ``queued_by_job_id`` & ``external_executor_id`` (17179)
- Adds more explanatory message when ``SecretsMasker`` is not configured (17101)
- Enable the use of ``__init_subclass__`` in subclasses of ``BaseOperator`` (17027)
- Fix task instance retrieval in XCom view (16923)
- Validate type of ``priority_weight`` during parsing (16765)
- Correctly handle custom ``deps` and ``task_group`` during DAG Serialization (16734)
- Fix slow (cleared) tasks being be adopted by Celery worker. (16718)
- Fix calculating duration in tree view (16695)
- Fix ``AttributeError``: ``datetime.timezone`` object has no attribute ``name`` (16599)
- Redact conn secrets in webserver logs (16579)
- Change graph focus to top of view instead of center (16484)
- Fail tasks in scheduler when executor reports they failed (15929)
- fix(smart_sensor): Unbound variable errors (14774)
- Add back missing permissions to ``UserModelView`` controls. (17431)
- Better diagnostics and self-healing of docker-compose (17484)
- Improve diagnostics message when users have ``secret_key`` mis-configured (17410)
- Stop checking ``execution_date`` in ``task_instance.refresh_from_db`` (16809)

Improvements

- Run mini scheduler in ``LocalTaskJob`` during task exit (16289)
- Remove ``SQLAlchemy<1.4`` constraint (16630)
- Bump Jinja2 upper-bound from 2.12.0 to 4.0.0 (16595)
- Bump ``dnspython`` (16698)
- Updates to ``FlaskAppBuilder`` 3.3.2+ (17208)
- Add State types for tasks and DAGs (15285)
- Set Process title for Worker when using ``LocalExecutor`` (16623)
- Move ``DagFileProcessor`` and ``DagFileProcessorProcess`` out of ``scheduler_job.py`` (16581)

Doc-only changes

- Fix inconsistencies in configuration docs (17317)
- Fix docs link for using SQLite as Metadata DB (17308)


Misc

- Switch back http provider after requests removes LGPL dependency (16974)

2.1.2

Not secure
Bug Fixes

- Only allow the webserver to request from the worker log server (16754)
- Fix "Invalid JSON configuration, must be a dict" bug (16648)
- Fix ``CeleryKubernetesExecutor`` (16700)
- Mask value if the key is ``token`` (16474)
- Fix impersonation issue with ``LocalTaskJob`` (16852)

Misc

- Add Python 3.9 support (15515)

2.1.1

Not secure
Bug Fixes

- Don't crash attempting to mask secrets in dict with non-string keys (16601)
- Always install sphinx_airflow_theme from ``PyPI`` (16594)
- Remove limitation for elasticsearch library (16553)
- Adding extra requirements for build and runtime of the PROD image. (16170)
- Cattrs 1.7.0 released by the end of May 2021 break lineage usage (16173)
- Removes unnecessary packages from setup_requires (16139)
- Pins docutils to <0.17 until breaking behaviour is fixed (16133)
- Improvements for Docker Image docs (14843)
- Ensure that ``dag_run.conf`` is a dict (15057)
- Fix CLI connections import and migrate logic from secrets to Connection model (15425)
- Fix Dag Details start date bug (16206)
- Fix DAG run state not updated while DAG is paused (16343)
- Allow null value for operator field in task_instance schema(REST API) (16516)
- Avoid recursion going too deep when redacting logs (16491)
- Backfill: Don't create a DagRun if no tasks match task regex (16461)
- Tree View UI for larger DAGs & more consistent spacing in Tree View (16522)
- Correctly handle None returns from Query.scalar() (16345)
- Adding ``only_active`` parameter to /dags endpoint (14306)
- Don't show stale Serialized DAGs if they are deleted in DB (16368)
- Make REST API List DAGs endpoint consistent with UI/CLI behaviour (16318)
- Support remote logging in elasticsearch with ``filebeat 7`` (14625)
- Queue tasks with higher priority and earlier execution_date first. (15210)
- Make task ID on legend have enough width and width of line chart to be 100%. (15915)
- Fix normalize-url vulnerability (16375)
- Validate retries value on init for better errors (16415)
- add num_runs query param for tree refresh (16437)
- Fix templated default/example values in config ref docs (16442)
- Add ``passphrase`` and ``private_key`` to default sensitive field names (16392)
- Fix tasks in an infinite slots pool were never scheduled (15247)
- Fix Orphaned tasks stuck in CeleryExecutor as running (16550)
- Don't fail to log if we can't redact something (16118)
- Set max tree width to 1200 pixels (16067)
- Fill the "job_id" field for ``airflow task run`` without ``--local``/``--raw`` for KubeExecutor (16108)
- Fixes problem where conf variable was used before initialization (16088)
- Fix apply defaults for task decorator (16085)
- Parse recently modified files even if just parsed (16075)
- Ensure that we don't try to mask empty string in logs (16057)
- Don't die when masking ``log.exception`` when there is no exception (16047)
- Restores apply_defaults import in base_sensor_operator (16040)
- Fix auto-refresh in tree view When webserver ui is not in ``/`` (16018)
- Fix dag.clear() to set multiple dags to running when necessary (15382)
- Fix Celery executor getting stuck randomly because of reset_signals in multiprocessing (15989)

2.1.0rc2

Not secure

2.1.0rc1

Not secure
New Features
""""""""""""

- Add ``PythonVirtualenvDecorator`` to Taskflow API (14761)
- Add ``Taskgroup`` decorator (15034)
- Create a DAG Calendar View (15423)
- Create cross-DAG dependencies view (13199)
- Add rest API to query for providers (13394)
- Mask passwords and sensitive info in task logs and UI (15599)
- Add ``SubprocessHook`` for running commands from operators (13423)
- Add DAG Timeout in UI page "DAG Details" (14165)
- Add ``WeekDayBranchOperator`` (13997)
- Add JSON linter to DAG Trigger UI (13551)
- Add DAG Description Doc to Trigger UI Page (13365)
- Add airflow webserver URL into SLA miss email. (13249)
- Add read only REST API endpoints for users (14735)
- Add files to generate Airflow's Python SDK (14739)
- Add dynamic fields to snowflake connection (14724)
- Add read only REST API endpoint for roles and permissions (14664)
- Add new datetime branch operator (11964)
- Add Google leveldb hook and operator (13109) (14105)
- Add plugins endpoint to the REST API (14280)
- Add ``worker_pod_pending_timeout`` support (15263)
- Add support for labeling DAG edges (15142)
- Add CUD REST API endpoints for Roles (14840)
- Import connections from a file (15177)
- A bunch of ``template_fields_renderers`` additions (15130)
- Add REST API query sort and order to some endpoints (14895)
- Add timezone context in new ui (15096)
- Add query mutations to new UI (15068)
- Add different modes to sort dag files for parsing (15046)
- Auto refresh on Tree View (15474)
- BashOperator to raise ``AirflowSkipException`` on exit code 99 (by default, configurable) (13421) (14963)
- Clear tasks by task ids in REST API (14500)
- Support jinja2 native Python types (14603)
- Allow celery workers without gossip or mingle modes (13880)
- Add ``airflow jobs check`` CLI command to check health of jobs (Scheduler etc) (14519)
- Rename ``DateTimeBranchOperator`` to ``BranchDateTimeOperator`` (14720)

Improvements
""""""""""""

- Add optional result handler callback to ``DbApiHook`` (15581)
- Update Flask App Builder limit to recently released 3.3 (15792)
- Prevent creating flask sessions on REST API requests (15295)
- Sync DAG specific permissions when parsing (15311)
- Increase maximum length of pool name on Tasks to 256 characters (15203)
- Enforce READ COMMITTED isolation when using mysql (15714)
- Auto-apply ``apply_default`` to subclasses of ``BaseOperator`` (15667)
- Emit error on duplicated DAG ID (15302)
- Update ``KubernetesExecutor`` pod templates to allow access to IAM permissions (15669)
- More verbose logs when running ``airflow db check-migrations`` (15662)
- When one_success mark task as failed if no success (15467)
- Add an option to trigger a dag w/o changing conf (15591)
- Add Airflow UI instance_name configuration option (10162)
- Add a decorator to retry functions with DB transactions (14109)
- Add return to PythonVirtualenvOperator's execute method (14061)
- Add verify_ssl config for kubernetes (13516)
- Add description about ``secret_key`` when Webserver > 1 (15546)
- Add Traceback in LogRecord in ``JSONFormatter`` (15414)
- Add support for arbitrary json in conn uri format (15100)
- Adds description field in variable (12413) (15194)
- Add logs to show last modified in SFTP, FTP and Filesystem sensor (15134)
- Execute ``on_failure_callback`` when SIGTERM is received (15172)
- Allow hiding of all edges when highlighting states (15281)
- Display explicit error in case UID has no actual username (15212)
- Serve logs with Scheduler when using Local or Sequential Executor (15557)
- Deactivate trigger, refresh, and delete controls on dag detail view. (14144)
- Turn off autocomplete for connection forms (15073)
- Increase default ``worker_refresh_interval`` to ``6000`` seconds (14970)
- Only show User's local timezone if it's not UTC (13904)
- Suppress LOG/WARNING for a few tasks CLI for better CLI experience (14567)
- Configurable API response (CORS) headers (13620)
- Allow viewers to see all docs links (14197)
- Update Tree View date ticks (14141)
- Make the tooltip to Pause / Unpause a DAG clearer (13642)
- Warn about precedence of env var when getting variables (13501)
- Move ``[celery] default_queue`` config to ``[operators] default_queue`` to re-use between executors (14699)

Bug Fixes
"""""""""

- Fix 500 error from ``updateTaskInstancesState`` API endpoint when ``dry_run`` not passed (15889)
- Ensure that task preceding a PythonVirtualenvOperator doesn't fail (15822)
- Prevent mixed case env vars from crashing processes like worker (14380)
- Fixed type annotations in DAG decorator (15778)
- Fix on_failure_callback when task receive SIGKILL (15537)
- Fix dags table overflow (15660)
- Fix changing the parent dag state on subdag clear (15562)
- Fix reading from zip package to default to text (13962)
- Fix wrong parameter for ``drawDagStatsForDag`` in dags.html (13884)
- Fix QueuedLocalWorker crashing with EOFError (13215)
- Fix typo in ``NotPreviouslySkippedDep`` (13933)
- Fix parallelism after KubeExecutor pod adoption (15555)
- Fix kube client on mac with keepalive enabled (15551)
- Fixes wrong limit for dask for python>3.7 (should be <3.7) (15545)
- Fix Task Adoption in ``KubernetesExecutor`` (14795)
- Fix timeout when using XCom with ``KubernetesPodOperator`` (15388)
- Fix deprecated provider aliases in "extras" not working (15465)
- Fixed default XCom deserialization. (14827)
- Fix used_group_ids in ``dag.partial_subset`` (13700) (15308)
- Further fix trimmed ``pod_id`` for ``KubernetesPodOperator`` (15445)
- Bugfix: Invalid name when trimmed `pod_id` ends with hyphen in ``KubernetesPodOperator`` (15443)
- Fix incorrect slots stats when TI ``pool_slots > 1`` (15426)
- Fix DAG last run link (15327)
- Fix ``sync-perm`` to work correctly when update_fab_perms = False (14847)
- Fixes limits on Arrow for plexus test (14781)
- Fix UI bugs in tree view (14566)
- Fix AzureDataFactoryHook failing to instantiate its connection (14565)
- Fix permission error on non-POSIX filesystem (13121)
- Fix spelling in "ignorable" (14348)
- Fix get_context_data doctest import (14288)
- Correct typo in ``GCSObjectsWtihPrefixExistenceSensor`` (14179)
- Fix order of failed deps (14036)
- Fix critical ``CeleryKubernetesExecutor`` bug (13247)
- Fix four bugs in ``StackdriverTaskHandler`` (13784)
- ``func.sum`` may return ``Decimal`` that break rest APIs (15585)
- Persist tags params in pagination (15411)
- API: Raise ``AlreadyExists`` exception when the ``execution_date`` is same (15174)
- Remove duplicate call to ``sync_metadata`` inside ``DagFileProcessorManager`` (15121)
- Extra ``docker-py`` update to resolve docker op issues (15731)
- Ensure executors end method is called (14085)
- Remove ``user_id`` from API schema (15117)
- Prevent clickable bad links on disabled pagination (15074)
- Acquire lock on db for the time of migration (10151)
- Skip SLA check only if SLA is None (14064)
- Print right version in airflow info command (14560)
- Make ``airflow info`` work with pipes (14528)
- Rework client-side script for connection form. (14052)
- API: Add ``CollectionInfo`` in all Collections that have ``total_entries`` (14366)
- Fix ``task_instance_mutation_hook`` when importing airflow.models.dagrun (15851)

Doc only changes
""""""""""""""""

- Fix docstring of SqlSensor (15466)
- Small changes on "DAGs and Tasks documentation" (14853)
- Add note on changes to configuration options (15696)
- Add docs to the ``markdownlint`` and ``yamllint`` config files (15682)
- Rename old "Experimental" API to deprecated in the docs. (15653)
- Fix documentation error in `git_sync_template.yaml` (13197)
- Fix doc link permission name (14972)
- Fix link to Helm chart docs (14652)
- Fix docstrings for Kubernetes code (14605)
- docs: Capitalize & minor fixes (14283) (14534)
- Fixed reading from zip package to default to text. (13984)
- An initial rework of the "Concepts" docs (15444)
- Improve docstrings for various modules (15047)
- Add documentation on database connection URI (14124)
- Add Helm Chart logo to docs index (14762)
- Create a new documentation package for Helm Chart (14643)
- Add docs about supported logging levels (14507)
- Update docs about tableau and salesforce provider (14495)
- Replace deprecated doc links to the correct one (14429)
- Refactor redundant doc url logic to use utility (14080)
- docs: NOTICE: Updated 2016-2019 to 2016-now (14248)
- Skip DAG perm sync during parsing if possible (15464)
- Add picture and examples for Edge Labels (15310)
- Add example DAG & how-to guide for sqlite (13196)
- Add links to new modules for deprecated modules (15316)
- Add note in Updating.md about FAB data model change (14478)

Misc/Internal
"""""""""""""

- Fix ``logging.exception`` redundancy (14823)
- Bump ``stylelint`` to remove vulnerable sub-dependency (15784)
- Add resolution to force dependencies to use patched version of lodash (15777)
- Update croniter to 1.0.x series (15769)
- Get rid of Airflow 1.10 in Breeze (15712)
- Run helm chart tests in parallel (15706)
- Bump ``ssri`` from 6.0.1 to 6.0.2 in /airflow/www (15437)
- Remove the limit on Gunicorn dependency (15611)
- Better "dependency already registered" warning message for tasks 14613 (14860)
- Pin pandas-gbq to <0.15.0 (15114)
- Use Pip 21.* to install airflow officially (15513)
- Bump mysqlclient to support the 1.4.x and 2.x series (14978)
- Finish refactor of DAG resource name helper (15511)
- Refactor/Cleanup Presentation of Graph Task and Path Highlighting (15257)
- Standardize default fab perms (14946)
- Remove ``datepicker`` for task instance detail view (15284)
- Turn provider's import warnings into debug logs (14903)
- Remove left-over fields from required in provider_info schema. (14119)
- Deprecate ``tableau`` extra (13595)
- Use built-in `cached_property` on Python 3.8 where possible (14606)
- Clean-up JS code in UI templates (14019)
- Bump elliptic from 6.5.3 to 6.5.4 in /airflow/www (14668)
- Switch to f-strings using ``flynt``. (13732)
- use ``jquery`` ready instead of vanilla js (15258)
- Migrate task instance log (ti_log) js (15309)
- Migrate graph js (15307)
- Migrate dags.html javascript (14692)
- Removes unnecessary AzureContainerInstance connection type (15514)
- Separate Kubernetes pod_launcher from core airflow (15165)
- update remaining old import paths of operators (15127)
- Remove broken and undocumented "demo mode" feature (14601)
- Simplify configuration/legibility of ``Webpack`` entries (14551)
- remove inline tree js (14552)
- Js linting and inline migration for simple scripts (14215)
- Remove use of repeated constant in AirflowConfigParser (14023)
- Deprecate email credentials from environment variables. (13601)
- Remove unused 'context' variable in task_instance.py (14049)
- Disable suppress_logs_and_warning in cli when debugging (13180)

2.0.2

Not secure
Bug Fixes

* Bugfix: ``TypeError`` when Serializing & sorting iterable properties of DAGs (15395)
* Fix missing ``on_load`` trigger for folder-based plugins (15208)
* ``kubernetes cleanup-pods`` subcommand will only clean up Airflow-created Pods (15204)
* Fix password masking in CLI action_logging (15143)
* Fix url generation for TriggerDagRunOperatorLink (14990)
* Restore base lineage backend (14146)
* Unable to trigger backfill or manual jobs with Kubernetes executor. (14160)
* Bugfix: Task docs are not shown in the Task Instance Detail View (15191)
* Bugfix: Fix overriding ``pod_template_file`` in KubernetesExecutor (15197)
* Bugfix: resources in ``executor_config`` breaks Graph View in UI (15199)
* Fix celery executor bug trying to call len on map (14883)
* Fix bug in airflow.stats timing that broke dogstatsd mode (15132)
* Avoid scheduler/parser manager deadlock by using non-blocking IO (15112)
* Re-introduce ``dagrun.schedule_delay`` metric (15105)
* Compare string values, not if strings are the same object in Kube executor(14942)
* Pass queue to BaseExecutor.execute_async like in airflow 1.10 (14861)
* Scheduler: Remove TIs from starved pools from the critical path. (14476)
* Remove extra/needless deprecation warnings from airflow.contrib module (15065)
* Fix support for long dag_id and task_id in KubernetesExecutor (14703)
* Sort lists, sets and tuples in Serialized DAGs (14909)
* Simplify cleaning string passed to origin param (14738) (14905)
* Fix error when running tasks with Sentry integration enabled. (13929)
* Webserver: Sanitize string passed to origin param (14738)
* Fix losing duration < 1 secs in tree (13537)
* Pin SQLAlchemy to <1.4 due to breakage of sqlalchemy-utils (14812)
* Fix KubernetesExecutor issue with deleted pending pods (14810)
* Default to Celery Task model when backend model does not exist (14612)
* Bugfix: Plugins endpoint was unauthenticated (14570)
* BugFix: fix DAG doc display (especially for TaskFlow DAGs) (14564)
* BugFix: TypeError in airflow.kubernetes.pod_launcher's monitor_pod (14513)
* Bugfix: Fix wrong output of tags and owners in dag detail API endpoint (14490)
* Fix logging error with task error when JSON logging is enabled (14456)
* Fix statsd metrics not sending when using daemon mode (14454)
* Gracefully handle missing start_date and end_date for DagRun (14452)
* BugFix: Serialize max_retry_delay as a timedelta (14436)
* Fix crash when user clicks on "Task Instance Details" caused by start_date being None (14416)
* BugFix: Fix TaskInstance API call fails if a task is removed from running DAG (14381)
* Scheduler should not fail when invalid ``executor_config`` is passed (14323)
* Fix bug allowing task instances to survive when dagrun_timeout is exceeded (14321)
* Fix bug where DAG timezone was not always shown correctly in UI tooltips (14204)
* Use ``Lax`` for ``cookie_samesite`` when empty string is passed (14183)
* [AIRFLOW-6076] fix ``dag.cli()`` KeyError (13647)
* Fix running child tasks in a subdag after clearing a successful subdag (14776)

Improvements

* Remove unused JS packages causing false security alerts (15383)
* Change default of ``[kubernetes] enable_tcp_keepalive`` for new installs to ``True`` (15338)
* Fixed 14270: Add error message in OOM situations (15207)
* Better compatibility/diagnostics for arbitrary UID in docker image (15162)
* Updates 3.6 limits for latest versions of a few libraries (15209)
* Adds Blinker dependency which is missing after recent changes (15182)
* Remove 'conf' from search_columns in DagRun View (15099)
* More proper default value for namespace in K8S cleanup-pods CLI (15060)
* Faster default role syncing during webserver start (15017)
* Speed up webserver start when there are many DAGs (14993)
* Much easier to use and better documented Docker image (14911)
* Use ``libyaml`` C library when available. (14577)
* Don't create unittest.cfg when not running in unit test mode (14420)
* Webserver: Allow Filtering TaskInstances by queued_dttm (14708)
* Update Flask-AppBuilder dependency to allow 3.2 (and all 3.x series) (14665)
* Remember expanded task groups in browser local storage (14661)
* Add plain format output to cli tables (14546)
* Make ``airflow dags show`` command display TaskGroups (14269)
* Increase maximum size of ``extra`` connection field. (12944)
* Speed up clear_task_instances by doing a single sql delete for TaskReschedule (14048)
* Add more flexibility with FAB menu links (13903)
* Add better description and guidance in case of sqlite version mismatch (14209)

Doc only changes

* Add documentation create/update community providers (15061)
* Fix mistake and typos in airflow.utils.timezone docstrings (15180)
* Replace new url for Stable Airflow Docs (15169)
* Docs: Clarify behavior of delete_worker_pods_on_failure (14958)
* Create a documentation package for Docker image (14846)
* Multiple minor doc (OpenAPI) fixes (14917)
* Replace Graph View Screenshot to show Auto-refresh (14571)

Misc/Internal

* Import Connection lazily in hooks to avoid cycles (15361)
* Rename last_scheduler_run into last_parsed_time, and ensure it's updated in DB (14581)
* Make TaskInstance.pool_slots not nullable with a default of 1 (14406)
* Log migrations info in consistent way (14158)

2.0.1

Not secure
Bug Fixes


- Bugfix: Return XCom Value in the XCom Endpoint API (13684)
- Bugfix: Import error when using custom backend and ``sql_alchemy_conn_secret`` (13260)
- Allow PID file path to be relative when daemonize a process (scheduler, kerberos, etc) (13232)
- Bugfix: no generic ``DROP CONSTRAINT`` in MySQL during ``airflow db upgrade`` (13239)
- Bugfix: Sync Access Control defined in DAGs when running ``sync-perm`` (13377)
- Stop sending Callback Requests if no callbacks are defined on DAG (13163)
- BugFix: Dag-level Callback Requests were not run (13651)
- Stop creating duplicate Dag File Processors (13662)
- Filter DagRuns with Task Instances in removed State while Scheduling (13165)
- Bump ``datatables.net`` from 1.10.21 to 1.10.22 in /airflow/www (13143)
- Bump ``datatables.net`` JS to 1.10.23 (13253)
- Bump ``dompurify`` from 2.0.12 to 2.2.6 in /airflow/www (13164)
- Update minimum ``cattrs`` version (13223)
- Remove inapplicable arg 'output' for CLI pools import/export (13071)
- Webserver: Fix the behavior to deactivate the authentication option and add docs (13191)
- Fix: add support for no-menu plugin views (11742)
- Add ``python-daemon`` limit for python 3.8+ to fix daemon crash (13540)
- Change the default celery ``worker_concurrency`` to 16 (13612)
- Audit Log records View should not contain link if ``dag_id`` is None (13619)
- Fix invalid ``continue_token`` for cleanup list pods (13563)
- Switches to latest version of snowflake connector (13654)
- Fix backfill crash on task retry or reschedule (13712)
- Setting ``max_tis_per_query`` to ``0`` now correctly removes the limit (13512)
- Fix race conditions in task callback invocations (10917)
- Fix webserver exiting when gunicorn master crashes (13518)(13780)
- Fix SQL syntax to check duplicate connections (13783)
- ``BaseBranchOperator`` will push to xcom by default (13704) (13763)
- Fix Deprecation for ``configuration.getsection`` (13804)
- Fix TaskNotFound in log endpoint (13872)
- Fix race condition when using Dynamic DAGs (13893)
- Fix: Linux/Chrome window bouncing in Webserver
- Fix db shell for sqlite (13907)
- Only compare updated time when Serialized DAG exists (13899)
- Fix dag run type enum query for mysqldb driver (13278)
- Add authentication to lineage endpoint for experimental API (13870)
- Do not add User role perms to custom roles. (13856)
- Do not add ``Website.can_read`` access to default roles. (13923)
- Fix invalid value error caused by long Kubernetes pod name (13299)
- Fix DB Migration for SQLite to upgrade to 2.0 (13921)
- Bugfix: Manual DagRun trigger should not skip scheduled runs (13963)
- Stop loading Extra Operator links in Scheduler (13932)
- Added missing return parameter in read function of ``FileTaskHandler`` (14001)
- Bugfix: Do not try to create a duplicate Dag Run in Scheduler (13920)
- Make ``v1/config`` endpoint respect webserver ``expose_config`` setting (14020)
- Disable row level locking for Mariadb and MySQL <8 (14031)
- Bugfix: Fix permissions to triggering only specific DAGs (13922)
- Fix broken SLA Mechanism (14056)
- Bugfix: Scheduler fails if task is removed at runtime (14057)
- Remove permissions to read Configurations for User and Viewer roles (14067)
- Fix DB Migration from 2.0.1rc1

Improvements

- Increase the default ``min_file_process_interval`` to decrease CPU Usage (13664)
- Dispose connections when running tasks with ``os.fork`` & ``CeleryExecutor`` (13265)
- Make function purpose clearer in ``example_kubernetes_executor`` example dag (13216)
- Remove unused libraries - ``flask-swagger``, ``funcsigs`` (13178)
- Display alternative tooltip when a Task has yet to run (no TI) (13162)
- User werkzeug's own type conversion for request args (13184)
- UI: Add ``queued_by_job_id`` & ``external_executor_id`` Columns to TI View (13266)
- Make ``json-merge-patch`` an optional library and unpin it (13175)
- Adds missing LDAP "extra" dependencies to ldap provider. (13308)
- Refactor ``setup.py`` to better reflect changes in providers (13314)
- Pin ``pyjwt`` and Add integration tests for Apache Pinot (13195)
- Removes provider-imposed requirements from ``setup.cfg`` (13409)
- Replace deprecated decorator (13443)
- Streamline & simplify ``__eq__`` methods in models Dag and BaseOperator (13449)
- Additional properties should be allowed in provider schema (13440)
- Remove unused dependency - ``contextdecorator`` (13455)
- Remove 'typing' dependency (13472)
- Log migrations info in consistent way (13458)
- Unpin ``mysql-connector-python`` to allow ``8.0.22`` (13370)
- Remove thrift as a core dependency (13471)
- Add ``NotFound`` response for DELETE methods in OpenAPI YAML (13550)
- Stop Log Spamming when ``[core] lazy_load_plugins`` is ``False`` (13578)
- Display message and docs link when no plugins are loaded (13599)
- Unpin restriction for ``colorlog`` dependency (13176)
- Add missing Dag Tag for Example DAGs (13665)
- Support tables in DAG docs (13533)
- Add ``python3-openid`` dependency (13714)
- Add ``__repr__`` for Executors (13753)
- Add description to hint if ``conn_type`` is missing (13778)
- Upgrade azure blob to v12 (12188)
- Add extra field to ``get_connnection`` REST endpoint (13885)
- Make Smart Sensors DB Migration idempotent (13892)
- Improve the error when DAG does not exist when running dag pause command (13900)
- Update ``airflow_local_settings.py`` to fix an error message (13927)
- Only allow passing JSON Serializable conf to ``TriggerDagRunOperator`` (13964)
- Bugfix: Allow getting details of a DAG with null ``start_date`` (REST API) (13959)
- Add params to the DAG details endpoint (13790)
- Make the role assigned to anonymous users customizable (14042)
- Retry critical methods in Scheduler loop in case of ``OperationalError`` (14032)

Doc only changes

- Add Missing Statsd Metrics in Docs (13708)
- Add Missing Email configs in Configuration doc (13709)
- Add quick start for Airflow on Docker (13660)
- Describe which Python versions are supported (13259)
- Add note block to 2.x migration docs (13094)
- Add documentation about webserver_config.py (13155)
- Add missing version information to recently added configs (13161)
- API: Use generic information in UpdateMask component (13146)
- Add Airflow 2.0.0 to requirements table (13140)
- Avoid confusion in doc for CeleryKubernetesExecutor (13116)
- Update docs link in REST API spec (13107)
- Add link to PyPI Repository to provider docs (13064)
- Fix link to Airflow master branch documentation (13179)
- Minor enhancements to Sensors docs (13381)
- Use 2.0.0 in Airflow docs & Breeze (13379)
- Improves documentation regarding providers and custom connections (13375)(13410)
- Fix malformed table in production-deployment.rst (13395)
- Update celery.rst to fix broken links (13400)
- Remove reference to scheduler run_duration param in docs (13346)
- Set minimum SQLite version supported (13412)
- Fix installation doc (13462)
- Add docs about mocking variables and connections (13502)
- Add docs about Flask CLI (13500)
- Fix Upgrading to 2 guide to use ``rbac`` UI (13569)
- Make docs clear that Auth can not be disabled for Stable API (13568)
- Remove archived links from docs & add link for AIPs (13580)
- Minor fixes in upgrading-to-2.rst (13583)
- Fix Link in Upgrading to 2.0 guide (13584)
- Fix heading for Mocking section in best-practices.rst (13658)
- Add docs on how to use custom operators within plugins folder (13186)
- Update docs to register Operator Extra Links (13683)
- Improvements for database setup docs (13696)
- Replace module path to Class with just Class Name (13719)
- Update DAG Serialization docs (13722)
- Fix link to Apache Airflow docs in webserver (13250)
- Clarifies differences between extras and provider packages (13810)
- Add information about all access methods to the environment (13940)
- Docs: Fix FAQ on scheduler latency (13969)
- Updated taskflow api doc to show dependency with sensor (13968)
- Add deprecated config options to docs (13883)
- Added a FAQ section to the Upgrading to 2 doc (13979)

2.0.0

Not secure
The full changelog is about 3,000 lines long (already excluding everything backported to 1.10), so for now I’ll simply share some of the major features in 2.0.0 compared to 1.10.14:

A new way of writing dags: the TaskFlow API (AIP-31)

(Known in 2.0.0alphas as Functional DAGs.)

DAGs are now much much nicer to author especially when using PythonOperator. Dependencies are handled more clearly and XCom is nicer to use


A quick teaser of what DAGs can now look like:

python
from airflow.decorators import dag, task
from airflow.utils.dates import days_ago

dag(default_args={'owner': 'airflow'}, schedule_interval=None, start_date=days_ago(2))
def tutorial_taskflow_api_etl():
task
def extract():
return {"1001": 301.27, "1002": 433.21, "1003": 502.22}

task
def transform(order_data_dict: dict) -> dict:
total_order_value = 0

for value in order_data_dict.values():
total_order_value += value

return {"total_order_value": total_order_value}

task()
def load(total_order_value: float):

print("Total order value is: %.2f" % total_order_value)

order_data = extract()
order_summary = transform(order_data)
load(order_summary["total_order_value"])

tutorial_etl_dag = tutorial_taskflow_api_etl()


Fully specified REST API (AIP-32)

We now have a fully supported, no-longer-experimental API with a comprehensive OpenAPI specification

Read more here:

REST API Documentation.

Massive Scheduler performance improvements

As part of AIP-15 (Scheduler HA+performance) and other work Kamil did, we significantly improved the performance of the Airflow Scheduler. It now starts tasks much, MUCH quicker.

Over at Astronomer.io we’ve benchmarked the scheduler—it’s fast (we had to triple check the numbers as we don’t quite believe them at first!)

Scheduler is now HA compatible (AIP-15)

It’s now possible and supported to run more than a single scheduler instance. This is super useful for both resiliency (in case a scheduler goes down) and scheduling performance.

To fully use this feature you need Postgres 9.6+ or MySQL 8+ (MySQL 5, and MariaDB won’t work with more than one scheduler I’m afraid).

There’s no config or other set up required to run more than one scheduler—just start up a scheduler somewhere else (ensuring it has access to the DAG files) and it will cooperate with your existing schedulers through the database.

For more information, read the Scheduler HA documentation.

Task Groups (AIP-34)

SubDAGs were commonly used for grouping tasks in the UI, but they had many drawbacks in their execution behaviour (primarirly that they only executed a single task in parallel!) To improve this experience, we’ve introduced “Task Groups”: a method for organizing tasks which provides the same grouping behaviour as a subdag without any of the execution-time drawbacks.

SubDAGs will still work for now, but we think that any previous use of SubDAGs can now be replaced with task groups. If you find an example where this isn’t the case, please let us know by opening an issue on GitHub

For more information, check out the Task Group documentation.

Refreshed UI

We’ve given the Airflow UI a visual refresh and updated some of the styling. Check out the UI section of the docs for screenshots.

We have also added an option to auto-refresh task states in Graph View so you no longer need to continuously press the refresh button :).

Smart Sensors for reduced load from sensors (AIP-17)

If you make heavy use of sensors in your Airflow cluster, you might find that sensor execution takes up a significant proportion of your cluster even with “reschedule” mode. To improve this, we’ve added a new mode called “Smart Sensors”.

This feature is in “early-access”: it’s been well-tested by AirBnB and is “stable”/usable, but we reserve the right to make backwards-incompatible changes to it in a future release (if we have to. We’ll try very hard not to!)


Simplified KubernetesExecutor

For Airflow 2.0, we have re-architected the KubernetesExecutor in a fashion that is simultaneously faster, easier to understand, and more flexible for Airflow users. Users will now be able to access the full Kubernetes API to create a .yaml pod_template_file instead of specifying parameters in their airflow.cfg.

We have also replaced the executor_config dictionary with the pod_override parameter, which takes a Kubernetes V1Pod object for a 1:1 setting override. These changes have removed over three thousand lines of code from the KubernetesExecutor, which makes it run faster and creates fewer potential errors.


Airflow core and providers: Splitting Airflow into 60+ packages

Airflow 2.0 is not a monolithic “one to rule them all” package. We’ve split Airflow into core and 61 (for now) provider packages. Each provider package is for either a particular external service (Google, Amazon, Microsoft, Snowflake), a database (Postgres, MySQL), or a protocol (HTTP/FTP). Now you can create a custom Airflow installation from “building” blocks and choose only what you need, plus add whatever other requirements you might have. Some of the common providers are installed automatically (ftp, http, imap, sqlite) as they are commonly used. Other providers are automatically installed when you choose appropriate extras when installing Airflow.

The provider architecture should make it much easier to get a fully customized, yet consistent runtime with the right set of Python dependencies.

But that’s not all: you can write your own custom providers and add things like custom connection types, customizations of the Connection Forms, and extra links to your operators in a manageable way. You can build your own provider and install it as a Python package and have your customizations visible right in the Airflow UI.


Security

As part of Airflow 2.0 effort, there has been a conscious focus on Security and reducing areas of exposure. This is represented across different functional areas in different forms. For example, in the new REST API, all operations now require authorization. Similarly, in the configuration settings, the Fernet key is now required to be specified.

Configuration

Configuration in the form of the airflow.cfg file has been rationalized further in distinct sections, specifically around “core”. Additionally, a significant amount of configuration options have been deprecated or moved to individual component-specific configuration files, such as the pod-template-file for Kubernetes execution-related configuration.


We’ve tried to make as few breaking changes as possible and to provide deprecation path in the code, especially in the case of anything called in the DAG. That said, please read through UPDATING.md to check what might affect you. For example: We re-organized the layout of operators (they now all live under airflow.providers.*) but the old names should continue to work - you’ll just notice a lot of DeprecationWarnings that need to be fixed up.

1.10.15

Not secure
Bug Fixes

- Fix `airflow db upgrade` to upgrade db as intended (13267)
- Moved boto3 limitation to snowflake (13286)
- `KubernetesExecutor` should accept images from `executor_config` (13074)
- Scheduler should acknowledge active runs properly (13803)
- Bugfix: Unable to import Airflow plugins on Python 3.8 (12859)
- Include `airflow/contrib/executors` in the dist package
- Pin Click version for Python 2.7 users
- Ensure all statsd timers use millisecond values. (10633)
- [`kubernetes_generate_dag_yaml`] - Fix dag yaml generate function (13816)
- Fix `airflow tasks clear` cli command wirh `--yes` (14188)
- Fix permission error on non-POSIX filesystem (13121) (14383)
- Fixed deprecation message for "variables" command (14457)
- BugFix: fix the `delete_dag` function of json_client (14441)
- Fix merging of secrets and configmaps for `KubernetesExecutor` (14090)
- Fix webserver exiting when gunicorn master crashes (13470)
- Bump ini from 1.3.5 to 1.3.8 in `airflow/www_rbac`
- Bump datatables.net from 1.10.21 to 1.10.23 in `airflow/www_rbac`
- Webserver: Sanitize string passed to origin param (14738)
- Make `rbac_app`'s `db.session` use the same timezone with `provide_session` (14025)

Improvements

- Adds airflow as viable docker command in official image (12878)
- `StreamLogWriter`: Provide (no-op) close method (10885)
- Add 'airflow variables list' command for 1.10.x transition version (14462)

Doc only changes

- Update URL for Airflow docs (13561)
- Clarifies version args for installing 1.10 in Docker (12875)

1.10.14

Not secure
Bug Fixes

- BugFix: Tasks with ``depends_on_past`` or ``task_concurrency`` are stuck (12663)
- Fix issue with empty Resources in executor_config (12633)
- Fix: Deprecated config ``force_log_out_after`` was not used (12661)
- Fix empty asctime field in JSON formatted logs (10515)
- [AIRFLOW-2809] Fix security issue regarding Flask SECRET_KEY (3651)
- [AIRFLOW-2884] Fix Flask SECRET_KEY security issue in www_rbac (3729)
- [AIRFLOW-2886] Generate random Flask SECRET_KEY in default config (3738)
- Add missing comma in setup.py (12790)
- Bugfix: Unable to import Airflow plugins on Python 3.8 (12859)
- Fix setup.py missing comma in ``setup_requires`` (12880)
- Don't emit first_task_scheduling_delay metric for only-once dags (12835)

Improvements

- Update setup.py to get non-conflicting set of dependencies (12636)
- Rename ``[scheduler] max_threads`` to ``[scheduler] parsing_processes`` (12605)
- Add metric for scheduling delay between first run task & expected start time (9544)
- Add new-style 2.0 command names for Airflow 1.10.x (12725)
- Add Kubernetes cleanup-pods CLI command for Helm Chart (11802)
- Don't let webserver run with dangerous config (12747)
- Replace pkg_resources with importlib.metadata to avoid VersionConflict errors (12694)

Doc only changes

- Clarified information about supported Databases

1.6.0

New Features

- Support ``annotations`` on ``volumeClaimTemplates`` (23433)
- Add support for ``topologySpreadConstraints`` to Helm Chart (22712)
- Helm support for LocalKubernetesExecutor (22388)
- Add ``securityContext`` config for Redis to Helm chart (22182)
- Allow ``annotations`` on Helm DAG PVC (22261)
- enable optional ``subPath`` for DAGs volume mount (22323)
- Added support to override ``auth_type`` in ``auth_file`` in PgBouncer Helm configuration (21999)
- Add ``extraVolumeMounts`` to Flower (22414)
- Add webserver ``PodDisruptionBudget`` (21735)

Improvements

- Ensure the messages from migration job show up early (23479)
- Allow migration jobs and init containers to be optional (22195)
- Use jobs check command for liveness probe check in Airflow 2 (22143)

Doc only changes

- Adds ``resultBackendSecretName`` warning in Helm production docs (23307)

Misc

- Update default Airflow version to ``2.3.0`` (23386)
- Move the database configuration to a new section (22284)
- Disable flower in chart by default (23737)

1.5.0

New Features
- Add support for custom command and args in jobs (20864)
- Support for ``priorityClassName`` (20794)
- Add ``envFrom`` to the Flower deployment (21401)
- Add annotations to cleanup pods (21484)

Improvements
- Speedup liveness probe for scheduler and triggerer (20833, 21108, 22041)
- Update git-sync to v3.4.0 (21309)
- Remove default auth backend setting (21640)

Bug Fixes
- Fix elasticsearch URL when username/password are empty (21222)
- Mount ``airflow.cfg`` in wait-for-airflow-migrations containers (20609)
- Grant pod log reader to triggerer serviceaccount (21111)

Doc only changes
- Simplify chart docs for configuring Airflow (21747)
- Add extra information about time synchronization needed (21685)
- Fix extra containers docs (20787)
- Fix example DAGs env var in quickstart (21990)

Misc
- Use ``2.2.4`` as default Airflow version (21745)
- Change Redis image to bullseye (21875)

1.4.0

- Add `conf` not importable from airflow rule (14400)
- Upgrade rule to suggest rename `[scheduler] max_threads` to `[scheduler] parsing_processes` (14913)
- Fix running "upgrade_check" command in a PTY. (14977)
- Skip `DatabaseVersionCheckRule` check if invalid version is detected (15122)
- Fix too specific parsing of `False` in `LegacyUIDeprecated` (14967)
- Fix false positives when inheriting classes that inherit ``DbApiHook`` (16543)

1.3.0

New Features

- Chart: Add resources for ``cleanup`` and ``createuser`` jobs (19263)
- Chart: Add labels to jobs created by cleanup pods (19225)
- Add migration job resources (19175)
- Allow custom pod annotations to all components (18481)
- Chart: Make PgBouncer cmd/args configurable (18910)
- Chart: Use python 3.7 by default; support disabling triggerer (18920)

Improvements

- Chart: Increase default liveness probe timeout (19003)
- Chart: Mount DAGs in triggerer (18753)

Bug Fixes

- Allow Airflow UI to create worker pod via Clear > Run (18272)
- Allow airflow standard images to run in openshift utilising the official helm chart 18136 (18147)

Doc only changes

- Chart: Fix `extraEnvFrom` examples (19144)
- Chart docs: Update webserver secret key reference configuration (18595)
- Fix helm chart links in source install guide (18588)

Misc

- Chart: Update default Airflow version to ``2.2.1`` (19326)
- Modernize dockerfiles builds (19327)
- Chart: Use strict k8s schemas for template validation (19379)

1.2.0

New Features
- Add Triggerer to Helm Chart (17743)
- Chart: warn when webserver secret key isn't set (18306)
- add ``extraContainers`` for ``migrateDatabaseJob`` (18379)
- Labels on job templates (18403)
- Chart: Allow running and waiting for DB Migrations using default image (18218)
- Chart: Make cleanup cronjob cmd/args configuable (17970)
- Chart: configurable number of retention days for log groomers (17764)
- Chart: Add ``loadBalancerSourceRanges`` in webserver and flower services (17666)
- Chart: Support ``extraContainers`` in k8s workers (17562)


Improvements
- Switch to latest version of PGBouncer-Exporter (18429)
- Chart: Ability to access http k8s via multiple hostnames (18257)
- Chart: Use stable API versions where available (17211)
- Chart: Allow ``podTemplate`` to be templated (17560)

Bug Fixes
- Chart: Fix applying ``labels`` on Triggerer (18299)
- Fixes warm shutdown for celery worker. (18068)
- Chart: Fix minor Triggerer issues (18105)
- Chart: fix webserver secret key update (18079)
- Chart: fix running with ``uid`` ``0`` (17688)
- Chart: use serviceaccount template for log reader rolebinding (17645)
- Chart: Fix elasticsearch-secret template port default function (17428)
- KEDA task count query should ignore k8s queue (17433)

Doc only changes
- Chart Doc: Delete extra space in adding connections doc (18424)
- Improves installing from sources pages for all components (18251)
- Chart docs: Format ``loadBalancerSourceRanges`` using code-block (17763)
- Doc: Fix a broken link in an ssh-related warning message (17294)
- Chart: Add instructions to Update Helm Repo before upgrade (17282)
- Chart docs: better note for logs existing pvc permissions (17177)

Misc
- Chart: Update the default Airflow version to ``2.1.4`` (18354)

1.1.0

New Features

- Chart: Allow using ``krb5.conf`` with ``CeleryExecutor`` (16822)
- Chart: Refactor webserver and flower networkpolicy (16619)
- Chart: Apply worker's node assigning settings to Pod Template File (16663)
- Chart: Support for overriding webserver and flower service ports (16572)
- Chart: Support ``extraContainers`` and ``extraVolumes`` in flower (16515)
- Chart: Allow configuration of pod resources in helm chart (16425)
- Chart: Support job level annotations; fix jobs scheduling config (16331)
- feat: Helm chart adding ``minReplicaCount`` to the Keda ``worker-kedaautoscaler.yaml`` (16262)
- Chart: Adds support for custom command and args (16153)
- Chart: Add extra ini config to ``pgbouncer`` (16120)
- Chart: Add ``extraInitContainers`` to scheduler/webserver/workers (16098)
- Configurable resources for git-sync sidecar (16080)
- Chart: Template ``airflowLocalSettings`` and ``webserver.webserverConfig`` (16074)
- Support ``strategy``/``updateStrategy`` on scheduler (16069)
- Chart: Add both airflow and extra annotations to jobs (16058)
- ``loadBalancerIP`` and ``annotations`` for both Flower and Webserver (15972)

Improvements

- Chart: Update Postgres subchart to 10.5.3 (17041)
- Chart: Update the default Airflow version to ``2.1.2`` (17013)
- Update default image as ``2.1.1`` for Helm Chart (16785)
- Chart: warn when using default logging with ``KubernetesExecutor`` (16784)
- Drop support for Helm 2 (16575)
- Chart: ``podAntiAffinity`` for scheduler, webserver, and workers (16315)
- Chart: Update the default Airflow Version to ``2.1.0`` (16273)
- Chart: Only mount DAGs in webserver when required (16229)
- Chart: Remove ``git-sync``: ``root`` and ``dest`` params (15955)
- Chart: Add warning about missing ``knownHosts`` (15950)

Bug Fixes

- Chart: Create a random secret for Webserver's flask secret key (17142)
- Chart: fix labels on cleanup serviceaccount (16722)
- Chart: Fix overriding node assigning settings on Worker Deployment (16670)
- Chart: Always deploy a ``gitsync`` init container (16339)
- Chart: Fix updating from ``KubernetesExecutor`` to ``CeleryExecutor`` (16242)
- Chart: Adds labels to Kubernetes worker pods (16203)
- Chart: Allow ``webserver.base_url`` to be templated (16126)
- Chart: Fix ``PgBouncer`` exporter sidecar (16099)
- Remove ``dags.gitSync.excludeWebserver`` from chart ``values.schema.json`` (16070)
- Chart: Fix Elasticsearch secret created without Elasticsearch enabled (16015)
- Handle special characters in password sfor Helm Chart (16004)
- Fix flower serviceAccount created without flower enable (16011)
- Chart: ``gitsync`` Clean Up for ``KubernetesExecutor`` (15925)
- Mount DAGs read only when using ``gitsync`` (15953)

Doc only changes

- Chart docs: note uid write permissions for existing pvc (17170)
- Chart Docs: Add single-line description for ``multiNamespaceMode`` (17147)
- Chart: Update description for Helm chart to include 'official' (17040)
- Chart: Better comment and example for ``podTemplate`` (16859)
- Chart: Add more clear docs for setting `pod_template_file.yaml` (16632)
- Fix description on ``scheduler.livenessprobe.periodSeconds`` (16486)
- Chart docs: Fix ``extrasecrets`` example (16305)
- Small improvements for ``README.md`` files (16244)

Misc

- Removes pylint from our toolchain (16682)
- Update link to match what is in pre-commit (16408)
- Chart: Update the ``appVersion`` to 2.1.0 in ``Chart.yaml`` (16337)
- Rename the main branch of the Airflow repo to be `main` (16149)
- Update Chart version to ``1.1.0-rc1`` (16124)

1.0.0

The first release of `apache-airflow-upgrade-check` module.

Release based off the v1-10-stable branch.

📦 https://pypi.org/project/apache-airflow-upgrade-check/