Skip to content

ci(release): tag/chart-version guard + strict stability rule (release train) - #460

Merged
LukasWodka merged 3 commits into
developfrom
ci/release-train-guards
Jul 29, 2026
Merged

ci(release): tag/chart-version guard + strict stability rule (release train)#460
LukasWodka merged 3 commits into
developfrom
ci/release-train-guards

Conversation

@LukasWodka

@LukasWodkaLukasWodka commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

What (backend#1301, Q5 — approved by Lukas)

Two guards in release-helm-chart.yaml, running before lint/package on every published release:

  1. tag ↔ chart version: the tag's base X.Y.Z must equal client/Chart.yaml's version — train-cut or manual — so the chart version can never go silently stale after an out-of-train release.
  2. Strict stability: any non-plain-semver tag (e.g. v1.9.7-rc.1, or a malformed v1.9.7rc1) must be marked pre-release — otherwise it would become latest (what the installer bootstrap resolves) and enter the helm index as stable.

Tag reaches the script via env, never interpolated (R8, backend#889).

Context

client is joining the release train: staging hop → train creates pre-release v1.X.Y-rc.N (rc numbering strictly numeric) → FR from the rc's own stamped installer; prod hop → stable v1.X.Y. The stamped-installer flow needs zero changes — the fail-closed guard is placeholder-based, so rc-stamped installers verify at their own tag as-is. Helm-side safety: helm install excludes pre-release chart versions unless --devel/explicit --version.

Test plan

  • actionlint clean
  • First rc after merge+App-install: verify the guard passes, the release is marked pre-release, releases/latest still points at the last stable, and helm search repo tracebloc -l --devel shows the rc

🤖 Generated with Claude Code


Note

Medium Risk
Changes release automation and can edit GitHub release metadata (prerelease demotion) and block publishing on mismatch; it does not alter runtime app code but affects what becomes latest and what ships on publish.

Overview
Adds a verify job that runs before Helm packaging and installer manifest signing on every published release, so bad releases no longer get charts or stamped installers attached.

The guard compares the release tag’s base X.Y.Z to client/Chart.yamlversion and fails the workflow if they differ (chart must be bumped first). For tags that are not plain vX.Y.Z but were published as stable, it demotes the GitHub release to prerelease first so latest (installer bootstrap) does not point at an RC or malformed tag; demotion runs before the version check so a doubly-broken release still loses latest. The tag is passed only via env, not shell interpolation.

release and sign-installer-manifest now needs: verify.

Reviewed by Cursor Bugbot for commit a134974. Bugbot is set up for automated code reviews on this repo. Configure here.

…#1301 Q5)
The tag's base X.Y.Z must equal client/Chart.yaml's version (train-cut or
manual), and any non-plain-semver tag must be a PRE-release -- otherwise
it would become 'latest' (the installer bootstrap) and enter the helm
index as stable. Tag passed via env per R8 (backend#889).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Comment thread.github/workflows/release-helm-chart.yaml Outdated
The guard lived only inside the release job; sign-installer-manifest has
no needs and kept stamping + attaching installers for a bad release --
which, left marked stable, already IS 'latest' (what the bootstrap
resolves). Restructured: a dedicated verify job gates both jobs. And
instead of fail-and-strand, an unmarked non-final tag is DEMOTED to
prerelease ('latest' snaps back to the previous stable) and publishing
continues as a proper pre-release. Chart-version mismatch stays a hard
fail -- nothing to auto-fix without a bump.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit c61982c. Configure here.

Comment thread.github/workflows/release-helm-chart.yaml
A release that is BOTH mis-marked stable AND chart-version-mismatched hit
the exit 1 before the demotion ran, stranding it as 'latest' with no
assets (404ing bootstrap). Demotion now runs first -- it is safe in
isolation and must not be skippable by any other failure.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@LukasWodka
LukasWodka merged commit b315ee1 into developJul 29, 2026
5 checks passed
@LukasWodka
LukasWodka deleted the ci/release-train-guards branch July 29, 2026 06:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@LukasWodka@saadqbal@divyasinghds