Skip to content

ci: beta soak channel + digest-copy stable promotion - #142

Merged
thedancingdeveloper merged 2 commits into
mainfrom
feat/beta-release-channel
Sep 10, 2026
Merged

ci: beta soak channel + digest-copy stable promotion#142
thedancingdeveloper merged 2 commits into
mainfrom
feat/beta-release-channel

Conversation

@thedancingdeveloper

Copy link
Copy Markdown
Collaborator

Adds a beta soak channel so pre-releases can bake before a stable release, instead of every version tag moving :latest immediately.

Changes

  • release.yml — channel guard. A Determine release channel step maps the tag to a moving tag:
    • pre-release (vX.Y.Z-beta.N / -rc / -alpha) → publishes :vX.Y.Z-… + :beta, and never moves :latest, across GHCR + both mirrors. GitHub prerelease flag was already tag-derived.
    • plain vX.Y.Z:latest as before (stable).
  • promote-release.yml (new, workflow_dispatch). Promote a soaked pre-release: resolve (validate prerelease shape + reachable from main, strip suffix) → promote-image (skopeo digest-copy the exact soaked image to :vX.Y.Z + :latest on all three registries, verifying digests) → publish-stable-release (rebuild binaries from the same commit, publish the stable GitHub release). The stable release/tag is created with the default GITHUB_TOKEN so it does not re-trigger release.yml and overwrite the promoted image.
  • RELEASING.md — documents dev/beta/stable channels and the soak→promote flow.

Notes for the reviewer

  • Digest-copy is intentional: promoted :vX.Y.Z is byte-identical to the soaked beta, so its embedded build ref still reads -beta.N. The tag is stable; the internal version shows the promoted lineage (documented). Alternative would be a rebuild, losing bit-identity.
  • Docker Hub is a planned phase 2 (fits the promote loop + a stable push + creds).
  • The soak instance that tracks :beta lives in the operator's deployment config, not this repo.
  • CI-runtime behavior (the GITHUB_TOKEN re-trigger avoidance, digest-copy) is validated by the first -beta tag + first promote; static checks (YAML, runner-policy) pass.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TpoFnScdkRq7qxQLQZe1we

thedancingdeveloper and others added 2 commits September 10, 2026 02:23
Let pre-releases soak before a stable release instead of every version
tag moving :latest immediately.

- release.yml: derive a release channel from the tag. A pre-release tag
  (vX.Y.Z-beta.N / -rc / -alpha) publishes the moving :beta tag and the
  immutable version tag, and never moves :latest, across GHCR and both
  mirrors. A plain vX.Y.Z tag is stable and moves :latest as before. The
  GitHub pre-release flag was already derived from the tag name.
- promote-release.yml (new, workflow_dispatch): promote a soaked
  pre-release. Copies the exact soaked image DIGEST to :vX.Y.Z + :latest
  (no rebuild), rebuilds the standalone binaries from the same commit,
  and publishes the stable GitHub release. The stable release/tag is
  created with the default GITHUB_TOKEN so it does not re-trigger
  release.yml and overwrite the promoted image.
- RELEASING.md: document the dev/beta/stable channels and the
  soak-then-promote flow, including that the promoted image is
  byte-identical to the soaked beta.

The soak instance itself (which tracks :beta) lives in the operator's
own deployment config, not in this repo.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TpoFnScdkRq7qxQLQZe1we
@thedancingdeveloper
thedancingdeveloper merged commit b095a38 into main Sep 10, 2026
10 of 11 checks passed
@thedancingdeveloper
thedancingdeveloper deleted the feat/beta-release-channel branch September 10, 2026 04:54
Sign up for free to 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.

1 participant