Hi all,
Over the past year, there's been a lot of discussion around the challenges
we face as a project in doing releases. Because they are costly to do, we
don't do them often; because we don't do them often, they become even
costlier.

There are only a small number of people (PMC members with GPG keys
registered with ASF) who could possibly be release manager, and because of
the amount of time required (I saw Krisztián say on the 3.0 release thread
something like "I'll start a new rc, it'll be done in 12 hours), even fewer
people could be expected to take on the burden. Indeed, this is Krisztián's
10th release in a row as release manager, and over the course of the
project, 2/3 of all release candidates have been made by just 2 people.

I'd like to propose a change to our release procedure: instead of having
the release candidate vote include Python wheels, Linux system packages, or
any other binary packages, we should only vote on the source release.
Binary artifacts would be produced as post-release tasks, using the
official source release.

This would greatly reduce the time and effort it takes to produce a release
candidate--tar, sign, and upload, that's it--and it would remove a bunch of
points of failure from the release-candidate making process (timeouts, CI
flakiness, etc.). It would also mean fewer release-blocking issues--we
still have to fix the packaging builds, but doing so can happen in parallel
with the verification process. If we found problems in the packaging
scripts, fixes could either be applied as patch steps to the binary
artifact build scripts, or if fixes can be produced quickly, we collect
them and cut another (cheap) release candidate. Right now, our only option
is the latter, which makes for a slow, stressful release process where
there are so many places where a simple issue can block the whole release
or set us back an additional week (a full day to produce a release
candidate plus another three to vote).

If we went this direction, we could still choose to vote separately on
binary packages like wheels, though I'm not sure that's worth the effort.
Many of the packages that people use (conda, homebrew, CRAN, etc.) are
already "unofficial" releases because they're packaged by someone else, and
I don't think the distinction is meaningful to our users.

To be clear, this doesn't reduce the general maintenance burden of the
project. We still have to monitor nightly builds, fix packaging scripts
that break, and deal with CI service interruptions. This change would just
reduce the burden on the release manager and allow us to spread more
broadly the costs of packaging and releasing. It also solves questions such
as "Why should the Rust release be blocked just because we're having a
problem building Python wheels on macOS?"

There are also other things we could do that would, on a technical level,
improve our ability to make releases more efficiently. Andy Grove's change
in the use of maven in the release process will help, as would a number of
CI/CD improvements. I view these as complementary to this proposal, which
is a governance question with technical/logistical implications.

Thoughts?

Neal

Reply via email to