+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 > >
