I compared with 3.1.5rc1 of course. On Fri, Dec 12, 2025 at 7:18 PM Jarek Potiuk <[email protected]> wrote:
> +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 >> >>
