This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 95a9db76275 Update main as 3.1.3 has been released (#58341)
95a9db76275 is described below
commit 95a9db7627531bd91863a4d63101de348ae82d17
Author: Ephraim Anierobi <[email protected]>
AuthorDate: Sat Nov 15 14:00:00 2025 +0100
Update main as 3.1.3 has been released (#58341)
---
.github/ISSUE_TEMPLATE/1-airflow_bug_report.yml | 2 +-
Dockerfile | 2 +-
README.md | 12 +--
RELEASE_NOTES.rst | 89 ++++++++++++++++++++++
.../docs/installation/supported-versions.rst | 2 +-
airflow-core/newsfragments/56583.significant.rst | 49 ------------
airflow-core/newsfragments/56609.significant.rst | 14 ----
generated/PYPI_README.md | 10 +--
reproducible_build.yaml | 4 +-
scripts/ci/prek/supported_versions.py | 2 +-
10 files changed, 106 insertions(+), 80 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/1-airflow_bug_report.yml
b/.github/ISSUE_TEMPLATE/1-airflow_bug_report.yml
index 789490abf03..6bf54207a50 100644
--- a/.github/ISSUE_TEMPLATE/1-airflow_bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/1-airflow_bug_report.yml
@@ -25,7 +25,7 @@ body:
the latest release or main to see if the issue is fixed before
reporting it.
multiple: false
options:
- - "3.1.2"
+ - "3.1.3"
- "2.11.0"
- "main (development)"
- "Other Airflow 2/3 version (please specify below)"
diff --git a/Dockerfile b/Dockerfile
index 461bd4f0083..6282b344c4c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -46,7 +46,7 @@ ARG AIRFLOW_UID="50000"
ARG AIRFLOW_USER_HOME_DIR=/home/airflow
# latest released version here
-ARG AIRFLOW_VERSION="3.1.2"
+ARG AIRFLOW_VERSION="3.1.3"
ARG BASE_IMAGE="debian:bookworm-slim"
ARG AIRFLOW_PYTHON_VERSION="3.12.12"
diff --git a/README.md b/README.md
index f91bc364b77..d4644a21dba 100644
--- a/README.md
+++ b/README.md
@@ -99,7 +99,7 @@ Airflow is not a streaming solution, but it is often used to
process real-time d
Apache Airflow is tested with:
-| | Main version (dev) | Stable version (3.1.2) |
+| | Main version (dev) | Stable version (3.1.3) |
|------------|------------------------------|------------------------|
| Python | 3.10, 3.11, 3.12, 3.13 | 3.10, 3.11, 3.12, 3.13 |
| Platform | AMD64/ARM64(\*) | AMD64/ARM64(\*) |
@@ -172,15 +172,15 @@ them to the appropriate format and workflow that your
tool requires.
```bash
-pip install 'apache-airflow==3.1.2' \
- --constraint
"https://raw.githubusercontent.com/apache/airflow/constraints-3.1.2/constraints-3.10.txt"
+pip install 'apache-airflow==3.1.3' \
+ --constraint
"https://raw.githubusercontent.com/apache/airflow/constraints-3.1.3/constraints-3.10.txt"
```
2. Installing with extras (i.e., postgres, google)
```bash
-pip install 'apache-airflow[postgres,google]==3.1.2' \
- --constraint
"https://raw.githubusercontent.com/apache/airflow/constraints-3.1.2/constraints-3.10.txt"
+pip install 'apache-airflow[postgres,google]==3.1.3' \
+ --constraint
"https://raw.githubusercontent.com/apache/airflow/constraints-3.1.3/constraints-3.10.txt"
```
For information on installing provider distributions, check
@@ -294,7 +294,7 @@ Apache Airflow version life cycle:
| Version | Current Patch/Minor | State | First Release | Limited
Maintenance | EOL/Terminated |
|-----------|-----------------------|-----------|-----------------|-----------------------|------------------|
-| 3 | 3.1.2 | Supported | Apr 22, 2025 | TBD
| TBD |
+| 3 | 3.1.3 | Supported | Apr 22, 2025 | TBD
| TBD |
| 2 | 2.11.0 | Supported | Dec 17, 2020 | Oct 22,
2025 | Apr 22, 2026 |
| 1.10 | 1.10.15 | EOL | Aug 27, 2018 | Dec 17,
2020 | June 17, 2021 |
| 1.9 | 1.9.0 | EOL | Jan 03, 2018 | Aug 27,
2018 | Aug 27, 2018 |
diff --git a/RELEASE_NOTES.rst b/RELEASE_NOTES.rst
index ccd7a9cd8c3..b5121c60197 100644
--- a/RELEASE_NOTES.rst
+++ b/RELEASE_NOTES.rst
@@ -24,6 +24,95 @@
.. towncrier release notes start
+Airflow 3.1.3 (2025-11-13)
+--------------------------
+
+Significant Changes
+^^^^^^^^^^^^^^^^^^^
+
+Fix Connection & Variable access in API server contexts (plugins, log
handlers)(#56583)
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+Previously, hooks used in API server contexts (plugins, middlewares, log
handlers) would fail with an ``ImportError``
+for ``SUPERVISOR_COMMS``, because ``SUPERVISOR_COMMS`` only exists in task
runner child processes.
+
+This has been fixed by implementing automatic context detection with three
separate secrets backend chains:
+
+**Context Detection:**
+
+1. **Client contexts** (task runner in worker): Detected via
``SUPERVISOR_COMMS`` presence
+2. **Server contexts** (API server, scheduler): Explicitly marked with
``_AIRFLOW_PROCESS_CONTEXT=server`` environment variable
+3. **Fallback contexts** (supervisor, unknown contexts): Neither marker
present, uses minimal safe chain
+
+**Backend Chains:**
+
+- **Client**: ``EnvironmentVariablesBackend`` → ``ExecutionAPISecretsBackend``
(routes to Execution API via SUPERVISOR_COMMS)
+- **Server**: ``EnvironmentVariablesBackend`` → ``MetastoreBackend`` (direct
database access)
+- **Fallback**: ``EnvironmentVariablesBackend`` only (+ external backends from
config like AWS Secrets Manager, Vault)
+
+The fallback chain is crucial for supervisor processes (worker-side, before
task runner starts) which need to access
+external secrets for remote logging setup but should not use
``MetastoreBackend`` (to maintain worker isolation).
+
+**Architecture Benefits:**
+
+- Workers (supervisor + task runner) never use ``MetastoreBackend``,
maintaining strict isolation
+- External secrets backends (AWS Secrets Manager, Vault, etc.) work in all
three contexts
+- Supervisor falls back to Execution API client for connections not found in
external backends
+- API server and scheduler have direct database access for optimal performance
+
+**Impact:**
+
+- Hooks like ``GCSHook``, ``S3Hook`` now work correctly in log handlers and
plugins
+- No code changes required for existing plugins or hooks
+- Workers remain isolated from direct database access (network-level DB
blocking fully supported)
+- External secrets work everywhere (workers, supervisor, API server)
+- Robust handling of unknown contexts with safe minimal chain
+
+See: `#56120 <https://github.com/apache/airflow/issues/56120>`__, `#56583
<https://github.com/apache/airflow/issues/56583>`__, `#51816
<https://github.com/apache/airflow/issues/51816>`__
+
+Remove insecure dag reports API endpoint that executed user code in API server
(#56609)
+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+ The ``/api/v2/dagReports`` endpoint has been removed because it loaded user
DAG files directly in the API server process,
+ violating Airflow's security architecture. This endpoint was not used in the
UI and had no known consumers.
+ Use the ``airflow dags report`` CLI command instead for DAG loading reports.
+
+Bug Fixes
+^^^^^^^^^
+- Fix HITL tasks not properly validating params (#57547) (#58144)
+- Fix secrets being exposed in Jinja template rendering error messages
(#57467) (#57962)
+- UI: Fix slow loading on next run assets page (#58052) (#58064)
+- Fix logout not working in airflow-core (#57990) (#58043)
+- Fix slow loading on UI [(#57820) (#57856), (#57956) (#57973), (#57957)
(#57972),(#57869) (#57882), (#57868) (#57918),(#57624) (#57757)]
+- UI: Fix log download to include .txt file extension (#57991) (#58040)
+- Fix scheduler using incorrect max_active_runs value from cached DAG (#57619)
(#57959)
+- Fix database migration failures when XCom contains NaN values (#57866)
(#57893)
+- Fix incorrect task context in trigger rule scenarios (#57884) (#57892)
+- UI: Fix test connection not working (#57811) (#57852)
+- Fix worker ``healthcheck`` timeout not respecting worker-timeout CLI option
(#57731) (#57854)
+- Fix provider hooks not loading when FAB provider is not installed (#57717)
(#57830)
+- Fix slow API responses for task instances list [(#57645) (#57794), (#57646)
(#57664),(#57500) (#57735), (#57549) (#57738), (#57450) (#57736),(#57647)
(#57732)]
+- Fix task instance errors when tasks are triggered by trigger rules (#57474)
(#57786)
+- Fix type consistency for extra field in Asset, AssetAlias, and AssetEvent
(#57352) (#57728)
+- Fix upgrade failures when XCom contains NaN in string values (#57614)
+
+Miscellaneous
+^^^^^^^^^^^^^
+
+- UI: Add resize functionality to DAG run and task instance notes (#57897)
(#58068)
+- Add Taiwan translation for UI (#58121)
+- UI: Shorten German translation of Asset in navigation (#57671) (#57690)
+- Fix code formatting via ruff preview (#57641) (#57670)
+- Remove remnants from unlimited parallelism in local executor (#57579)
(#57644)
+
+Doc Only Changes
+^^^^^^^^^^^^^^^^
+
+- Add learning from Airflow 3 migration guide (#57989) (#58083)
+- Fix duplicate mention of 'DAGs' and 'tasks' in overview documentation
(#57524) (#57793)
+- Document asset event extra storage behavior (#57727) (#57734)
+
+
Airflow 3.1.2 (2025-11-05)
--------------------------
diff --git a/airflow-core/docs/installation/supported-versions.rst
b/airflow-core/docs/installation/supported-versions.rst
index 5d4ccb3c2b9..77480fbf570 100644
--- a/airflow-core/docs/installation/supported-versions.rst
+++ b/airflow-core/docs/installation/supported-versions.rst
@@ -29,7 +29,7 @@ Apache Airflow® version life cycle:
========= ===================== ========= ===============
===================== ================
Version Current Patch/Minor State First Release Limited
Maintenance EOL/Terminated
========= ===================== ========= ===============
===================== ================
-3 3.1.2 Supported Apr 22, 2025 TBD
TBD
+3 3.1.3 Supported Apr 22, 2025 TBD
TBD
2 2.11.0 Supported Dec 17, 2020 Oct 22, 2025
Apr 22, 2026
1.10 1.10.15 EOL Aug 27, 2018 Dec 17, 2020
June 17, 2021
1.9 1.9.0 EOL Jan 03, 2018 Aug 27, 2018
Aug 27, 2018
diff --git a/airflow-core/newsfragments/56583.significant.rst
b/airflow-core/newsfragments/56583.significant.rst
deleted file mode 100644
index 3e80bfe0cbb..00000000000
--- a/airflow-core/newsfragments/56583.significant.rst
+++ /dev/null
@@ -1,49 +0,0 @@
-Fix Connection & Variable access in API server contexts (plugins, log handlers)
-
-Previously, hooks used in API server contexts (plugins, middlewares, log
handlers) would fail with an ``ImportError``
-for ``SUPERVISOR_COMMS``, because ``SUPERVISOR_COMMS`` only exists in task
runner child processes.
-
-This has been fixed by implementing automatic context detection with three
separate secrets backend chains:
-
-**Context Detection:**
-
-1. **Client contexts** (task runner in worker): Detected via
``SUPERVISOR_COMMS`` presence
-2. **Server contexts** (API server, scheduler): Explicitly marked with
``_AIRFLOW_PROCESS_CONTEXT=server`` environment variable
-3. **Fallback contexts** (supervisor, unknown contexts): Neither marker
present, uses minimal safe chain
-
-**Backend Chains:**
-
-- **Client**: ``EnvironmentVariablesBackend`` → ``ExecutionAPISecretsBackend``
(routes to Execution API via SUPERVISOR_COMMS)
-- **Server**: ``EnvironmentVariablesBackend`` → ``MetastoreBackend`` (direct
database access)
-- **Fallback**: ``EnvironmentVariablesBackend`` only (+ external backends from
config like AWS Secrets Manager, Vault)
-
-The fallback chain is crucial for supervisor processes (worker-side, before
task runner starts) which need to access
-external secrets for remote logging setup but should not use
``MetastoreBackend`` (to maintain worker isolation).
-
-**Architecture Benefits:**
-
-- Workers (supervisor + task runner) never use ``MetastoreBackend``,
maintaining strict isolation
-- External secrets backends (AWS Secrets Manager, Vault, etc.) work in all
three contexts
-- Supervisor falls back to Execution API client for connections not found in
external backends
-- API server and scheduler have direct database access for optimal performance
-
-**Impact:**
-
-- Hooks like ``GCSHook``, ``S3Hook`` now work correctly in log handlers and
plugins
-- No code changes required for existing plugins or hooks
-- Workers remain isolated from direct database access (network-level DB
blocking fully supported)
-- External secrets work everywhere (workers, supervisor, API server)
-- Robust handling of unknown contexts with safe minimal chain
-
-See: `#56120 <https://github.com/apache/airflow/issues/56120>`__, `#56583
<https://github.com/apache/airflow/issues/56583>`__, `#51816
<https://github.com/apache/airflow/issues/51816>`__
-
-* Types of change
-
- * [ ] Dag changes
- * [ ] Config changes
- * [ ] API changes
- * [ ] CLI changes
- * [ ] Behaviour changes
- * [ ] Plugin changes
- * [ ] Dependency changes
- * [ ] Code interface changes
diff --git a/airflow-core/newsfragments/56609.significant.rst
b/airflow-core/newsfragments/56609.significant.rst
deleted file mode 100644
index b32e4c96116..00000000000
--- a/airflow-core/newsfragments/56609.significant.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-Remove insecure dagReports API endpoint that executed user code in API server
-
-The ``/api/v2/dagReports`` endpoint has been removed because it loaded user
DAG files directly in the API server process, violating Airflow's security
architecture. This endpoint was not used in the UI and had no known consumers.
Use the ``airflow dags report`` CLI command instead for DAG loading reports.
-
-* Types of change
-
- * [ ] Dag changes
- * [ ] Config changes
- * [x] API changes
- * [ ] CLI changes
- * [ ] Behaviour changes
- * [ ] Plugin changes
- * [ ] Dependency changes
- * [ ] Code interface changes
diff --git a/generated/PYPI_README.md b/generated/PYPI_README.md
index 846d7e24081..91a92ec4fcd 100644
--- a/generated/PYPI_README.md
+++ b/generated/PYPI_README.md
@@ -56,7 +56,7 @@ Use Airflow to author workflows (Dags) that orchestrate
tasks. The Airflow sched
Apache Airflow is tested with:
-| | Main version (dev) | Stable version (3.1.2) |
+| | Main version (dev) | Stable version (3.1.3) |
|------------|------------------------------|------------------------|
| Python | 3.10, 3.11, 3.12, 3.13 | 3.10, 3.11, 3.12, 3.13 |
| Platform | AMD64/ARM64(\*) | AMD64/ARM64(\*) |
@@ -125,15 +125,15 @@ them to the appropriate format and workflow that your
tool requires.
```bash
-pip install 'apache-airflow==3.1.2' \
- --constraint
"https://raw.githubusercontent.com/apache/airflow/constraints-3.1.2/constraints-3.10.txt"
+pip install 'apache-airflow==3.1.3' \
+ --constraint
"https://raw.githubusercontent.com/apache/airflow/constraints-3.1.3/constraints-3.10.txt"
```
2. Installing with extras (i.e., postgres, google)
```bash
-pip install 'apache-airflow[postgres,google]==3.1.2' \
- --constraint
"https://raw.githubusercontent.com/apache/airflow/constraints-3.1.2/constraints-3.10.txt"
+pip install 'apache-airflow[postgres,google]==3.1.3' \
+ --constraint
"https://raw.githubusercontent.com/apache/airflow/constraints-3.1.3/constraints-3.10.txt"
```
For information on installing provider distributions, check
diff --git a/reproducible_build.yaml b/reproducible_build.yaml
index 9c9133e19e7..0ae31893c08 100644
--- a/reproducible_build.yaml
+++ b/reproducible_build.yaml
@@ -1,2 +1,2 @@
-release-notes-hash: 4d7e4f79582208bd018ba94735462a41
-source-date-epoch: 1762633053
+release-notes-hash: c75fd3d515f4f98b2bfe7e7de34dd4c6
+source-date-epoch: 1763195195
diff --git a/scripts/ci/prek/supported_versions.py
b/scripts/ci/prek/supported_versions.py
index d7f07c7e3ea..cce0254ae74 100755
--- a/scripts/ci/prek/supported_versions.py
+++ b/scripts/ci/prek/supported_versions.py
@@ -39,7 +39,7 @@ HEADERS = (
)
SUPPORTED_VERSIONS = (
- ("3", "3.1.2", "Supported", "Apr 22, 2025", "TBD", "TBD"),
+ ("3", "3.1.3", "Supported", "Apr 22, 2025", "TBD", "TBD"),
("2", "2.11.0", "Supported", "Dec 17, 2020", "Oct 22, 2025", "Apr 22,
2026"),
("1.10", "1.10.15", "EOL", "Aug 27, 2018", "Dec 17, 2020", "June 17,
2021"),
("1.9", "1.9.0", "EOL", "Jan 03, 2018", "Aug 27, 2018", "Aug 27, 2018"),