Repository navigation
RFC: New release process #3522
Replies: 11 comments 19 replies
|
Adding my 2c. The RFC doesn't explicitly say what happens when the RC week actually finds something. The tools imply an answer. Cherry-pick pulls from The Wednesday cron ships Cherry-picks also conflict, more often than one might expect. Resolving one means a person or an agent writing code that never existed in I also wonder where feedback goes when it uncovers a use case we don't currently test. Is there a plan for an e2e suite that could stop the same class of issue recurring? The "a lot of negative feedback" criterion is the other thing I'd want nailed down. I imagine the release admin triages the issues and decides what's actually a blocker, rather than it coming down to whoever is loudest? |
|
I like to automate where possible but I think the place I worry about is if there is a user facing change that affects their configuration data. For a hypothetical example if we had a schema bump in I suppose we need to be extra careful with those kinds of changes. |
|
If testing can be automated and automation were short (30-60min / day), then I'm open to it. My target env is headless Proxmox w/ 3xR9700. Can likely re-target my proxmox-community script installer (https://github.com/community-scripts/ProxmoxVED/blob/main/install/lemonade-server-install.sh and https://github.com/community-scripts/ProxmoxVED/blob/main/ct/lemonade-server.sh) to the release-candidate channels. That makes it easy to spin up an new or update an existing LXC for Lemonade w/ GPUs. Upgrade scenarios,
Can be accomplished a couple different ways using the same proxmox community-scripts paths. I'm willing to make those real on my end if the value prop is good for Lemonade devs, e.g. testing limitations of both automation and target environment. |
|
BTW - Happy on the proposed version scheme. |
|
Thinking through a rollout plan for this...
I will also need to investigate what can be fully automated vs. what would need to be fully or quasi-manual, considering |
|
RFC makes sense to me. |
Why not just make it 4 digits from the beginning? It will be a lot more obvious it's a year then to people.
Since some hashes can start with a number I would suggest this has a delimitter for num commits and the hash like this:
It's implied but I think you should make it explicit that this is based off the branch date in the middle of the week. |
Instead of APPROVE, how about we approve by emoji? You can count lemons. 🍋 |
|
🍋 |
|
🍋 This looks great to me. I'm sure we'll tease out a few things as we transition to this, but that's to be expected. We are already automatically publishing release-candidate builds of the snap to the candidate channel. Although that's currently triggered by the repo-manager workflow. Do we want to move those to a common workflow? |
|
Approved 3/3! |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Updates
stablereleases are tagged by a human, and can be skipped by not tagging~versioning, more specifics about timing.candidatelabel and moved the revert/hotfix workflows to future work.Proposal Size
Major feature (spans multiple well-scoped PRs)
User Story
Lemonade's users and maintainers want our
stablereleases to be more stable. After a lot of deliberation, we decided that the path to this is more testing (as opposed to stricter PR review).release-vX.Y.Zbranch for 1 week before being released to thestable/latestchannels.candidate(PPA, Snap) andprerelease(GitHub) channels for Ubuntu, Windows, Docker, macOS, Fedora, and Debian.mainandrelease-v*and sent back to PR for additional changes and review.This plan will only work if a substantial amount of people get involved in testing, so please comment/vote if you are willing to help out!
High-Level Design
Release lifecycle
a. "Wont fix" in this release: issue is deemed minor / non-breaking enough to be fixed on main and solved in a future release.
b. Hotfix: blocking, yet easily fixable, issues should be resolved by merging a fix into
mainand then cherry-picking it into the release branch.c. Revert: blocking issues that would be excessively complex to fix should have their commit(s) reverted out of both
mainand the release branch.New versioning system
The versioning system for Lemonade should move from marketing-based to date-based to facilitate the automated systems (see below). The justification is that everything will be much easier to automate if the version number is deterministic.
Current system:
major.minor.patchwhere major/minor change depending on our hype level (it's pretty arbitrary!).New system:
year.week.number.yearis the 4-digit year of the release, which is2026right now. If Lemonade lasts 75 more years we'll come up with a new system :)weekis which week of the year of the release, indexed 1 to 52. This RFC was written on 8 September, which is in week37of 2026. Releases are branched at 7 pm UTC on Wednesdays.numberis the number of commits on the release branch, after it was branched from main.For example: if this policy was already in effect and we branched at 7 pm UTC on 9 September 2026:
release-v2026.38, theyear.weekfor next week's release.v2026.38.0. If that artifact passes testing, we'd release thev2026.38.0artifact tostable. If not, we need another candidate artifact.v2026.38.1.v2026.38.1, but later realize we need to hotfix it in stable, the hotfix release would bev2026.38.2.Important: we will also remove the version number from
CMakeLists.txtentirely.year.week.numberis 100% deterministic, so the build system will apply the version number at build-time based on the branch name (which containsyear.week, see below) and thenumberof commits.Versioning non-candidate builds
Non-candidate builds, for example build-from-source, PR checks, or artifacts for the
bleeding-edgechannel, will be versionedyear.week.0~$(number of commits on branch).$(hash), where:weekis the week where this commit would releaseweekis next week.weekis 2 weeks from today, since the commit missed the cutoff time for next week's release.branchismainforbleeding-edge, or whatever branch you happen to be building from.For example, a build of a commit made to main on 10 September 2026 would have
week=39and a version likev2026.39.0~1595.ff22950d.You can also supply a
.versionfile to overwrite the built version to anything you like.Release admin
The role of the "release admin" is changing since most of their work is being automated away and new responsibilities are being introduced.
The release admin will:
#release-candidatediscord channel. Inform the testers when new RCs are available and instruct them on what to test (usingrepo-managerauto-generated to-do lists as a guide).candidatelabel.repo-managerauto-generated announcement as a guide.)stable. The tag must match the version number of the build for that commit.In the (hopefully rare) event that a release branch still has blocking issues on Friday at 7 pm UTC, that week's release should be skipped and we will try again the next week. If this happens we should hold a postmortem and decide if the PR review and/or release policies need to be revised (e.g., do we need 2 weeks of testing?).
Finally, we should also work on expanding the release admins group beyond the current 4 individuals (@jeremyfowers @kenvandine @ramkrishna2910 @superm1 ) .
Automated Systems
Automated Release
These automations are intended to free up admin/maintainer time, so that this time can be spent on testing and taking corrective actions instead.
On Wednesday, at 7 pm UTC (2 pm ET) every week, the following actions will take place automatically via a GitHub Actions cron job:
mainis branched intorelease-v$(year.)$(week+1), whereweek+1is next week's index (since the release is going out next week)candidatechannels of the PPA and snap, along with theprereleasechannel of the repo, will releasev$(year.)$(week).0artifacts for testing,yearandweekare derived from the branch name.release-v*branch gets a new commit, a newv$(year.)$(week).$(number)artifact ships automatically to thecandidate/prereleasechannels.Future work: Branch Management Tools
In the future, but not in the initial set of PRs, we may introduce the the following scripted actions to help maintainers with common tasks:
mainin the current release branchrelease-v*. Intended to deliver fixes only, not features.release-v*(which triggers new candidate artifacts and option to tag them into stable).mainand the currentrelease-v*branch.Breaking Changes
See the "new versioning system" section.
Maintenance plan
This new system is expected to be self-maintaining after it is merged, other than the work of the release admin noted above.
Risks
@superm1 @ramkrishna2910 @kenvandine @sawansri @Geramy @bitgamma
All reactions