+1 (binding) - both TaskSdk and Airlfow-core:

Checked:
* reproducibility
* signatures
* checksums

Good idea with diffing the content, I compared sources of 3.1.4rc2 and
3.1.5rc2. Result below. Since reproducibility checks also work - by
transition, all other artifacts should be fine
We should be good to go.


diffoscope --exclude-directory-metadata yes apache_airflow-3.1.5-source
apache_airflow-3.1.4-source'

```
--- apache_airflow-3.1.5-source
+++ apache_airflow-3.1.4-source
│   --- apache_airflow-3.1.5-source/README.md
├── +++ apache_airflow-3.1.4-source/README.md
│ @@ -95,15 +95,15 @@
│  - **Flexible**: Airflow leverages the [**Jinja**](
https://jinja.palletsprojects.com) templating engine, allowing rich
customizations.
│
│  <!-- START Requirements, please keep comment here to allow auto update
of PyPI readme.md -->
│  ## Requirements
│
│  Apache Airflow is tested with:
│
│ -|            | Main version (dev)           | Stable version (3.1.5) |
│ +|            | Main version (dev)           | Stable version (3.1.4) |
│  |------------|------------------------------|------------------------|
│  | Python     | 3.10, 3.11, 3.12, 3.13       | 3.10, 3.11, 3.12, 3.13 |
│  | Platform   | AMD64/ARM64(\*)              | AMD64/ARM64(\*)        |
│  | Kubernetes | 1.30, 1.31, 1.32, 1.33, 1.34 | 1.30, 1.31, 1.32, 1.33 |
│  | PostgreSQL | 13, 14, 15, 16, 17           | 13, 14, 15, 16, 17     |
│  | MySQL      | 8.0, 8.4, Innovation         | 8.0, 8.4, Innovation   |
│  | SQLite     | 3.15.0+                      | 3.15.0+                |
│ @@ -173,23 +173,23 @@
│  newer versions of ``bazel`` will handle it.
│
│  If you wish to install Airflow using those tools, you should use the
constraint files and convert
│  them to the appropriate format and workflow that your tool requires.
│
│
│  ```bash
│ -pip install 'apache-airflow==3.1.5' \
│ - --constraint "
https://raw.githubusercontent.com/apache/airflow/constraints-3.1.5/constraints-3.10.txt
"
│ +pip install 'apache-airflow==3.1.4' \
│ + --constraint "
https://raw.githubusercontent.com/apache/airflow/constraints-3.1.4/constraints-3.10.txt
"
│  ```
│
│  2. Installing with extras (i.e., postgres, google)
│
│  ```bash
│ -pip install 'apache-airflow[postgres,google]==3.1.5' \
│ - --constraint "
https://raw.githubusercontent.com/apache/airflow/constraints-3.1.5/constraints-3.10.txt
"
│ +pip install 'apache-airflow[postgres,google]==3.1.4' \
│ + --constraint "
https://raw.githubusercontent.com/apache/airflow/constraints-3.1.4/constraints-3.10.txt
"
│  ```
│
│  For information on installing provider distributions, check
│  [providers](
http://airflow.apache.org/docs/apache-airflow-providers/index.html).
│
│  <!-- END Installing from PyPI, please keep comment here to allow auto
update of PyPI readme.md -->
│
│ @@ -295,15 +295,15 @@
│  Apache Airflow version life cycle:
│
│  <!-- This table is automatically updated by prek
scripts/ci/prek/supported_versions.py -->
│  <!-- Beginning of auto-generated table -->
│
│  | Version   | Current Patch/Minor   | State     | First Release   |
Limited Maintenance   | EOL/Terminated   |
│
 
|-----------|-----------------------|-----------|-----------------|-----------------------|------------------|
│ -| 3         | 3.1.5                 | Supported | Apr 22, 2025    | TBD
                  | TBD              |
│ +| 3         | 3.1.4                 | 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     |
│  | 1.8       | 1.8.2                 | EOL       | Mar 19, 2017    | Jan
03, 2018          | Jan 03, 2018     |
│  | 1.7       | 1.7.1.2               | EOL       | Mar 28, 2016    | Mar
19, 2017          | Mar 19, 2017     |
│
│  <!-- End of auto-generated table -->
│   --- apache_airflow-3.1.5-source/RELEASE_NOTES.rst
├── +++ apache_airflow-3.1.4-source/RELEASE_NOTES.rst
│ @@ -20,15 +20,15 @@
│     :depth: 1
│
│  .. note::
│     Release notes for older versions can be found in the versioned
documentation.
│
│  .. towncrier release notes start
│
│ -Airflow 3.1.5 (2025-12-12)
│ +Airflow 3.1.4 (2025-12-10)
│  --------------------------
│
│  Significant Changes
│  ^^^^^^^^^^^^^^^^^^^
│
│  No significant changes.
│   --- apache_airflow-3.1.5-source/airflow-core
├── +++ apache_airflow-3.1.4-source/airflow-core
│ │   --- apache_airflow-3.1.5-source/airflow-core/docs
│ ├── +++ apache_airflow-3.1.4-source/airflow-core/docs
│ │ │   --- apache_airflow-3.1.5-source/airflow-core/docs/installation
│ │ ├── +++ apache_airflow-3.1.4-source/airflow-core/docs/installation
│ │ │ │   ---
apache_airflow-3.1.5-source/airflow-core/docs/installation/supported-versions.rst
│ │ │ ├── +++
apache_airflow-3.1.4-source/airflow-core/docs/installation/supported-versions.rst
│ │ │ │ @@ -25,15 +25,15 @@
│ │ │ │
│ │ │ │   .. This table is automatically updated by prek hook
scripts/ci/prek/supported_versions.py
│ │ │ │   .. Beginning of auto-generated table
│ │ │ │
│ │ │ │  =========  =====================  =========  ===============
 =====================  ================
│ │ │ │  Version    Current Patch/Minor    State      First Release
 Limited Maintenance    EOL/Terminated
│ │ │ │  =========  =====================  =========  ===============
 =====================  ================
│ │ │ │ +3          3.1.4                  Supported  Apr 22, 2025     TBD
                   TBD
│ │ │ │ -3          3.1.5                  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
│ │ │ │  1.8        1.8.2                  EOL        Mar 19, 2017     Jan
03, 2018           Jan 03, 2018
│ │ │ │  1.7        1.7.1.2                EOL        Mar 28, 2016     Mar
19, 2017           Mar 19, 2017
│ │ │ │  =========  =====================  =========  ===============
 =====================  ================
│ │   --- apache_airflow-3.1.5-source/airflow-core/pyproject.toml
│ ├── +++ apache_airflow-3.1.4-source/airflow-core/pyproject.toml
│ │ @@ -59,15 +59,15 @@
│ │      "Programming Language :: Python :: 3.10",
│ │      "Programming Language :: Python :: 3.11",
│ │      "Programming Language :: Python :: 3.12",
│ │      "Topic :: System :: Monitoring",
│ │  ]
│ │
│ │  # Version is defined in src/airflow/__init__.py and it is
automatically synchronized by prek hook
│ │ +version = "3.1.4"
│ │ -version = "3.1.5"
│ │
│ │  dependencies = [
│ │      "a2wsgi>=1.10.8",
│ │      "aiosqlite>=0.20.0",
│ │      # Alembic is important to handle our migrations in predictable and
performant way. It is developed
│ │      # together with SQLAlchemy. Our experience with Alembic is that it
very stable in minor version
│ │      # The 1.13.0 of alembic marked some migration code as SQLAlchemy
2+ only so we limit it to 1.13.1
│ │ @@ -135,15 +135,15 @@
│ │      "tabulate>=0.9.0",
│ │      "tenacity>=8.3.0",
│ │      "termcolor>=3.0.0",
│ │      "typing-extensions>=4.14.1",
│ │      # https://github.com/apache/airflow/issues/56369 , rework
universal-pathlib usage
│ │      "universal-pathlib>=0.2.6,<0.3.0",
│ │      "uuid6>=2024.7.10",
│ │ +    "apache-airflow-task-sdk<1.2.0,==1.1.4",
│ │ -    "apache-airflow-task-sdk<1.2.0,==1.1.5",
│ │      # pre-installed providers
│ │      "apache-airflow-providers-common-compat>=1.7.4",
│ │      "apache-airflow-providers-common-io>=1.6.3",
│ │      "apache-airflow-providers-common-sql>=1.28.1",
│ │      "apache-airflow-providers-smtp>=2.3.1",
│ │      "apache-airflow-providers-standard>=1.9.0",
│ │      # Start of shared logging dependencies
│ │   --- apache_airflow-3.1.5-source/airflow-core/src
│ ├── +++ apache_airflow-3.1.4-source/airflow-core/src
│ │ │   --- apache_airflow-3.1.5-source/airflow-core/src/airflow
│ │ ├── +++ apache_airflow-3.1.4-source/airflow-core/src/airflow
│ │ │ │   ---
apache_airflow-3.1.5-source/airflow-core/src/airflow/__init__.py
│ │ │ ├── +++
apache_airflow-3.1.4-source/airflow-core/src/airflow/__init__.py
│ │ │ │ @@ -21,15 +21,15 @@
│ │ │ │  # Adding it automatically is excluded in pyproject.toml via I002
ruff rule exclusion
│ │ │ │
│ │ │ │  # Make `airflow` a namespace package, supporting installing
│ │ │ │  # airflow.providers.* in different locations (i.e. one in site,
and one in user
│ │ │ │  # lib.)  This is required by some IDEs to resolve the import paths.
│ │ │ │  __path__ = __import__("pkgutil").extend_path(__path__, __name__)
│ │ │ │
│ │ │ │ +__version__ = "3.1.4"
│ │ │ │ -__version__ = "3.1.5"
│ │ │ │
│ │ │ │
│ │ │ │  import os
│ │ │ │  import sys
│ │ │ │  import warnings
│ │ │ │  from typing import TYPE_CHECKING
│   --- apache_airflow-3.1.5-source/docker-stack-docs
├── +++ apache_airflow-3.1.4-source/docker-stack-docs
│ │   --- apache_airflow-3.1.5-source/docker-stack-docs/README.md
│ ├── +++ apache_airflow-3.1.4-source/docker-stack-docs/README.md
│ │ @@ -27,32 +27,32 @@
│ │  image.
│ │
│ │  The Apache Airflow community, releases Docker Images which are
`reference images` for Apache Airflow.
│ │  Every time a new version of Airflow is released, the images are
prepared in the
│ │  [apache/airflow DockerHub](https://hub.docker.com/r/apache/airflow)
│ │  for all the supported Python versions.
│ │
│ │ +You can find the following images there (Assuming Airflow version
`3.1.4`):
│ │ -You can find the following images there (Assuming Airflow version
`3.1.5`):
│ │
│ │  * `apache/airflow:latest` - the latest released Airflow image with
default Python version (3.12 currently)
│ │  * `apache/airflow:latest-pythonX.Y` - the latest released Airflow
image with specific Python version
│ │ +* `apache/airflow:3.1.4` - the versioned Airflow image with default
Python version (3.12 currently)
│ │ +* `apache/airflow:3.1.4-pythonX.Y` - the versioned Airflow image with
specific Python version
│ │ -* `apache/airflow:3.1.5` - the versioned Airflow image with default
Python version (3.12 currently)
│ │ -* `apache/airflow:3.1.5-pythonX.Y` - the versioned Airflow image with
specific Python version
│ │
│ │  Those are "reference" regular images. They contain the most common set
of extras, dependencies and providers that are
│ │  often used by the users and they are good to "try-things-out" when you
want to just take Airflow for a spin,
│ │
│ │  You can also use "slim" images that contain only core airflow and are
about half the size of the "regular" images
│ │  but you need to add all the [Reference for package extras](
https://airflow.apache.org/docs/apache-airflow/stable/extra-packages-ref.html)
and providers that you need separately
│ │  via [Building the image](
https://airflow.apache.org/docs/docker-stack/build.html#build-build-image).
│ │
│ │  * `apache/airflow:slim-latest`              - the latest released
Airflow image with default Python version (3.12 currently)
│ │  * `apache/airflow:slim-latest-pythonX.Y`    - the latest released
Airflow image with specific Python version
│ │ +* `apache/airflow:slim-3.1.4`           - the versioned Airflow image
with default Python version (3.12 currently)
│ │ +* `apache/airflow:slim-3.1.4-pythonX.Y` - the versioned Airflow image
with specific Python version
│ │ -* `apache/airflow:slim-3.1.5`           - the versioned Airflow image
with default Python version (3.12 currently)
│ │ -* `apache/airflow:slim-3.1.5-pythonX.Y` - the versioned Airflow image
with specific Python version
│ │
│ │  The Apache Airflow image provided as convenience package is optimized
for size, and
│ │  it provides just a bare minimal set of the extras and dependencies
installed and in most cases
│ │  you want to either extend or customize the image. You can see all
possible extras in [Reference for package extras](
https://airflow.apache.org/docs/apache-airflow/stable/extra-packages-ref.html
).
│ │  The set of extras used in Airflow Production image are available in the
│ │  [Dockerfile](
https://github.com/apache/airflow/blob/2c6c7fdb2308de98e142618836bdf414df9768c8/Dockerfile#L37
).
│ │   --- apache_airflow-3.1.5-source/docker-stack-docs/docker-examples
│ ├── +++ apache_airflow-3.1.4-source/docker-stack-docs/docker-examples
│ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending
│ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending
│ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-airflow-configuration
│ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-airflow-configuration
│ │ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-airflow-configuration/Dockerfile
│ │ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-airflow-configuration/Dockerfile
│ │ │ │ │ @@ -11,11 +11,11 @@
│ │ │ │ │  # distributed under the License is distributed on an "AS IS"
BASIS,
│ │ │ │ │  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied.
│ │ │ │ │  # See the License for the specific language governing
permissions and
│ │ │ │ │  # limitations under the License.
│ │ │ │ │
│ │ │ │ │  # This is an example Dockerfile. It is not intended for
PRODUCTION use
│ │ │ │ │  # [START Dockerfile]
│ │ │ │ │ -FROM apache/airflow:3.1.5
│ │ │ │ │ +FROM apache/airflow:3.1.4
│ │ │ │ │  ENV AIRFLOW__CORE__LOAD_EXAMPLES=True
│ │ │ │ │  ENV AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=my_conn_string
│ │ │ │ │  # [END Dockerfile]
│ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-apt-packages
│ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-apt-packages
│ │ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-apt-packages/Dockerfile
│ │ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-apt-packages/Dockerfile
│ │ │ │ │ @@ -11,15 +11,15 @@
│ │ │ │ │  # distributed under the License is distributed on an "AS IS"
BASIS,
│ │ │ │ │  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied.
│ │ │ │ │  # See the License for the specific language governing
permissions and
│ │ │ │ │  # limitations under the License.
│ │ │ │ │
│ │ │ │ │  # This is an example Dockerfile. It is not intended for
PRODUCTION use
│ │ │ │ │  # [START Dockerfile]
│ │ │ │ │ -FROM apache/airflow:3.1.5
│ │ │ │ │ +FROM apache/airflow:3.1.4
│ │ │ │ │  USER root
│ │ │ │ │  RUN apt-get update \
│ │ │ │ │    && apt-get install -y --no-install-recommends \
│ │ │ │ │           vim \
│ │ │ │ │    && apt-get autoremove -yqq --purge \
│ │ │ │ │    && apt-get clean \
│ │ │ │ │    && rm -rf /var/lib/apt/lists/*
│ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-build-essential-extend
│ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-build-essential-extend
│ │ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-build-essential-extend/Dockerfile
│ │ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-build-essential-extend/Dockerfile
│ │ │ │ │ @@ -11,15 +11,15 @@
│ │ │ │ │  # distributed under the License is distributed on an "AS IS"
BASIS,
│ │ │ │ │  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied.
│ │ │ │ │  # See the License for the specific language governing
permissions and
│ │ │ │ │  # limitations under the License.
│ │ │ │ │
│ │ │ │ │  # This is an example Dockerfile. It is not intended for
PRODUCTION use
│ │ │ │ │  # [START Dockerfile]
│ │ │ │ │ -FROM apache/airflow:3.1.5
│ │ │ │ │ +FROM apache/airflow:3.1.4
│ │ │ │ │  USER root
│ │ │ │ │  RUN apt-get update \
│ │ │ │ │    && apt-get install -y --no-install-recommends \
│ │ │ │ │           build-essential libopenmpi-dev \
│ │ │ │ │    && apt-get autoremove -yqq --purge \
│ │ │ │ │    && apt-get clean \
│ │ │ │ │    && rm -rf /var/lib/apt/lists/*
│ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-providers
│ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-providers
│ │ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-providers/Dockerfile
│ │ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-providers/Dockerfile
│ │ │ │ │ @@ -11,15 +11,15 @@
│ │ │ │ │  # distributed under the License is distributed on an "AS IS"
BASIS,
│ │ │ │ │  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied.
│ │ │ │ │  # See the License for the specific language governing
permissions and
│ │ │ │ │  # limitations under the License.
│ │ │ │ │
│ │ │ │ │  # This is an example Dockerfile. It is not intended for
PRODUCTION use
│ │ │ │ │  # [START Dockerfile]
│ │ │ │ │ -FROM apache/airflow:3.1.5
│ │ │ │ │ +FROM apache/airflow:3.1.4
│ │ │ │ │  USER root
│ │ │ │ │  RUN apt-get update \
│ │ │ │ │    && apt-get install -y --no-install-recommends \
│ │ │ │ │           openjdk-17-jre-headless \
│ │ │ │ │    && apt-get autoremove -yqq --purge \
│ │ │ │ │    && apt-get clean \
│ │ │ │ │    && rm -rf /var/lib/apt/lists/*
│ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-pypi-packages
│ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-pypi-packages
│ │ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-pypi-packages/Dockerfile
│ │ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-pypi-packages/Dockerfile
│ │ │ │ │ @@ -11,10 +11,10 @@
│ │ │ │ │  # distributed under the License is distributed on an "AS IS"
BASIS,
│ │ │ │ │  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied.
│ │ │ │ │  # See the License for the specific language governing
permissions and
│ │ │ │ │  # limitations under the License.
│ │ │ │ │
│ │ │ │ │  # This is an example Dockerfile. It is not intended for
PRODUCTION use
│ │ │ │ │  # [START Dockerfile]
│ │ │ │ │ -FROM apache/airflow:3.1.5
│ │ │ │ │ +FROM apache/airflow:3.1.4
│ │ │ │ │  RUN pip install --no-cache-dir
"apache-airflow==${AIRFLOW_VERSION}" lxml
│ │ │ │ │  # [END Dockerfile]
│ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-pypi-packages-constraints
│ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-pypi-packages-constraints
│ │ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-pypi-packages-constraints/Dockerfile
│ │ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-pypi-packages-constraints/Dockerfile
│ │ │ │ │ @@ -11,10 +11,10 @@
│ │ │ │ │  # distributed under the License is distributed on an "AS IS"
BASIS,
│ │ │ │ │  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied.
│ │ │ │ │  # See the License for the specific language governing
permissions and
│ │ │ │ │  # limitations under the License.
│ │ │ │ │
│ │ │ │ │  # This is an example Dockerfile. It is not intended for
PRODUCTION use
│ │ │ │ │  # [START Dockerfile]
│ │ │ │ │ -FROM apache/airflow:3.1.5
│ │ │ │ │ +FROM apache/airflow:3.1.4
│ │ │ │ │  RUN pip install --no-cache-dir
"apache-airflow==${AIRFLOW_VERSION}" lxml --constraint
"${HOME}/constraints.txt"
│ │ │ │ │  # [END Dockerfile]
│ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-pypi-packages-uv
│ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-pypi-packages-uv
│ │ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-pypi-packages-uv/Dockerfile
│ │ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-pypi-packages-uv/Dockerfile
│ │ │ │ │ @@ -11,14 +11,14 @@
│ │ │ │ │  # distributed under the License is distributed on an "AS IS"
BASIS,
│ │ │ │ │  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied.
│ │ │ │ │  # See the License for the specific language governing
permissions and
│ │ │ │ │  # limitations under the License.
│ │ │ │ │
│ │ │ │ │  # This is an example Dockerfile. It is not intended for
PRODUCTION use
│ │ │ │ │  # [START Dockerfile]
│ │ │ │ │ -FROM apache/airflow:3.1.5
│ │ │ │ │ +FROM apache/airflow:3.1.4
│ │ │ │ │
│ │ │ │ │  # The `uv` tools is Rust packaging tool that is much faster than
`pip` and other installer
│ │ │ │ │  # Support for uv as installation tool is experimental
│ │ │ │ │
│ │ │ │ │  RUN uv pip install --no-cache
"apache-airflow==${AIRFLOW_VERSION}" lxml
│ │ │ │ │  # [END Dockerfile]
│ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-requirement-packages
│ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-requirement-packages
│ │ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/add-requirement-packages/Dockerfile
│ │ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/add-requirement-packages/Dockerfile
│ │ │ │ │ @@ -11,11 +11,11 @@
│ │ │ │ │  # distributed under the License is distributed on an "AS IS"
BASIS,
│ │ │ │ │  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied.
│ │ │ │ │  # See the License for the specific language governing
permissions and
│ │ │ │ │  # limitations under the License.
│ │ │ │ │
│ │ │ │ │  # This is an example Dockerfile. It is not intended for
PRODUCTION use
│ │ │ │ │  # [START Dockerfile]
│ │ │ │ │ -FROM apache/airflow:3.1.5
│ │ │ │ │ +FROM apache/airflow:3.1.4
│ │ │ │ │  COPY requirements.txt /
│ │ │ │ │  RUN pip install --no-cache-dir
"apache-airflow==${AIRFLOW_VERSION}" -r /requirements.txt
│ │ │ │ │  # [END Dockerfile]
│ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/custom-providers
│ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/custom-providers
│ │ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/custom-providers/Dockerfile
│ │ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/custom-providers/Dockerfile
│ │ │ │ │ @@ -11,10 +11,10 @@
│ │ │ │ │  # distributed under the License is distributed on an "AS IS"
BASIS,
│ │ │ │ │  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied.
│ │ │ │ │  # See the License for the specific language governing
permissions and
│ │ │ │ │  # limitations under the License.
│ │ │ │ │
│ │ │ │ │  # This is an example Dockerfile. It is not intended for
PRODUCTION use
│ │ │ │ │  # [START Dockerfile]
│ │ │ │ │ -FROM apache/airflow:3.1.5
│ │ │ │ │ +FROM apache/airflow:3.1.4
│ │ │ │ │  RUN pip install "apache-airflow==${AIRFLOW_VERSION}"
--no-cache-dir apache-airflow-providers-docker==2.5.1
│ │ │ │ │  # [END Dockerfile]
│ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/embedding-dags
│ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/embedding-dags
│ │ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/embedding-dags/Dockerfile
│ │ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/embedding-dags/Dockerfile
│ │ │ │ │ @@ -11,12 +11,12 @@
│ │ │ │ │  # distributed under the License is distributed on an "AS IS"
BASIS,
│ │ │ │ │  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied.
│ │ │ │ │  # See the License for the specific language governing
permissions and
│ │ │ │ │  # limitations under the License.
│ │ │ │ │
│ │ │ │ │  # This is an example Dockerfile. It is not intended for
PRODUCTION use
│ │ │ │ │  # [START Dockerfile]
│ │ │ │ │ -FROM apache/airflow:3.1.5
│ │ │ │ │ +FROM apache/airflow:3.1.4
│ │ │ │ │
│ │ │ │ │  COPY --chown=airflow:root test_dag.py /opt/airflow/dags
│ │ │ │ │
│ │ │ │ │  # [END Dockerfile]
│ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/writable-directory
│ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/writable-directory
│ │ │ │ │   ---
apache_airflow-3.1.5-source/docker-stack-docs/docker-examples/extending/writable-directory/Dockerfile
│ │ │ │ ├── +++
apache_airflow-3.1.4-source/docker-stack-docs/docker-examples/extending/writable-directory/Dockerfile
│ │ │ │ │ @@ -11,11 +11,11 @@
│ │ │ │ │  # distributed under the License is distributed on an "AS IS"
BASIS,
│ │ │ │ │  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied.
│ │ │ │ │  # See the License for the specific language governing
permissions and
│ │ │ │ │  # limitations under the License.
│ │ │ │ │
│ │ │ │ │  # This is an example Dockerfile. It is not intended for
PRODUCTION use
│ │ │ │ │  # [START Dockerfile]
│ │ │ │ │ -FROM apache/airflow:3.1.5
│ │ │ │ │ +FROM apache/airflow:3.1.4
│ │ │ │ │  RUN umask 0002; \
│ │ │ │ │      mkdir -p ~/writeable-directory
│ │ │ │ │  # [END Dockerfile]
│ │   --- apache_airflow-3.1.5-source/docker-stack-docs/entrypoint.rst
│ ├── +++ apache_airflow-3.1.4-source/docker-stack-docs/entrypoint.rst
│ │ @@ -128,41 +128,41 @@
│ │  ------------------
│ │
│ │  If first argument equals to "bash" - you are dropped to a bash shell
or you can executes bash command
│ │  if you specify extra arguments. For example:
│ │
│ │  .. code-block:: bash
│ │
│ │ +  docker run -it apache/airflow:3.1.4-python3.10 bash -c "ls -la"
│ │ -  docker run -it apache/airflow:3.1.5-python3.10 bash -c "ls -la"
│ │    total 16
│ │    drwxr-xr-x 4 airflow root 4096 Jun  5 18:12 .
│ │    drwxr-xr-x 1 root    root 4096 Jun  5 18:12 ..
│ │    drwxr-xr-x 2 airflow root 4096 Jun  5 18:12 dags
│ │    drwxr-xr-x 2 airflow root 4096 Jun  5 18:12 logs
│ │
│ │  If first argument is equal to ``python`` - you are dropped in python
shell or python commands are executed if
│ │  you pass extra parameters. For example:
│ │
│ │  .. code-block:: bash
│ │
│ │ +  > docker run -it apache/airflow:3.1.4-python3.10 python -c
"print('test')"
│ │ -  > docker run -it apache/airflow:3.1.5-python3.10 python -c
"print('test')"
│ │    test
│ │
│ │  If first argument equals to ``airflow`` - the rest of the arguments is
treated as an Airflow command
│ │  to execute. Example:
│ │
│ │  .. code-block:: bash
│ │
│ │ +   docker run -it apache/airflow:3.1.4-python3.10 airflow webserver
│ │ -   docker run -it apache/airflow:3.1.5-python3.10 airflow webserver
│ │
│ │  If there are any other arguments - they are simply passed to the
"airflow" command
│ │
│ │  .. code-block:: bash
│ │
│ │ +  > docker run -it apache/airflow:3.1.4-python3.10 help
│ │ -  > docker run -it apache/airflow:3.1.5-python3.10 help
│ │      usage: airflow [-h] GROUP_OR_COMMAND ...
│ │
│ │      Positional Arguments:
│ │        GROUP_OR_COMMAND
│ │
│ │          Groups
│ │            assets            Manage assets
│ │ @@ -362,24 +362,24 @@
│ │
│ │  .. code-block:: bash
│ │
│ │    docker run -it -p 8080:8080 \
│ │      --env "_AIRFLOW_DB_MIGRATE=true" \
│ │      --env "_AIRFLOW_WWW_USER_CREATE=true" \
│ │      --env "_AIRFLOW_WWW_USER_PASSWORD=admin" \
│ │ +      apache/airflow:3.1.4-python3.10 webserver
│ │ -      apache/airflow:3.1.5-python3.10 webserver
│ │
│ │
│ │  .. code-block:: bash
│ │
│ │    docker run -it -p 8080:8080 \
│ │      --env "_AIRFLOW_DB_MIGRATE=true" \
│ │      --env "_AIRFLOW_WWW_USER_CREATE=true" \
│ │      --env "_AIRFLOW_WWW_USER_PASSWORD_CMD=echo admin" \
│ │ +      apache/airflow:3.1.4-python3.10 webserver
│ │ -      apache/airflow:3.1.5-python3.10 webserver
│ │
│ │  The commands above perform initialization of the SQLite database,
create admin user with admin password
│ │  and Admin role. They also forward local port ``8080`` to the webserver
port and finally start the webserver.
│ │
│ │  Installing additional requirements
│ │  ..................................
│ │
│ │ @@ -411,10 +411,10 @@
│ │  .. code-block:: bash
│ │
│ │    docker run -it -p 8080:8080 \
│ │      --env "_PIP_ADDITIONAL_REQUIREMENTS=lxml==4.6.3
charset-normalizer==1.4.1" \
│ │      --env "_AIRFLOW_DB_MIGRATE=true" \
│ │      --env "_AIRFLOW_WWW_USER_CREATE=true" \
│ │      --env "_AIRFLOW_WWW_USER_PASSWORD_CMD=echo admin" \
│ │ +      apache/airflow:3.1.4-python3.10 webserver
│ │ -      apache/airflow:3.1.5-python3.10 webserver
│ │
│ │  This method is only available starting from Docker image of Airflow
2.1.1 and above.
│   --- apache_airflow-3.1.5-source/generated
├── +++ apache_airflow-3.1.4-source/generated
│ │   --- apache_airflow-3.1.5-source/generated/PYPI_README.md
│ ├── +++ apache_airflow-3.1.4-source/generated/PYPI_README.md
│ │ @@ -52,15 +52,15 @@
│ │
│ │  Use Airflow to author workflows (Dags) that orchestrate tasks. The
Airflow scheduler executes your tasks on an array of workers while
following the specified dependencies. Rich command line utilities make
performing complex surgeries on DAGs a snap. The rich user interface makes
it easy to visualize pipelines running in production, monitor progress, and
troubleshoot issues when needed.
│ │
│ │  ## Requirements
│ │
│ │  Apache Airflow is tested with:
│ │
│ │ +|            | Main version (dev)           | Stable version (3.1.4) |
│ │ -|            | Main version (dev)           | Stable version (3.1.5) |
│ │  |------------|------------------------------|------------------------|
│ │  | Python     | 3.10, 3.11, 3.12, 3.13       | 3.10, 3.11, 3.12, 3.13 |
│ │  | Platform   | AMD64/ARM64(\*)              | AMD64/ARM64(\*)        |
│ │  | Kubernetes | 1.30, 1.31, 1.32, 1.33, 1.34 | 1.30, 1.31, 1.32, 1.33 |
│ │  | PostgreSQL | 13, 14, 15, 16, 17           | 13, 14, 15, 16, 17     |
│ │  | MySQL      | 8.0, 8.4, Innovation         | 8.0, 8.4, Innovation   |
│ │  | SQLite     | 3.15.0+                      | 3.15.0+                |
│ │ @@ -126,23 +126,23 @@
│ │  newer versions of ``bazel`` will handle it.
│ │
│ │  If you wish to install Airflow using those tools, you should use the
constraint files and convert
│ │  them to the appropriate format and workflow that your tool requires.
│ │
│ │
│ │  ```bash
│ │ +pip install 'apache-airflow==3.1.4' \
│ │ + --constraint "
https://raw.githubusercontent.com/apache/airflow/constraints-3.1.4/constraints-3.10.txt
"
│ │ -pip install 'apache-airflow==3.1.5' \
│ │ - --constraint "
https://raw.githubusercontent.com/apache/airflow/constraints-3.1.5/constraints-3.10.txt
"
│ │  ```
│ │
│ │  2. Installing with extras (i.e., postgres, google)
│ │
│ │  ```bash
│ │ +pip install 'apache-airflow[postgres,google]==3.1.4' \
│ │ + --constraint "
https://raw.githubusercontent.com/apache/airflow/constraints-3.1.4/constraints-3.10.txt
"
│ │ -pip install 'apache-airflow[postgres,google]==3.1.5' \
│ │ - --constraint "
https://raw.githubusercontent.com/apache/airflow/constraints-3.1.5/constraints-3.10.txt
"
│ │  ```
│ │
│ │  For information on installing provider distributions, check
│ │  [providers](
http://airflow.apache.org/docs/apache-airflow-providers/index.html).
│ │
│ │  ## Official source code
│   --- apache_airflow-3.1.5-source/pyproject.toml
├── +++ apache_airflow-3.1.4-source/pyproject.toml
│ @@ -59,19 +59,19 @@
│      "Programming Language :: Python :: 3.11",
│      "Programming Language :: Python :: 3.12",
│      "Programming Language :: Python :: 3.13",
│      "Topic :: System :: Monitoring",
│  ]
│
│  # Version is defined in src/airflow/__init__.py and it is automatically
synchronized by prek
│ -version = "3.1.5"
│ +version = "3.1.4"
│
│  dependencies = [
│ -    "apache-airflow-task-sdk==1.1.5",
│ -    "apache-airflow-core==3.1.5",
│ +    "apache-airflow-task-sdk==1.1.4",
│ +    "apache-airflow-core==3.1.4",
│  ]
│
│  packages = []
│
│  [project.optional-dependencies]
│  # Automatically generated airflow optional dependencies
(update_airflow_pyproject_toml.py)
│  "all-core" = [
│   --- apache_airflow-3.1.5-source/reproducible_build.yaml
├── +++ apache_airflow-3.1.4-source/reproducible_build.yaml
│ @@ -1,2 +1,2 @@
│ -release-notes-hash: 75deb73e4744a67f6467178fb99c93e6
│ -source-date-epoch: 1765543510
│ +release-notes-hash: 1cef4f069cb23b395098f97d070d8d0a
│ +source-date-epoch: 1765212168
│   --- apache_airflow-3.1.5-source/task-sdk
├── +++ apache_airflow-3.1.4-source/task-sdk
│ │   --- apache_airflow-3.1.5-source/task-sdk/pyproject.toml
│ ├── +++ apache_airflow-3.1.4-source/task-sdk/pyproject.toml
│ │ @@ -45,15 +45,15 @@
│ │      "Programming Language :: Python :: 3.10",
│ │      "Programming Language :: Python :: 3.11",
│ │      "Programming Language :: Python :: 3.12",
│ │      "Programming Language :: Python :: 3.13",
│ │      "Topic :: System :: Monitoring",
│ │  ]
│ │  dependencies = [
│ │ +    "apache-airflow-core<3.2.0,>=3.1.3",
│ │ -    "apache-airflow-core<3.2.0,>=3.1.5",
│ │      "asgiref>=2.3.0",
│ │      "attrs>=24.2.0, !=25.2.0",
│ │      "babel>=2.17.0",
│ │      "fsspec>=2023.10.0",
│ │      "httpx>=0.27.0",
│ │      "jinja2>=3.1.5",
│ │      "methodtools>=0.4.7",
│ │   --- apache_airflow-3.1.5-source/task-sdk/src
│ ├── +++ apache_airflow-3.1.4-source/task-sdk/src
│ │ │   --- apache_airflow-3.1.5-source/task-sdk/src/airflow
│ │ ├── +++ apache_airflow-3.1.4-source/task-sdk/src/airflow
│ │ │ │   --- apache_airflow-3.1.5-source/task-sdk/src/airflow/sdk
│ │ │ ├── +++ apache_airflow-3.1.4-source/task-sdk/src/airflow/sdk
│ │ │ │ │   ---
apache_airflow-3.1.5-source/task-sdk/src/airflow/sdk/__init__.py
│ │ │ │ ├── +++
apache_airflow-3.1.4-source/task-sdk/src/airflow/sdk/__init__.py
│ │ │ │ │ @@ -56,15 +56,15 @@
│ │ │ │ │      "literal",
│ │ │ │ │      "setup",
│ │ │ │ │      "task",
│ │ │ │ │      "task_group",
│ │ │ │ │      "teardown",
│ │ │ │ │  ]
│ │ │ │ │
│ │ │ │ │ -__version__ = "1.1.5"
│ │ │ │ │ +__version__ = "1.1.4"
│ │ │ │ │
│ │ │ │ │  if TYPE_CHECKING:
│ │ │ │ │      from airflow.sdk.api.datamodels._generated import
DagRunState, TaskInstanceState, TriggerRule, WeightRule
│ │ │ │ │      from airflow.sdk.bases.hook import BaseHook
│ │ │ │ │      from airflow.sdk.bases.notifier import BaseNotifier
│ │ │ │ │      from airflow.sdk.bases.operator import BaseOperator, chain,
chain_linear, cross_downstream
│ │ │ │ │      from airflow.sdk.bases.operatorlink import BaseOperatorLink
````





On Fri, Dec 12, 2025 at 6:19 PM Ash Berlin-Taylor <[email protected]> wrote:

> Confirmed only difference between 3.1.4rc2 and 3.1.5rc2 is the version and
> related metadata files. (https://try.diffoscope.org/hquvbsdzzvca.html
> https://try.diffoscope.org/skudyxtkexgs.html etc)
>
> Checked sigs.
>
> +1 (binding)
>
>
> > On 12 Dec 2025, at 16:50, Ephraim Anierobi <[email protected]>
> wrote:
> >
> > Hey fellow Airflowers,
> >
> > The release candidates for Apache Airflow 3.1.5rc1 and Task SDK 1.1.5rc1
> > are now available for testing!
> >
> > This is an accelerated vote because 3.1.5rc1 is functionally identical to
> > 3.1.4rc2, differing only by version. 3.1.4rc1 was inadvertently released
> as
> > 3.1.4, which was yanked because of being published from the incorrect RC.
> > We are therefore expediting this vote to release 3.1.5 as soon as
> possible.
> >
> > This email is calling for a vote on the release, which will last at
> least 4
> > hours, from Friday, December 12, 2025 at 5:00 pm UTC
> > until Friday, December 12, 2025 at 9:00 pm UTC
> > <
> https://www.timeanddate.com/worldclock/fixedtime.html?msg=8&iso=20251212T2100&p1=1440
> >,
> > and until 3 binding +1 votes have been received.
> >
> > Status of testing of the release is kept in
> > https://github.com/apache/airflow/issues/59033
> >
> > Consider this my +1 binding vote.
> >
> > Airflow 3.1.5rc1 is available at:
> > https://dist.apache.org/repos/dist/dev/airflow/3.1.5rc1/
> >
> > "apache-airflow" Meta package:
> > - *apache-airflow-3.1.5-source.tar.gz* is a source release that comes
> with
> > INSTALL instructions.
> > - *apache-airflow-3.1.5.tar.gz* is the binary Python "sdist" release.
> > - *apache_airflow-3.1.5-py3-none-any.whl* is the binary Python wheel
> > "binary" release.
> >
> > "apache-airflow-core" package:
> > - *apache_airflow_core-3.1.5.tar.gz* is the binary Python "sdist"
> release.
> > - *apache_airflow_core-3.1.5-py3-none-any.whl* is the binary Python wheel
> > "binary" release.
> >
> > Task SDK 1.1.5 is available at:
> > https://dist.apache.org/repos/dist/dev/airflow/task-sdk/1.1.5rc1/
> >
> > "apache-airflow-task-sdk" package:
> > - *apache_airflow_task_sdk-1.1.5.tar.gz* is the binary Python "sdist"
> > release.
> > - *apache_airflow_task_sdk-1.1.5-py3-none-any.whl* is the binary Python
> > wheel "binary" release.
> >
> > Public keys are available at:
> > https://dist.apache.org/repos/dist/release/airflow/KEYS
> >
> > Please vote accordingly:
> >
> > [ ] +1 approve
> > [ ] +0 no opinion
> > [ ] -1 disapprove with the reason
> >
> > Only votes from PMC members are binding, but all members of the community
> > are encouraged to test the release and vote with "(non-binding)".
> >
> > The test procedure for PMC members is described in:
> >
> https://github.com/apache/airflow/blob/main/dev/README_RELEASE_AIRFLOW.md#verify-the-release-candidate-by-pmc-members
> >
> > The test procedure for contributors and members of the community who
> would
> > like to test this RC is described in:
> >
> https://github.com/apache/airflow/blob/main/dev/README_RELEASE_AIRFLOW.md#verify-the-release-candidate-by-contributors
> >
> > Please note that the version number excludes the 'rcX' string, so it's
> now
> > simply 3.1.5 for Airflow package and 1.1.5 for Task SDK. This will allow
> us
> > to rename the artifact without modifying
> > the artifact checksums when we actually release.
> >
> > Docs (for preview):
> > https://airflow.staged.apache.org/docs/apache-airflow/3.1.5
> >
> > Release Notes:
> > - https://github.com/apache/airflow/blob/3.1.5rc1/RELEASE_NOTES.rst
> > -
> >
> https://airflow.staged.apache.org/docs/apache-airflow/3.1.5/release_notes.html
> > (Rendered HTML)
> >
> > Testing Instructions using PyPI:
> > You can build a virtualenv that installs this and other required packages
> > (e.g. task sdk), like this:
> >
> > uv venv
> > uv pip install -U \
> >  apache-airflow==3.1.5rc1 \
> >  apache-airflow-core==3.1.5rc1 \
> >  apache-airflow-task-sdk==1.1.5rc1
> >
> > Constraints files are at
> > https://github.com/apache/airflow/tree/constraints-3.1.5rc1
> >
> > Cheers,
> > Ephraim
>
>

Reply via email to