The vote to release Apache Airflow Python Client 3.1.0 from 3.1.0rc1 has now passed.
4 "+1" binding votes received: - Kaxil Naik - Jarek Potiuk - Jens Scheffler - Amogh Desai Vote thread: https://lists.apache.org/thread/9kh6bqp3876vpknyk8ng0rcpv4k40xzh I'll continue with the release process, and the release announcement will follow shortly. Regards, Kaxil On Wed, 29 Oct 2025 at 06:29, Amogh Desai <[email protected]> wrote: > +1 binding. > > - Checked SVN > - Reproducible Package builds > - Checked signatures > - Checked SHA512 checksums > > Didn't perform any specific tests but the quality checks look fine. > > Thanks & Regards, > Amogh Desai > > > On Wed, Oct 29, 2025 at 3:20 AM Jens Scheffler <[email protected]> > wrote: > > > +1 (binding) - Checked SVN, Checksums, Reproducible package build, > > Licenses, Signatures > > > > Note that "Reproducible package build" had the same small diff on my > > side discovered by diffoscope, not worth rejecting release. Just one > > bracked as diff. > > > > On 28.10.25 17:57, Kaxil Naik wrote: > > > Still waiting on one more binding vote here. > > > > > > On Tue, 28 Oct 2025 at 00:03, Jarek Potiuk <[email protected]> wrote: > > > > > >> Quick reproducibility protection: > > >> https://github.com/apache/airflow/pull/57390 > > >> > > >> On Tue, Oct 28, 2025 at 12:34 AM Kaxil Naik <[email protected]> > > wrote: > > >> > > >>> Yeah I do use Py 3.10 as default for breeze. > > >>> > > >>> On Mon, 27 Oct 2025 at 15:31, Jarek Potiuk <[email protected]> wrote: > > >>> > > >>>> Same diff :(). Tried on a different machine. > > >>>> > > >>>> Interestingly enough the PR added by you 4 days ago also contains > the > > >>>> addition of the parentheses > > >>>> > > >>>> > > >> > > > https://github.com/apache/airflow-client-python/commit/241405e219eb76e9b43791466f3f4ed27d65a51a#diff-94fc09b38b570968d70d17aeb197363aefe1925a87a37b213b69b75ee2f4a357R65 > > >>>> > > >>>> We used fixed versions of all tools in the dockerfile. > > >>>> And fix openapi generator: 7.13.0 > > >>>> > > >>>> First I found is that Python 3.10.19 image (previoulsly 3.10.18) has > > >> been > > >>>> released 4 days ago. I checked and used older version of Python > 3.10 - > > >>> and > > >>>> it was not it. > > >>>> > > >>>> But then I found the reason. We are running patching of > > >>>> trigger_dag_run_post_body.py in breeze. And there we are using AST: > > >>>> > > >>>> source = TRIGGER_MODEL_PATH.read_text(encoding="utf-8") > > >>>> tree = ast.parse(source) > > >>>> LogicalDateDictPatch().visit(tree) > > >>>> ast.fix_missing_locations(tree) > > >>>> TRIGGER_MODEL_PATH.write_text(ast.unparse(tree), > > >>> encoding="utf-8") > > >>>> This code is run in breeze, and when your breeze is installed with > > >> python > > >>>> 3.10 it produces (), when you use 3.11+ to install breeze, it does > not > > >>> add > > >>>> the parentheses when "unparsing". So I guess your breeze is > installed > > >>> with > > >>>> Python 3.10. > > >>>> You can check it with > > >>>> > > >>>> uv tool list --show-python # will show you the python version used > for > > >>>> breeze > > >>>> > > >>>> Then: > > >>>> > > >>>> > > >>>> uv tool install -e ./dev/breeze --python python3.10 > > >>>> breeze release-management prepare-python-client > --distribution-format > > >>> both > > >>>> Followed by: > > >>>> > > >>>> uv tool install -e ./dev/breeze --python python3.11 > > >>>> breeze release-management prepare-python-client > --distribution-format > > >>> both > > >>>> Will roduce .tar.gz files will differ by the extra () in Python 3.10 > > >> (you > > >>>> can compare it with the "asf-dist" file with `diffoscope` > > >>>> > > >>>> Very interesting case - just in time for the Reproducible Build > Summit > > >>> :D. > > >>>> And it also means that's it's a good idea that all our > "manipulation" > > >> of > > >>>> the code runs inside the Dockerfile. not directly in Breeze (there > > >> Python > > >>>> version is fixed - to default version). i will fix it soon. > > >>>> > > >>>> J. > > >>>> > > >>>> > > >>>> > > >>>> > > >>>> > > >>>> > > >>>> On Mon, Oct 27, 2025 at 12:04 PM Kaxil Naik <[email protected]> > > >> wrote: > > >>>>> Could you try the following from the Airflow repo: > > >>>>> > > >>>>> git checkout python-client/3.1.0rc1 > > >>>>> breeze release-management prepare-python-client > --distribution-format > > >>>> both > > >>>>> --python-client-repo "${CLIENT_REPO_ROOT}" --version-suffix "" > > >>>>> > > >>>>> On Mon, 27 Oct 2025 at 08:31, Jarek Potiuk <[email protected]> > wrote: > > >>>>> > > >>>>>> Kaxil - it would be good to know how you generated the client to > > >> get > > >>>>> there > > >>>>>> and fix the reproducibility issue. > > >>>>>> > > >>>>>> BTW. Very related thing - I am going tonight to Vienna for two > > >> days > > >>> to > > >>>>>> take part in the "Reproducible Builds Summit" > > >>>>>> > > >>>>>> > > >> > > > https://reproducible-builds.org/news/2025/08/20/reproducible-builds-summit-in-vienna/ > > >>>>>> -> with the goal to make our builds permanently reproducible and > > >>>>> following > > >>>>>> some emerging standards of reproducibility (there are things > > >> brewing > > >>>> and > > >>>>>> the Summit is the place where things are not only talked but also > > >>> there > > >>>>> are > > >>>>>> some workshops where I will attempt to apply those things I will > > >>>> learn). > > >>>>>> This will be extremely useful in the near future, when Apache > > >> Trusted > > >>>>>> Releases ( > > >>>>>> > > >>>>>> > > >> > > > https://news.apache.org/foundation/entry/apache-trusted-releases-platform-begins-second-alpha > > >>>>>> ) > > >>>>>> gets out of Alpha status - because having fully reproducible > builds > > >>> is > > >>>>> the > > >>>>>> prerequisite to release our software automatically via ASF-managed > > >>>> build > > >>>>>> infrastructure. This will mean that our releases will not only be > > >>> safer > > >>>>>> and more secure, but will also have cryptographic attestations of > > >>> both > > >>>> - > > >>>>>> source provenance and managed and verified build process. > > >>>>>> > > >>>>>> This is something that will make Airflow one of the first projects > > >> in > > >>>> the > > >>>>>> ASF to make sort of a "golden standard" for supply-chain attack > > >>>>> prevention > > >>>>>> (following the recent outbreak of things like xz ( > > >>>>>> https://en.wikipedia.org/wiki/XZ_Utils_backdoor), or more recent > > >>>>>> shai-hulud > > >>>>>> attack - self-replicating worm attacking 180+ packages ( > > >>>>>> > > >> > > > https://www.trendmicro.com/en_us/research/25/i/npm-supply-chain-attack.html > > >>>>>> ). > > >>>>>> > > >>>>>> We are also working in the security team to tighten our security > > >> for > > >>>> our > > >>>>>> dependencies at release time as part of that effort. > > >>>>>> > > >>>>>> J. > > >>>>>> > > >>>>>> > > >>>>>> On Mon, Oct 27, 2025 at 9:17 AM Jarek Potiuk <[email protected]> > > >>> wrote: > > >>>>>>> +1 (binding): checked reproducibility, signatures, checksums > > >>>> (licences > > >>>>>> not > > >>>>>>> needed as we are using already checked and released "airflow" > > >>> sources > > >>>>> to > > >>>>>>> generate all client code). > > >>>>>>> > > >>>>>>> I think there is a bit of discrepancy between the tag and > > >> release. > > >>> I > > >>>>> run > > >>>>>> a > > >>>>>>> reproducibility check and the code is slightly different (both > > >>> .sdist > > >>>>> and > > >>>>>>> whl are different). > > >>>>>>> > > >>>>>>> ├── apache_airflow_client-3.1.0.tar > > >>>>>>> │ ├── file list > > >>>>>>> │ │ @@ -164,15 +164,15 @@ > > >>>>>>> │ │ -rw-r--r-- 0 0 0 7140 2025-09-23 > > >>>>> 20:07:31.000000 > > >> > > > apache_airflow_client-3.1.0/airflow_client/client/models/task_instance_response.py > > >>>>>>> │ │ -rw-r--r-- 0 0 0 1374 2025-09-23 > > >>>>> 20:07:31.000000 > > >> > > > apache_airflow_client-3.1.0/airflow_client/client/models/task_instance_state.py > > >>>>>>> │ │ -rw-r--r-- 0 0 0 6436 2025-09-23 > > >>>>> 20:07:31.000000 > > >> > > > apache_airflow_client-3.1.0/airflow_client/client/models/task_instances_batch_body.py > > >>>>>>> │ │ -rw-r--r-- 0 0 0 3152 2025-09-23 > > >>>>> 20:07:31.000000 > > >> > > > apache_airflow_client-3.1.0/airflow_client/client/models/task_instances_log_response.py > > >>>>>>> │ │ -rw-r--r-- 0 0 0 3019 2025-09-23 > > >>>>> 20:07:31.000000 > > >> > > > apache_airflow_client-3.1.0/airflow_client/client/models/task_outlet_asset_reference.py > > >>>>>>> │ │ -rw-r--r-- 0 0 0 6362 2025-09-23 > > >>>>> 20:07:31.000000 > > >>> > > apache_airflow_client-3.1.0/airflow_client/client/models/task_response.py > > >>>>>>> │ │ -rw-r--r-- 0 0 0 3083 2025-09-23 > > >>>>> 20:07:31.000000 > > >>>> > apache_airflow_client-3.1.0/airflow_client/client/models/time_delta.py > > >>>>>>> │ │ --rw-r--r-- 0 0 0 3641 2025-09-23 > > >>>>> 20:07:31.000000 > > >> > > > apache_airflow_client-3.1.0/airflow_client/client/models/trigger_dag_run_post_body.py > > >>>>>>> │ │ +-rw-r--r-- 0 0 0 3639 2025-09-23 > > >>>>> 20:07:31.000000 > > >> > > > apache_airflow_client-3.1.0/airflow_client/client/models/trigger_dag_run_post_body.py > > >>>>>>> │ │ -rw-r--r-- 0 0 0 3101 2025-09-23 > > >>>>> 20:07:31.000000 > > >> > > > apache_airflow_client-3.1.0/airflow_client/client/models/trigger_response.py > > >>>>>>> │ │ -rw-r--r-- 0 0 0 2920 2025-09-23 > > >>>>> 20:07:31.000000 > > >> > > > apache_airflow_client-3.1.0/airflow_client/client/models/triggerer_info_response.py > > >>>>>>> │ │ -rw-r--r-- 0 0 0 2997 2025-09-23 > > >>>>> 20:07:31.000000 > > >> > > > apache_airflow_client-3.1.0/airflow_client/client/models/update_hitl_detail_payload.py > > >>>>>>> │ │ -rw-r--r-- 0 0 0 3299 2025-09-23 > > >>>>> 20:07:31.000000 > > >> > > > apache_airflow_client-3.1.0/airflow_client/client/models/validation_error.py > > >>>>>>> │ │ -rw-r--r-- 0 0 0 5081 2025-09-23 > > >>>>> 20:07:31.000000 > > >> > > > apache_airflow_client-3.1.0/airflow_client/client/models/validation_error_loc_inner.py > > >>>>>>> │ │ -rw-r--r-- 0 0 0 5140 2025-09-23 > > >>>>> 20:07:31.000000 > > >>>>>>> apache_airflow_client-3.1.0/airflow_client/client/models/value.py > > >>>>>>> │ │ -rw-r--r-- 0 0 0 3159 2025-09-23 > > >>>>> 20:07:31.000000 > > >>> > > apache_airflow_client-3.1.0/airflow_client/client/models/variable_body.py > > >>>>>>> │ ├── > > >>>>>>> > > >> > > > apache_airflow_client-3.1.0/airflow_client/client/models/trigger_dag_run_post_body.py > > >>>>>>> │ │ @@ -58,15 +58,15 @@ > > >>>>>>> │ │ * Fields in `self.additional_properties` are added > > >> to > > >>>> the > > >>>>>>> output dict. > > >>>>>>> │ │ """ > > >>>>>>> │ │ excluded_fields: Set[str] = > > >>>> set(['additional_properties']) > > >>>>>>> │ │ _dict = self.model_dump(by_alias=True, > > >>>>>>> exclude=excluded_fields, exclude_none=True) > > >>>>>>> │ │ if 'logical_date' not in _dict: > > >>>>>>> │ │ _dict['logical_date'] = None > > >>>>>>> │ │ if self.additional_properties is not None: > > >>>>>>> │ │ - for (_key, _value) in > > >>>>>> self.additional_properties.items(): > > >>>>>>> │ │ + for _key, _value in > > >>>>> self.additional_properties.items(): > > >>>>>>> │ │ _dict[_key] = _value > > >>>>>>> │ │ return _dict > > >>>>>>> │ │ > > >>>>>>> │ │ @classmethod > > >>>>>>> │ │ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> > > >>>>>>> Optional[Self]: > > >>>>>>> │ │ """Create an instance of TriggerDAGRunPostBody from > > >> a > > >>>>>> dict""" > > >>>>>>> │ │ if obj is None: > > >>>>>>> > > >>>>>>> I am not sure how the client was generated - and where the > > >>> difference > > >>>>>> came > > >>>>>>> from - either different generator or our post-processing code (we > > >>>>>>> post-process the generated code to fix some of the generator > > >> issues > > >>>> -> > > >>>>>>> https://github.com/apache/airflow/pull/50704 - or maybe that is > > >> a > > >>>>>>> "black/ruff" formatting issue with different version of > > >> ruff/black > > >>>>>>> used? But the difference is insignificant enough and easily > > >>> manually > > >>>>>>> verifiable, so that's not a reason for -1 (reproducibility for > > >> now > > >>> is > > >>>>>>> optional check that can be followed by inspecting the > > >> differences). > > >>>>>>> J. > > >>>>>>> > > >>>>>>> > > >>>>>>> On Mon, Oct 27, 2025 at 2:16 AM Kaxil Naik <[email protected]> > > >>>>> wrote: > > >>>>>>>> Aah, yes thanks Jens. Files have been pushed. > > >>>>>>>> > > >>>>>>>> On Sun, 26 Oct 2025 at 18:00, Jarek Potiuk <[email protected]> > > >>>> wrote: > > >>>>>>>>> Ah.. I missed this one. Yeah - we need those. > > >>>>>>>>> > > >>>>>>>>> On Sun, Oct 26, 2025 at 6:56 PM Jens Scheffler < > > >>>> [email protected] > > >>>>>>>>> wrote: > > >>>>>>>>> > > >>>>>>>>>> Hi Kaxil, > > >>>>>>>>>> > > >>>>>>>>>> finally wanted to make my PMC duties and check release but > > >>>> needed > > >>>>> to > > >>>>>>>>>> realize that ASC and SHA512 files are missing/not uploaded. > > >>> Can > > >>>>> you > > >>>>>>>>>> please push them to SVN for validation? > > >>>>>>>>>> > > >>>>>>>>>> Jens > > >>>>>>>>>> > > >>>>>>>>>> On 22.10.25 22:26, Kaxil Naik wrote: > > >>>>>>>>>>> Hey fellow Airflowers, > > >>>>>>>>>>> > > >>>>>>>>>>> I have cut the first release candidate for the Apache > > >>> Airflow > > >>>>>> Python > > >>>>>>>>>> Client > > >>>>>>>>>>> 3.1.0. > > >>>>>>>>>>> This email is calling for a vote on the release, > > >>>>>>>>>>> which will last for 72 hours. Consider this my (binding) > > >> +1. > > >>>>>>>>>>> Airflow Client 3.1.0rc1 is available at: > > >>>>>>>>>>> > > >> > https://dist.apache.org/repos/dist/dev/airflow/clients/python/3.1.0rc1/ > > >>>>>>>>>>> The apache_airflow_client-3.1.0.tar.gz is an sdist release > > >>>> that > > >>>>>>>>> contains > > >>>>>>>>>>> INSTALL instructions, and also > > >>>>>>>>>>> is the official source release. > > >>>>>>>>>>> > > >>>>>>>>>>> The apache_airflow_client-3.1.0-py3-none-any.whl is a > > >> binary > > >>>>> wheel > > >>>>>>>>>> release > > >>>>>>>>>>> that pip can install. > > >>>>>>>>>>> > > >>>>>>>>>>> Those packages do not contain .rc* version as, when > > >>> approved, > > >>>>> they > > >>>>>>>> will > > >>>>>>>>>> be > > >>>>>>>>>>> released as the final version. > > >>>>>>>>>>> > > >>>>>>>>>>> The rc packages are also available at PyPI (with rc > > >> suffix) > > >>>> and > > >>>>>> you > > >>>>>>>> can > > >>>>>>>>>>> install it with pip as usual: > > >>>>>>>>>>> https://pypi.org/project/apache-airflow-client/3.1.0rc1/ > > >>>>>>>>>>> > > >>>>>>>>>>> Public keys are available at: > > >>>>>>>>>>> https://dist.apache.org/repos/dist/release/airflow/KEYS > > >>>>>>>>>>> > > >>>>>>>>>>> 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_PYTHON_CLIENT.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_PYTHON_CLIENT.md#verify-the-release-candidate-by-contributors > > >>>>>>>>>>> *Changelog*: > > >>> https://github.com/apache/airflow-client-python > > >>>>>>>>>>> /blob/3.1.0rc1/CHANGELOG.md > > >>>>>>>>>>> > > >>>>>>>>>>> Regards, > > >>>>>>>>>>> Kaxil > > >>>>>>>>>>> > > >>>>>>>>>> > > >> --------------------------------------------------------------------- > > >>>>>>>>>> To unsubscribe, e-mail: [email protected] > > >>>>>>>>>> For additional commands, e-mail: > > >> [email protected] > > >>>>>>>>>> > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [email protected] > > For additional commands, e-mail: [email protected] > > > > >
