ci(refactor-release): cut tag releases over to GoReleaser - #12828
DariuszPorowski wants to merge 5 commits into
Conversation
ebbd4ee to
ce28759
Compare
67ebbff to
e54a4c5
Compare
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned Files
|
e54a4c5 to
a8f7de9
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## dp/prepare-release-backports #12828 +/- ##
=============================================================
Coverage 59.79% 59.79%
=============================================================
Files 777 777
Lines 45906 45906
=============================================================
Hits 27450 27450
Misses 18456 18456 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Functional Tests - upgrade-noncloud1 tests 0 ✅ 5m 5s ⏱️ For more details on these failures, see this check. Results for commit c41d6c0. ♻️ This comment has been updated with latest results. |
a8f7de9 to
13409c7
Compare
13409c7 to
cdeb44f
Compare
Functional Tests - corerp-noncloud190 tests 188 ✅ 1h 12m 8s ⏱️ Results for commit 158a1a4. ♻️ This comment has been updated with latest results. |
cdeb44f to
158a1a4
Compare
Functional Tests - kubernetes-noncloud17 tests ±0 16 ✅ - 1 14m 14s ⏱️ + 4m 10s For more details on these failures, see this check. Results for commit c41d6c0. ± Comparison against base commit b1295ef. ♻️ This comment has been updated with latest results. |
158a1a4 to
81376b7
Compare
e8540e4 to
cbb56e8
Compare
0df90df to
fc9fe6f
Compare
fc9fe6f to
e9aba62
Compare
e9aba62 to
0f3bdcc
Compare
0f3bdcc to
7ddfbef
Compare
1a9c42f to
b227028
Compare
b227028 to
ce6eb75
Compare
Replace the tag-path CLI matrix, production image publisher, checksum loop, and GitHub Release job with one GoReleaser staging job. Keep Helm, Bicep types, and retained non-Go/test images as separate gated stages. Publish full-version images and CLI OCI artifacts first, lock their digests and source commit on the draft release, and promote channel and latest aliases only for stable releases after all mandatory stages pass. Main builds now publish edge only. Make every stage resumable: reconcile source-bound draft releases, content-verify existing CLI and Helm artifacts, adopt only complete image sets with matching OCI source labels, retry transient registry and API operations, and reject partial or conflicting immutable state. Remove the superseded shadow comparison and legacy release publisher. Signed-off-by: Dariusz Porowski <3431813+DariuszPorowski@users.noreply.github.com>
capture-release-image-digests.sh rejected any partially published image set, so an interrupted GoReleaser push left the release stuck: every rerun failed on the same partial set, and the unclaimed-tag guard refused to proceed as well. Recovery meant deleting tags from GHCR by hand, which is exactly the half-published release this migration set out to remove. A partial set carries no durable lock, so nothing can have resolved those tags yet and staging may still overwrite them. Report absent, partial, and complete as distinct states, keep the strict all-or-nothing check for the post-staging capture that writes the lock, and run the unclaimed-tag assertion only when nothing exists yet. Require --state-output whenever --allow-absent is set, so tolerated absence is always reported to a caller that acts on it. Name absence confirmation separately from transient failure in the retry log, since a first release confirms every tag missing five times and read as a stack of failures. Make the tag-disappeared diagnostic reachable by propagating the not-found status out of cli_artifact_matches, and stage CLI artifacts through a subshell function so the directory change stays contained and the formatter stops fighting trailing padding. Signed-off-by: Dariusz Porowski <3431813+DariuszPorowski@users.noreply.github.com>
Signed-off-by: Dariusz Porowski <3431813+DariuszPorowski@users.noreply.github.com>
Signed-off-by: Dariusz Porowski <3431813+DariuszPorowski@users.noreply.github.com>
… images Signed-off-by: Dariusz Porowski <3431813+DariuszPorowski@users.noreply.github.com>
ce6eb75 to
c41d6c0
Compare
Radius functional test overviewClick here to see the test run details
Test Status⌛ Building Radius and pushing container images for functional tests... |
Summary
Cut tag-triggered releases over to GoReleaser for CLI binaries, checksums, production Go images, and draft GitHub Release staging. Keep Helm, Bicep types, and retained non-Go/test images as gated stages, then promote mutable channel and
latestaliases only from verified immutable outputs after every mandatory stage succeeds.Make the release transaction resumable with source-bound draft locks, query-before-mutate reconciliation, bounded retries, complete-set image adoption, and content verification for existing CLI and Helm artifacts. Main builds now publish
edgeonly.This stacked PR depends on #12823.
Draft gate: Phase 7 has not yet observed the required full RC-plus-final cycle. Keep this PR in draft until that cycle completes with no unexplained parity differences. The first production GoReleaser release and installation verification remain tracked in #12819.
Reason for change
The shadow phase established parity, but the production tag path still uses separate CLI, image, checksum, and release jobs with mutable recovery state. This cutover makes immutable full-version outputs the recovery source of truth and delays mutable aliases and release finalization until the complete publication set is verified.
Fixes #12819
How to test
make test-capture-release-image-digests test-release-cutover test-release-oci-artifacts test-release-parity-manifest test-prepare-releasemake goreleaser-snapshot(built and verified all 22 CLI targets)actionlint.shfmt.Docker was unavailable locally, so container registry paths are covered by deterministic Docker fixtures. ORAS publication and the GoReleaser snapshot were exercised with the real tools.
File change summary
.github/workflows/build-release.yaml.github/workflows/__build-{cli,helm-chart,images}.yaml.github/scripts/{ensure-draft-release,publish-draft-release,release-assets}.mjs.github/scripts/{release-oci-artifacts,publish-helm-chart,normalize-release-checksums,capture-release-image-digests}.sh.github/scripts/*_test.{sh,mjs}.github/scripts/{verify-goreleaser-shadow,verify-goreleaser-shadow_test}.sh.github/workflows/__publish-release.yaml.goreleaser.yamllatestmutation.build/{artifacts,docker,test}.mkdeploy/Chart/README.mddocs/contributing/contributing-releases/README.mdeng/design-notes/tools/2026-09-goreleaser-stack-review/pr-13-goreleaser-tag-cutover.md