v24.12 Infrastructure
Timeline and template: https://wiki.postmarketos.org/wiki/Create_release_branch
Release notes: postmarketos.org#187 (closed)
Preparation
- Discuss who's in charge of the release (doesn't necessarily mean doing all the work, it can be delegated. just someone to keep pushing it forward) -> @ollieparanoid
- Create gitlab milestone for the release
- Create an issue in pmaports named "vYY.MM Infrastructure", add it to the milestone, copy paste the checkboxes from this list
- Assign the person who's in charge of the release to the infrastructure issue
- Update the timeline for the next release
- Post it in the testing channel
Pre-Build phase
Since v24.06 we are not only including devices and kernels from main and community categories, but also from testing/unmaintained (if they build). Building these kernels takes some extra time, this is what the pre-build phase is for. The branch will be rebased once in the branch phase.
Requirements
- Alpine's main repository must be built and published
- Alpine's community repository must be built and published -> https://dl-cdn.alpinelinux.org/alpine/v3.21/community/
pmbootstrap: adjust config
-
add apk-tools min version
- https://pkgs.alpinelinux.org/packages?name=apk-tools&branch=edge
-
pmb/config/__init__.py:apk_tools_min_version
- should be a trivial 1 line change, push it to master directly
- (can be done later, at start of test phase) make a new pmbootstrap release bpo uses the master branch, so it will be fine without a release, however users will want to try out the new release and may not run master.
pmaports: create branch and initial changes
-
git checkout -b vYY.MM master
-
Create a
=== Branch vYY.MM from master ===
commit (third line:Related: https://wiki.postmarketos.org/wiki/Create_release_branch
)- Remove channels.cfg (should only be in master)
-
Change
channel=edge
tochannel=vYY.MM
in pmaports.cfg -
Change
supported_arches
tox86_64,aarch64,armv7
in pmaports.cfg - disable x86, armhf, riscv64 in .gitlab-ci.yml on the release branch and delete .ci/build-* scripts for these arches
-
git push
- '''protect the new release branch in gitlab''', so nobody can force-push to it
pmaports: update master branch
-
git checkout master
- add the new branch to channels.cfg, like this
-
git push
pmaports: update os-release / remove packages / aportgen
-
git checkout vYY.MM
-
update
postmarketos-base
:-
set version info for
/usr/lib/os-release
inmain/postmarketos-base/rootfs-usr-lib-os-release
(PRETTY_NAME="postmarketOS vYY.MM"
,VERSION_ID="vYY.MM"
,VERSION="vYY.MM"
) -
pmbootstrap pkgrel_bump postmarketos-base
-
pmbootstrap config mirrors.pmaports none
-
pmbootstrap checksum postmarketos-base
- commit
-
set version info for
-
remove packages:
-
cross/*-armhf
and other unsupported arches in cross dir (keep gcc-x86 and musl-dev-x86, they are needed for systemd-boot for x86_64) - main/postmarketos-ui-asteroid (no smartwatches are useful on stable branches at the moment)
- main/postmarketos-ui-framebufferphone until aports#13857 is resolved
- gcc4* and gcc6* from main and cross
-
-
run
pmbootstrap aportgen
for packages in cross -
git push
bpo: adjust config
- add the branch to the build.postmarketos.org config
-
bpo/config/const/__init__.py:branches
- ignore_errors: True
-
add it below
branches["master"]
, so it builds with lower priority than master until it's released
-
- make a merge request, wait until CI passes, merge it (or if you can directly push to master that's also fine since it's a trivial change)
- roll it out/ask somebody who can do that
- restart bpo, it will start building x86_64 packages
(moved the rest to the branch phase)
Branch phase
bpo: fix calculating packages to be built
We haven't bootstrapped a stable repository with pmbv3 yet, there are some regressions.
- pmb.helpers.repo.update: support PMB_APK_FORCE_MISSING_REPOSITORIES (pmbootstrap!2505 (merged))
- bpo: use PMB_APK_FORCE_MISSING_REPOSITORIES for calculating pkgs to be built (repo_missing job)
- bpo: use PMB_APK_FORCE_MISSING_REPOSITORIES in bpo_setup too
bootstrap of binary packages
-
fix failing x86_64 packages (Remember: patches need to go through edge first, then get backported to the stable branch!)
- Try to get build fixes merged to edge quickly, ask for reviews in #postmarketos-devel, and consider merging trivial fixes right after they pass CI.
- Devices in testing and archived categories that don't build: consider trying to fix them, or just delete them from the branch
- Note 2024-12-06: I've temporarily removed some packages for initial publishing of x86_64 packages: 5b8e21e7
- wait until all packages for x86_64 are built and published
- fix errors mentioned in 5b8e21e7 (mostly, currently !5886 (merged) needs to be merged and backported)
- revert 5b8e21e7
- fix up ARM packages too
- wait until all packages for ARM are built and published
Adjust CI
-
make sure pmaports.git CI runs through on the new branch (run
pmbootstrap ci
). Examples of why it might fail:- one postmarketos-ui package has a package from alpine testing in their _pmb_recommends.
- remove the UI if it is not used much (can bring it back on demand) or fork the package to the new branch
- consider fixing it in edge, so we don't run into this with the next release
- CODEOWNERs point at devices that have been deleted for the stable release
- one postmarketos-ui package has a package from alpine testing in their _pmb_recommends.
Adjust release upgrade script
- add the new release to upgrade.sh in postmarketos-release-upgrade
- bump SCRIPT_VERSION, tag a new release
- package it for edge (make MR), backport it to the new release, but NOT to the old release yet (otherwise users may upgrade by accident, without realizing that the new version is not out yet!) -> !5894 (merged)
Update channels.cfg
-
set
branch_aports=3.21-stable
if the alpine branch is available now
Update BPO config
-
update bpo's images config to build images for the new branch for all devices in community and main, except for:
- qemu-*
- bpo: configure the new branch to be not WIP anymore
- roll-out bpo changes
pmb release done?
- ensure that a pmbootstrap release been made with the apk-tools min version change -> 3.1.0
Test phase
-
Create an issue in pmaports with a checklist of devices and UIs in main and community -> #3359 (closed)
- Tag the testers of each device and UI
- Ask them to verify that the images work as expected
- Announce the new phase in the testing chat - and ask them to do the testing within one week, as in the timeline.
- Prioritize merging fixes from maintainers (they do the heavy lifting in the testing and fixing phase, see timetable)
- Make sure to properly cherry pick fixes from MRs to edge, if they are intended for the upcoming release
- add new version to the pmaports gitlab issue template (.gitlab dir)
Leftover tasks from previous phases:
- update the wallpaper -> https://fosstodon.org/@postmarketOS/113624366198561582 !5900 (merged)
- bpo: make sure we build images for all devices in main and community; drop some from community for which we can't build images anymore? -> all can be built, including this one: !5730 (merged)
- adjust monitoring to run on the new release and make sure it passes (example) -> monitoring!16 (merged)
- adjust CI of postmarketos-release-upgrade to test the new release too (git grep for the previous release to see what needs to be adjusted)
Release phase
- Did a reasonable amount of devices get tested? (we may consider dropping devices that were not tested)
- Make sure all fixes are in
- Make sure new images are generated with the fixes (unless it's a fix for something that doesn't impact the experience much and is fine to get with the first update after installing)
- Announce the new phase in the testing chat, together with the planned date of blog post release (and testing)
Write blog post
-
look at previous release blog posts for inspiration, then prepare a MR with the following changes.
-
update config/download.py in postmarketos.org.git:
- latest_release
- update devices and categories. only list the ones where we actually build images.
-
update config/download.py in postmarketos.org.git:
-
write a blog post for the new release:
- Highlight major changes since the last release
-
Mention new devices, and total list of devices
- Count devices that have their own wiki page as separate device
- E.g. OnePlus 6, 6T are two devices (two wiki pages), but variants of "Samsung Galaxy A3 (2015)" are one device (one wiki page)
- Don't count/list devices for which we don't build images (e.g. qemu-amd64)
- Explain upgrade path (previously: Upgrade release, maybe just update that wiki page and link to it again)
- Adjust the homepage config to point to the new release in the downloads page
- Add some cool photos
- Submit the blog post as MR to postmarketos.org.git. Make sure the team sees it.
- Wait for reviews
Release!
- Backport the new postmarketos-release-upgrade version that allows upgrading to the new release, to the previous release
- Add the branch to pkgs.postmarketos.org -> will do that in a few days probably, don't have time today
- Merge the blog post
-
Edit channels.cfg, change descriptions:
- New release: "Latest release / Recommended for best stability"
- Old release: "Old release (supported until YYYY-MM-DD)" (one month from date of the release)
-
Update the Releases wiki page
- Move the new release to the list of active releases, link to the blog post
- Add a supported until date for the old release (but keep in the "active" list for now)
- Update Template:Latest stable release on the wiki with the new version
-
Update "Default description template for issues" in pmaports (.gitlab dir)
-
In "On what postmarketOS version did you encounter the issue?", change:
- previous release: add " (supported until YYYY-MM-DD)"
- add the new release
-
In "On what postmarketOS version did you encounter the issue?", change:
-
Put a reminder in your calendar to drop support for the old release in one month (see below)
- create a new issue with dropping the old release (template) -> #3391 (closed)
- Create an issue for the next release notes -> postmarketos.org#192