Thanks Jarek, as mentioned in the other thread it seemed to break a different pattern for me. I was aware of "what goes into the next release", but the title seemed more indicative of roadmap items and thus geared to consumers of a release.
Earlier, it seems, I was helped by others when PRs were tagged for a particular release so I was under the impression this felt under the release manager's way of working. I suggested adding a label to the vote, like patch-release, and including the link to the doc. That makes it easier for more occasional viewers. B. On Wed, 17 Jan 2024 at 13:42, Jarek Potiuk <ja...@potiuk.com> wrote: > I separate it out, because it seems that despite the efforts to explain > and document how our releases work It's not clear even for the PMC chair, > so likely it warrants a separate thread - also it will be easier to find it > in the archives this way. > > I think this is an important topic that all maintainers should be aware > of, so let me take a task to explain it in a longer email (and separate > thread). > > I created it in a form of FAQ, because it seems that similar questions > might be asked by others. > > *Do we have a process defined here?* > > Answering Bolke's question - who was apparently confused what our process > is: > > > I see that some improvements to Airflow.io (two weeks ago) were not > included and some provider updates neither. Haven't checked anything else > yet. > > Apparently there is some confusion about the process, but yes we have a > well defined and well tested (pretty much 4 years now) process that we > follow., We follow it since I remember actually - it's been also done the > same in 1.10 - but with some variations, Likely we do it the same way since > the beginning of 2.0, but it has been refined and improved over time - by > those who volunteered their time in the release process (a lot of ad-hoc > discussion have been traditionally happening in #release-management slack > channel) and as of few months ago we even documented it (It was in November > 2023) - with this PR https://github.com/apache/airflow/pull/35245 > > It is currently described in a prominent place in our most important (and > over the last year or so the README, we made the README pretty short and > contains only super-important information on how Airflow is developed) > README.md under *"What goes into the next release?"* chapter: > > > https://github.com/apache/airflow?tab=readme-ov-file#what-goes-into-the-next-release > . > > *How does the selection process for cherry-picking work?* > > In short (and this is the most important thing that every maintainer > should be aware of): *those maintainers who think that issue should be > included should mark it with the next (in this case 2.8.1) milestone*. > It's up to individual maintainers who want to include certain changes to > take care about it and mark the issues they think are bug fixes, to go into > the next release > > This is the only thing that the maintainer has to do to get the PR > proposed to be considered in the next patchlevel release. Sometimes - if > controversial - maintainers discuss the proposals in #release-management > channel, sometimes in #development or in the PR itself (especially if the > release manager decides to not include it and changes the milestone (and > explains why). > > *What's the release manager's role ?* > > Release manager's job is purely mechanical (as also mandated by the Apache > Software Foundation release manager role description) to assess cherry-pick > ability of those changes. Release manager - at the sole discretion and > individual decision (this is the only place in the whole ASF setup where a > single person has such power to make individual decisions) can reject some > of those who other maintainers think should be included. But the release > manager on his own does not make proposals on what should be included. > > *Is this process following the ASF rules?* > > I believe yes, The release manager's role is nicely described here: > https://infra.apache.org/release-publishing.html#releasemanager. And > there is a far more complete description here that describes the whole > process https://www.apache.org/legal/release-policy.html#management - > also mentioning that it's the PMC's responsibility (and particularly PMC > chair's) to adhere to the process. > > *What's the role of individual maintainers?* > > The role of maintainers (collectively) to propose things for the next > release. In our case it happens with setting the milestone on a PR. > > *When proposed PRs are rejected?* > > There are various reasons to reject those - if too complex to cherry-pick > or when the release manager assesses it's a new feature, not a bugfix. > Essentially (according to semver) when it comes to the user-facing changes, > the PATCHLEVEL release should contain only bugfixes. and may contain docs > changes if they are fixing/improving docs (not about new features) and also > environment/build script changes (so non-user-facing changes) as they are > pretty much always needed to keep the things nicely building - those are > usually skipped from the changelog as non-user facing). > > *Why are provider changes not cherry-picked?* > > In our case - basically none of the provider changes are cherry-picked - > unless they are needed to make the builds work well (sometimes happen). > Providers are ALWAYS released from the latest main code, not from the > v2-8-stable branch. In fact all the tests and ci checks for providers are > skipped in the non-main (v2* branches). So yes - not seeing provider > changes cherry-picked is absolutely expected. > > *Do we skip over some changes when releasing a patchlevel release? What's > the purpose of patch-level releases?* > > Answering Bolke's question: > > > Is that intentional? Ie. is that the purpose of this release. Other > big(ger) and more recent changes have been included hence asking. > > The purpose of that release is as described in SemVer - to give the users > bugfix-only release that has no new features. Of course it's sometimes > debatable whether changes are features/bugfixes, but we usually use > #release-management to quickly chat about it, and eventually the release > manager always makes a comment in the PR when the milestone is changed and > explains the reasoning. > > Skipping is not intentional because we never "skip" things when > cherry-picking, It's *reverse* - those maintainer who think that certain > bug fixes (or internal changes or sometimes even feature changes that we > classify really as "bugfix" SHOULD intentionally mark those PRs they want > with 2.8.1 (or basically next patch-level) to be *included. * So there is > no skipping, if maintainer did not deliberately mark PR as upcoming > milestone, it will just not be included > > *Where do some maintainers know about it **from ? * > > Because the maintainers who actively participate - either acting as > release managers (those who raised their hand and acted as release managers > generally speaking) and those who wanted their changes to be part of the > past releases have been doing it for years. For years this has been simply > followed and discussed in #release-management channel and #development (and > in devlist whenever there were new releases) and generally the maintainers > who took part in those discussions and release process are aware of that - > also many maintainers know the process as it "soaked" in when they were > just watching. > > However recently we've made an attempt to document it (the PR above). So > you could learn it by reading it (even if it does not have the whole > context above). > > *Why do some people not know about it?* > > Not sure. Maybe because they were not interested and never asked? Maybe > because there was never a long email about it at our devlist, or the > documentation about it in README was too succinct? > > Or maybe we need a better way of communicating it - I am not sure. But I > hope this email will clarify a lot of it, and will prove valuable when > searching in devlist. > > Maybe even someone who manages to read it all will update the README > description of ours to explain it better :) and maybe create a nice FAQ > that we can put in our docs? > > I really hope this mail - even if long - will make people a bit more aware > of the process, and if someone has an idea how the "collective" awareness > can be improved - I think it's a good idea to send PR or email (or maybe > even record a video :) ??) that will be a better way of communicating it. > > J. > > > On Wed, Jan 17, 2024 at 9:03 AM Bolke de Bruin <bdbr...@gmail.com> wrote: > >> Just checking: >> >> I see that some improvements to Airflow.io (two weeks ago) were not >> included and some provider updates neither. Haven't checked anything else >> yet. >> >> Is that intentional? Ie. is that the purpose of this release. Other >> big(ger) and more recent changes have been included hence asking. >> >> B. >> >> Sent from my iPhone >> >> > On 16 Jan 2024, at 20:18, Jarek Potiuk <ja...@potiuk.com> wrote: >> > >> > +1 (binding): Checked all my changes, I ran airflow in a few >> combinations >> > (MySQL / Postgres Local/Celery executor. It looks and works well - run a >> > few dags and navigated through a number of screens. Checked licences, >> > signatures, checksums, performed a "reproducible build" check and it >> worked >> > (with a small glitch explained below). >> > >> > BTW. The new "hatchling-built" package looks good and it nicely installs >> > airflow + extras (and it has a far better and cleaner set of extras - >> > finally you can reproducibly install airflow with `all` extra if you >> > ***REALLY*** want :). >> > >> > Reproducibility (also for other PMC members doing the check): I found a >> > small glitch in the "reproducible" part of verifying the packages. While >> > wheel and sdist packages are exactly the same binary-wise, the >> > source-tarball was binarry different for me. I decompressed it and >> compared >> > the content - they are identical - but there is one difference which I >> > overlooked - the group permissions for files in Ephraim's tarball are >> > different from mine. I have totally forgotten about the fact that umask >> > might set different group/other permissions when checking out the files >> > from git. Fix will be coming shortly - in the meantime I recommend >> anyone >> > who will be doing the comparison to uncompress both tarballs and compare >> > the contents with `diff -r`. >> > >> > >> > >> >> On Tue, Jan 16, 2024 at 11:30 AM Ephraim Anierobi < >> >> ephraimanier...@apache.org> wrote: >> >> >> >> Hey fellow Airflowers, >> >> >> >> I have cut Airflow 2.8.1rc1. This email is calling a vote on the >> release, >> >> which will last at least 72 hours, from Tuesday, January 16, 2024 at >> 10:30 >> >> am UTC >> >> until Friday, January 19, 2024, at 10:30 am UTC >> >> < >> >> >> https://www.timeanddate.com/worldclock/fixedtime.html?msg=8&iso=20240119T1030&p1=1440 >> >>> , >> >> and until 3 binding +1 votes have been received. >> >> >> >> Status of testing of the release is kept at >> >> https://github.com/apache/airflow/issues/36808 >> >> >> >> Consider this my (binding) +1. >> >> >> >> Airflow 2.8.1rc1 is available at: >> >> https://dist.apache.org/repos/dist/dev/airflow/2.8.1rc1/ >> >> >> >> *apache-airflow-2.8.1-source.tar.gz* is a source release that comes >> with >> >> INSTALL instructions. >> >> *apache-airflow-2.8.1.tar.gz* is the binary Python "sdist" release. >> >> *apache_airflow-2.8.1-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 and Contributors 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 2.8.1. This will allow us to rename the artifact without >> modifying >> >> the artifact checksums when we actually release. >> >> >> >> Release Notes: >> >> https://github.com/apache/airflow/blob/2.8.1rc1/RELEASE_NOTES.rst >> >> >> >> Changes since 2.8.0: >> >> >> >> *Significant Changes* >> >> >> >> *Target version for core dependency ``pendulum`` package set to 3 >> >> (#36281).* >> >> Support for pendulum 2.1.2 will be saved for a while, presumably until >> the >> >> next feature version of Airflow. >> >> It is advised to upgrade user code to use pendulum 3 as soon as >> possible. >> >> >> >> *Airflow packaging specification follows modern Python packaging >> standards >> >> (#36537).* >> >> We standardized Airflow dependency configuration to follow latest >> >> development in Python packaging by >> >> using ``pyproject.toml``. Airflow is now compliant with those accepted >> >> PEPs: >> >> >> >> * `PEP-440 Version Identification and Dependency Specification < >> >> https://www.python.org/dev/peps/pep-0440/>`__ >> >> * `PEP-517 A build-system independent format for source trees < >> >> https://www.python.org/dev/peps/pep-0517/>`__ >> >> * `PEP-518 Specifying Minimum Build System Requirements for Python >> Projects >> >> <https://www.python.org/dev/peps/pep-0518/>`__ >> >> * `PEP-561 Distributing and Packaging Type Information < >> >> https://www.python.org/dev/peps/pep-0561/>`__ >> >> * `PEP-621 Storing project metadata in pyproject.toml < >> >> https://www.python.org/dev/peps/pep-0621/>`__ >> >> * `PEP-660 Editable installs for pyproject.toml based builds (wheel >> based) >> >> < >> >> https://www.python.org/dev/peps/pep-0660/>`__ >> >> * `PEP-685 Comparison of extra names for optional distribution >> dependencies >> >> <https://www.python.org/dev/peps/pep-0685/>`__ >> >> >> >> Also we implement multiple license files support coming from Draft, >> not yet >> >> accepted (but supported by hatchling) PEP: >> >> * `PEP 639 Improving License Clarity with Better Package Metadata < >> >> https://peps.python.org/pep-0639/>`__ >> >> >> >> This has almost no noticeable impact on users if they are using modern >> >> Python packaging and development tools, generally >> >> speaking Airflow should behave as it did before when installing it from >> >> PyPI and it should be much easier to install >> >> it for development purposes using ``pip install -e ".[devel]"``. >> >> >> >> The differences from the user side are: >> >> >> >> * Airflow extras now get extras normalized to ``-`` (following PEP-685) >> >> instead of ``_`` and ``.`` >> >> (as it was before in some extras). When you install airflow with such >> >> extras (for example ``dbt.core`` or >> >> ``all_dbs``) you should use ``-`` instead of ``_`` and ``.``. >> >> >> >> In most modern tools this will work in backwards-compatible way, but in >> >> some old version of those tools you might need to >> >> replace ``_`` and ``.`` with ``-``. You can also get warnings that the >> >> extra you are installing does not exist - but usually >> >> this warning is harmless and the extra is installed anyway. It is, >> however, >> >> recommended to change to use ``-`` in extras in your dependency >> >> specifications for all Airflow extras. >> >> >> >> * Released airflow package does not contain ``devel``, ``devel-*``, >> ``doc`` >> >> and ``doc-gen`` extras. >> >> Those extras are only available when you install Airflow from sources >> in >> >> ``--editable`` mode. This is >> >> because those extras are only used for development and documentation >> >> building purposes and are not needed >> >> when you install Airflow for production use. Those dependencies had >> >> unspecified and varying behaviour for >> >> released packages anyway and you were not supposed to use them in >> >> released packages. >> >> >> >> * The ``all`` and ``all-*`` extras were not always working correctly >> when >> >> installing Airflow using constraints >> >> because they were also considered as development-only dependencies. >> With >> >> this change, those dependencies are >> >> now properly handling constraints and they will install properly with >> >> constraints, pulling the right set >> >> of providers and dependencies when constraints are used. >> >> >> >> *Graphviz dependency is now an optional one, not required one >> (#36647).* >> >> The ``graphviz`` dependency has been problematic as Airflow required >> >> dependency - especially for >> >> ARM-based installations. Graphviz packages require binary graphviz >> >> libraries - which is already a >> >> limitation, but they also require to install graphviz Python bindings >> to be >> >> build and installed. >> >> This does not work for older Linux installation but - more importantly >> - >> >> when you try to install >> >> Graphviz libraries for Python 3.8, 3.9 for ARM M1 MacBooks, the >> packages >> >> fail to install because >> >> Python bindings compilation for M1 can only work for Python 3.10+. >> >> >> >> This is not a breaking change technically - the CLIs to render the >> DAGs is >> >> still there and IF you >> >> already have graphviz installed, it will continue working as it did >> before. >> >> The only problem when it >> >> does not work is where you do not have graphviz installed it will >> raise an >> >> error and inform that you need it. >> >> >> >> Graphviz will remain to be installed for most users: >> >> >> >> * the Airflow Image will still contain graphviz library, because >> >> it is added there as extra >> >> * when previous version of Airflow has been installed already, then >> >> graphviz library is already installed there and Airflow will >> >> continue working as it did >> >> >> >> The only change will be a new installation of new version of Airflow >> from >> >> the scratch, where graphviz will >> >> need to be specified as extra or installed separately in order to >> enable >> >> DAG rendering option. >> >> >> >> *Bug Fixes* >> >> - Fix airflow-scheduler exiting with code 0 on exceptions (#36800) >> >> - Fix Callback exception when a removed task is the last one in the >> >> ``taskinstance`` list (#36693) >> >> - Allow anonymous user edit/show resource when set >> >> ``AUTH_ROLE_PUBLIC=admin`` (#36750) >> >> - Better error message when sqlite URL uses relative path (#36774) >> >> - Explicit string cast required to force integer-type run_ids to be >> passed >> >> as strings instead of integers (#36756) >> >> - Add log lookup exception for empty ``op`` subtypes (#35536) >> >> - Remove unused index on task instance (#36737) >> >> - Fix check on subclass for ``typing.Union`` in >> ``_infer_multiple_outputs`` >> >> for Python 3.10+ (#36728) >> >> - Make sure ``multiple_outputs`` is inferred correctly even when using >> >> ``TypedDict`` (#36652) >> >> - Add back FAB constant in legacy security manager (#36719) >> >> - Fix AttributeError when using ``Dagrun.update_state`` (#36712) >> >> - Do not let ``EventsTimetable`` schedule past events if >> ``catchup=False`` >> >> (#36134) >> >> - Support encryption for triggers parameters (#36492) >> >> - Fix the type hint for ``tis_query`` in ``_process_executor_events`` >> >> (#36655) >> >> - Redirect to index when user does not have permission to access a page >> >> (#36623) >> >> - Avoid using dict as default value in ``call_regular_interval`` >> (#36608) >> >> - Remove option to set a task instance to running state in UI (#36518) >> >> - Fix details tab not showing when using dynamic task mapping (#36522) >> >> - Raise error when ``DagRun`` fails while running ``dag test`` (#36517) >> >> - Refactor ``_manage_executor_state`` by refreshing TIs in batch >> (#36502) >> >> - Add flask config: ``MAX_CONTENT_LENGTH`` (#36401) >> >> - Fix get_leaves calculation for teardown in nested group (#36456) >> >> - Stop serializing timezone-naive datetime to timezone-aware datetime >> with >> >> UTC tz (#36379) >> >> - Make ``kubernetes`` decorator type annotation consistent with >> operator >> >> (#36405) >> >> - Fix Webserver returning 500 for POST requests to ``api/dag/*/dagrun`` >> >> from anonymous user (#36275) >> >> - Fix the required access for get_variable endpoint (#36396) >> >> - Fix datetime reference in ``DAG.is_fixed_time_schedule`` (#36370) >> >> - Fix AirflowSkipException message raised by BashOperator (#36354) >> >> - Allow PythonVirtualenvOperator.skip_on_exit_code to be zero (#36361) >> >> - Increase width of execution_date input in trigger.html (#36278) >> >> - Fix logging for pausing DAG (#36182) >> >> - Stop deserializing pickle when enable_xcom_pickling is False (#36255) >> >> - Check DAG read permission before accessing DAG code (#36257) >> >> - Enable mark task as failed/success always (#36254) >> >> - Create latest log dir symlink as relative link (#36019) >> >> - Fix Python-based decorators templating (#36103) >> >> >> >> *Miscellaneous* >> >> - Rename concurrency label to max active tasks (#36691) >> >> - Restore function scoped ``httpx`` import in file_task_handler for >> >> performance (#36753) >> >> - Add support of Pendulum 3 (#36281) >> >> - Standardize airflow build process and switch to Hatchling build >> backend >> >> (#36537) >> >> - Get rid of ``pyarrow-hotfix`` for ``CVE-2023-47248`` (#36697) >> >> - Make ``graphviz`` dependency optional (#36647) >> >> - Announce MSSQL support end in Airflow 2.9.0, add migration script >> hints >> >> (#36509) >> >> - Set min ``pandas`` dependency to 1.2.5 for all providers and airflow >> >> (#36698) >> >> - Bump follow-redirects from 1.15.3 to 1.15.4 in ``/airflow/www`` >> (#36700) >> >> - Provide the logger_name param to base hook in order to override the >> >> logger name (#36674) >> >> - Fix run type icon alignment with run type text (#36616) >> >> - Follow BaseHook connection fields method signature in FSHook (#36444) >> >> - Remove redundant ``docker`` decorator type annotations (#36406) >> >> - Straighten typing in workday timetable (#36296) >> >> - Use ``batch_is_authorized_dag`` to check if user has permission to >> read >> >> DAGs (#36279) >> >> - Replace deprecated get_accessible_dag_ids and use get_readable_dags >> in >> >> get_dag_warnings (#36256) >> >> >> >> *Doc Only Changes* >> >> - Metrics tagging documentation (#36627) >> >> - In docs use logical_date instead of deprecated execution_date >> (#36654) >> >> - Add section about live-upgrading Airflow (#36637) >> >> - Replace ``numpy`` example with practical exercise demonstrating >> top-level >> >> code (#35097) >> >> - Improve and add more complete description in the architecture >> diagrams >> >> (#36513) >> >> - Improve the error message displayed when there is a webserver error >> >> (#36570) >> >> - Update ``dags.rst`` with information on DAG pausing (#36540) >> >> - Update installation prerequisites after upgrading to Debian Bookworm >> >> (#36521) >> >> - Add description on the ways how users should approach DB monitoring >> >> (#36483) >> >> - Add branching based on mapped task group example to >> >> dynamic-task-mapping.rst (#36480) >> >> - Add further details to replacement documentation (#36485) >> >> - Use cards when describing priority weighting methods (#36411) >> >> - Update ``metrics.rst`` for param ``dagrun.schedule_delay`` (#36404) >> >> - Update admonitions in Python operator doc to reflect sentiment >> (#36340) >> >> - Improve audit_logs.rst (#36213) >> >> - Remove Redshift mention from the list of managed Postgres backends >> >> (#36217) >> >> >> >> Cheers, >> >> Ephraim >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: dev-unsubscr...@airflow.apache.org >> For additional commands, e-mail: dev-h...@airflow.apache.org >> >> -- -- Bolke de Bruin bdbr...@gmail.com