This is a straw man proposal meant to jump start a conversation about changing the way modules in the GNOME core are released; it’s meant to be iterated upon, and discussed, and maybe even potentially dismissed. If the proposal is going to be accepted, there will be a future announcement.
Releasing is hard, we all know it. You have to find what changed, write it down; then you have to run the build and ensure that it passes the test suite; then you have to generate a release archive; tag the release commit; bump up the version; upload the release archive and run the ftpadmin
script. Rinse, and repeat, for every module you maintain—and we all know a lot of us, through no fault of our own, maintain more than one project.
Now imagine having to wait for every module in the GNOME SDK and GNOME core to be released, on a deadline, and figuring out if things are still building when you throw them all together.
Welcome to the release team when a GNOME release day is upon them.
The problem
We are all overworked and stretched pretty thin. New maintainers don’t grow on trees, and we all end up either maintaining too many projects, or having to maintain things in our limited spare time. This means releases get delayed, which end up delaying other releases, which end up delaying the whole of GNOME, and then the release team has to pester people, and it’s not fun for anybody involved.
Existing mitigations
These issues have been there since time immemorial. I mean: they were meme worthy, once upon a time.
The release team has already tried to mitigate these issues over the years:
- releases have been moved to the weekend, to give more time to maintainers
- the new versioning scheme has reduced the amount of releases during the development phase of the cycle
- the release team remains on hand, as a “maintainer of last resort”, to spin up releases of projects
These mitigations are not enough, and we have had multiple cases of delayed releases—especially if things like rebasing the run time on top of a new freedesktop run time line up in the schedule.
Proposal
The long and short of it, is this:
For GNOME modules, the release team is going to be responsible of cutting a release needed by the GNOME project.
This includes:
- development releases (alpha, beta, and release candidates)
- stable releases (.0, .1, etc.)
Any additional release is left to the discretion of the extant maintainers.
The release-team would “freeze” every project on the Monday of the GNOME release, spin the releases, and then “thaw” the projects.
Additional requirements
For the release team
Releases should not involve a release archive. The gnome-build-meta project should build from a signed tag (using the a key owned by the GNOME release team).
Ideally, the only things the release team would do for these releases would be:
- verify that the current tip of the project (“release candidate”) builds in dist mode
- verify that any reverse dependency of the project builds against the release candidate
- tag the release candidate commit
- increment the version number of the project
Of course, in case of build issues, the release team would then have to fix them to satisfy steps 1 and 2. In general, these steps are managed through per-project and global CI pipelines.
The CI pipeline should be able to also do a release archive from the tag, for downstreams still using those archives. The release archive would not be the source used to release GNOME.
For the maintainers
Maintainers should always keep the NEWS
and metainfo/appdata files up to date whenever they land things they wish to note inside a release. This would avoid the time consuming bit of the release process, and would allow the release team to do the least amount of changes in a project.
Additionally, maintainers of core GNOME modules should set up a CI pipeline to ensure that their project builds. If they don’t have time, they should ask the release team for help.
Pros and cons
The main “pro” is the whole point of the straw man: minimise the blockers for a GNOME release. Another item in the “pros” column is that it would remove a boring task from the maintainers plate, and leave them to deal with the actual work of maintaining their projects.
The “con” is that maintainers will have to relinquish some of their “powers” for the greater good. This will lead some module to be less maintained in the short run, because doing releases is typically the time when people try to cram the most work possible into a project.