feat(release): publish a GitHub release, and verify what a chart pins - #45
Conversation
Three things were missing from the chart release. It published without checking that the images the chart names exist. A chart version is a promise about images - appVersion pins every IDE image, versions.cloud the operator and service - and breaking that promise surfaces as an ImagePullBackOff in whichever environment installs it next. The IDE image list is read from EduIDE's build matrix at run time, because a copy kept here drifts the moment someone adds an image and a release then verifies a subset and passes. It left no record of what is current. The repository got a bare tag from the release train and nothing else, so answering "what is deployed?" meant reading a tag list or the registry. There is now a GitHub release naming the chart version, what it pins, and how to roll it out, ahead of the generated commit notes. Nothing checked that the two charts carry the same version, which AGENTS.md says they do. They had drifted to 2.2.1 and 2.2.2 across a pair of unrelated fixes - one tag and one release cannot name two versions. The release train keeps its lockstep contract and now says so: it is not the ordinary path, and failing its pre-check against a normal main is correct rather than a bug. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Rendered diff across all environmentsNo change to any rendered manifest. For a pure refactor this is the result you want. |
Stacked on #43 (which puts both charts at 2.3.0). GitHub retargets this to
mainwhen #43 merges.Three gaps this closes
The release published without checking the images exist. A chart version is a promise about images -
appVersionpins every IDE image,versions.cloudthe operator and service,versions.landingPagethe landing page. Nothing verified that promise, so a chart could go out naming tags nobody pushed, surfacing asImagePullBackOffin whichever environment installed it next.release.ymlnow verifies every pinned image exists and is multi-arch before pushing anything, reading the IDE image list from EduIDE's build matrix at run time rather than from a copy kept here.That check is not hypothetical: today's EduIDE v1.3.0 release build was still running when the chart bump was opened, and the only thing standing between that and a broken production deploy was remembering to look.
Nothing recorded what is current. The release train pushed a bare git tag for this repository and created proper GitHub releases only in the component repos. So answering "which chart version is current, and what does it pin?" meant reading a tag list or the registry. There is now a GitHub release per published chart version:
followed by
--generate-notes' commit and contributor list.Nothing enforced the two charts being at one version. AGENTS.md says they are released together at the same version; they had drifted to 2.2.1 and 2.2.2 across a pair of unrelated fixes. One tag and one release cannot name two versions, so CI now checks it.
The release train
Left working, with its header and its failure message rewritten to say what it is: a lockstep release that moves all four repositories to one number, and not the ordinary path. Running it against a normal
mainfails its pre-check by design, which previously read like a bug.This settles #44 in favour of per-repo versions.
The skill
.claude/skills/cut-a-release.mddescribed the lockstep model as the only model, which is why it no longer matched anything anyone does. Rewritten around the real process - component release, chart release, deployment PR - with the ordering, theversions.ideoverride and when it must be removed, and a failure table.Verification
actionlintclean on all three workflows. The lockstep check run by hand againstmaincorrectly reports2.2.1 / 2.2.2, and against this branch2.3.0 / 2.3.0.The publish and release steps only run on push to
main, so CI here exercises everything except the release path itself. Worth watching the first run after merge.🤖 Generated with Claude Code