Skip to content

build(release)!: retire legacy paths and consume snapshots - #12956

Draft
DariuszPorowski wants to merge 1 commit into
dp/helm-immutable-image-tagsfrom
dp/release-final-cleanup
Draft

build(release)!: retire legacy paths and consume snapshots#12956
DariuszPorowski wants to merge 1 commit into
dp/helm-immutable-image-tagsfrom
dp/release-final-cleanup

Conversation

@DariuszPorowski

Copy link
Copy Markdown
Member

Summary

PR 18 of native stack #12738, based on #12953. Keep this and all preceding PRs draft.

  • Build one canonical GoReleaser snapshot for PR/merge-queue artifacts and main edge publication. Preserve CLI and container artifact names; export native snapshot images with Docker and assemble edge indices with Buildx from resolved digests, without recompiling.
  • Keep artifact export jobs read-only and registry writers main-only. Serialize main runs, skip edge writes from stale main commits, and include snapshot/image failures in Build Check.
  • Retain the native Bicep publisher and developer/separate-module build targets. Move test images out of official release and alias sets; functional workflows use build-attempt-specific tags, with tests consuming the producing build's identity.
  • Consolidate workflow metadata in the tested existing release-version helper. Delete obsolete parsers, selector tests, multi-architecture Make generators, duplicate snapshot workflow, and standalone post-publication verification workflow. Preserve the staged publication verifier and historical baselines.
  • Reduce the release runbook to approval, monitoring, resume, and fail-closed recovery; update build documentation and skills.

Breaking change: Replace removed multi-architecture Make targets with the core snapshot/edge targets and docker-publish-bicep. Test images no longer receive release-channel aliases; select explicit test-run tags.

Reason for change

Fixes #12816

Implements the final-consumer cleanup in the release lifecycle implementation plan and design. Official release manifest, installation, provenance, digest-lock, approval, and coordination gates remain intact.

How to test

Verified locally:

  • make goreleaser-check goreleaser-snapshot GORELEASER_ARGS=--skip=docker: actual 22-binary snapshot, seven raw CLI outputs, checksums, and SPDX SBOMs passed the parity verifier.
  • make test-release-version-format test-release-cutover test-release-sboms test-release-oci-artifacts test-release-publication: passed, including snapshot image command fixtures, 16 native OCI cases, publication/coordination cases, and six staged-installation fixtures.
  • make test-release-parity-manifest test-capture-release-image-digests test-prepare-release test-release-plan test-release-controller test-build-summary: passed, including strict historical baseline validation and controller resume.
  • go test ./test/testutil ./test/functional-portable/corerp/cloud/resources -run '^(TestTestImageReferences|Test_ACI)$' -count=1: passed; ACI remains intentionally skipped, so this compiles its caller without provisioning resources.
  • Dry-run retained Bicep, separate-module image, and local CLI target graphs; actual snapshot CLI artifact selection; changed-workflow actionlint; configured Markdown lint; Go formatting and diff whitespace checks.
  • Configured ShellCheck passes excluding the pre-existing SC2126 style warning in the SBOM test. Actionlint excludes only its unsupported concurrency.queue key; full workflow validation was run without its embedded ShellCheck subprocess, and changed shell files were checked separately.

Draft rollout gates: Docker is not installed in local WSL, so live Docker export/registry manifest publication, full functional runs, and a real release cycle remain unverified. Run those in CI/a release environment before rollout. The signed Deployment Engine prerequisite, dashboard source-provenance companion change, and package access prerequisites remain required. cspell was unavailable. Zizmor reported four high-severity findings in unchanged cloud-test trigger/environment handling and informational self-repository suggestions; no high-severity findings were in the new snapshot path. This PR does not waive those risks or any publication gate.

File change summary

File Summary of change
.github/workflows/__build-snapshot.yaml, __build-cli.yaml, __build-images.yaml, build-main.yaml, build-validation.yaml Single snapshot owner, native artifact consumers, isolated edge writers, stale-main checks, required build gates.
.github/scripts/goreleaser-snapshot-artifacts.sh, _test.sh; build/artifacts.mk Metadata-driven Docker export and digest-based Buildx edge assembly; failure and platform-set fixtures.
.github/release-parity/targets.json; .github/scripts/release-oci-artifacts.sh, release-parity-manifest_test.sh; .github/workflows/build-release.yaml Retire release test-image outputs while preserving historical baselines and Bicep's locked publication.
.github/scripts/release-version.sh, release-version-format_test.sh; reusable Bicep/Helm and docs workflows; build/version.mk Shared, tested release/RC/PR/branch metadata and removal of Python setup.
.github/scripts/release-cutover_test.sh, release-sboms_test.sh; build/test.mk; .github/workflows/__changes.yml Update current workflow contracts, deletion assertions, test registration, and filters.
build/docker.mk Remove duplicate multi-architecture generators; retain local targets and a Bicep-only Buildx publisher.
Functional cloud/noncloud workflows; test/testutil/testutil.go, testutil_test.go; ACI test and Bicep fixture; CLI parameter fixture Build-attempt-specific test image tags, explicit fixture references, and helper coverage.
Release/build contributor guides; radius-build-images and radius-install-custom skills Final operating procedure and replacement build commands.
Deleted parser/selector scripts and selector tests; deleted standalone snapshot and verification workflows Remove paths whose final consumers have migrated.

@github-actions

github-actions Bot commented Sep 10, 2026

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

  • .github/workflows/__build-helm-chart.yaml
  • .github/workflows/build-release.yaml

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

Functional tests can reference an unpublished Magpie image, stale main runs can still publish edge Bicep types, and live publication remains unverified.

Pull request overview

Final cleanup for #12816, consolidating CI and edge publication around canonical GoReleaser snapshots while retiring legacy release paths.

Changes:

  • Reuses snapshot outputs for CLI/container artifacts and edge publication.
  • Moves test images to immutable, run-specific tags.
  • Simplifies release tooling, workflows, documentation, and skills.
File summaries
File Description
.github/release-parity/targets.json Removes test images from release outputs.
.github/scripts/get_release_version.py Deletes legacy Python metadata parser.
.github/scripts/goreleaser-snapshot-artifacts.sh Exports and publishes snapshot images.
.github/scripts/goreleaser-snapshot-artifacts_test.sh Tests snapshot image handling.
.github/scripts/release-cutover_test.sh Validates final cutover contracts.
.github/scripts/release-get-version.sh Deletes obsolete release selector.
.github/scripts/release-get-version_test.sh Deletes selector tests.
.github/scripts/release-oci-artifacts.sh Excludes test images from release aliases.
.github/scripts/release-parity-manifest_test.sh Preserves historical baseline validation.
.github/scripts/release-sboms_test.sh Targets the reusable snapshot workflow.
.github/scripts/release-version-format_test.sh Tests consolidated metadata generation.
.github/scripts/release-version.sh Generates workflow release metadata.
.github/skills/radius-build-images/SKILL.md Documents snapshot-based image builds.
.github/skills/radius-install-custom/SKILL.md Updates multi-architecture troubleshooting.
.github/workflows/__build-bicep-types.yaml Uses the shared metadata helper.
.github/workflows/__build-cli.yaml Exports snapshot CLI binaries and publishes edge.
.github/workflows/__build-helm-chart.yaml Uses the shared metadata helper.
.github/workflows/__build-images.yaml Exports snapshot images and publishes edge.
.github/workflows/__build-snapshot.yaml Adds the canonical snapshot workflow.
.github/workflows/__changes.yml Removes the retired workflow path.
.github/workflows/build-main.yaml Integrates snapshot consumers and stale-write gating.
.github/workflows/build-release.yaml Retains only Bicep outside GoReleaser.
.github/workflows/build-validation.yaml Validates snapshot-derived artifacts.
.github/workflows/functional-test-cloud.yaml Uses attempt-specific test image tags.
.github/workflows/functional-test-noncloud.yaml Uses attempt-specific test artifacts.
.github/workflows/goreleaser-snapshot.yaml Deletes the duplicate snapshot workflow.
.github/workflows/publish-docs.yaml Removes Python metadata setup.
.github/workflows/release-verification.yaml Deletes standalone verification.
build/artifacts.mk Adds snapshot save and edge targets.
build/docker.mk Removes legacy multi-architecture generators.
build/test.mk Registers snapshot artifact tests.
build/version.mk Makes GIT_VERSION overridable.
docs/contributing/contributing-code/contributing-code-building/README.md Documents replacement build commands.
docs/contributing/contributing-releases/README.md Condenses the release runbook.
test/functional-portable/cli/noncloud/testdata/corerp-kubernetes-cli-parameters.bicep Requires an explicit Magpie tag.
test/functional-portable/corerp/cloud/resources/aci_test.go Supplies the Magpie image parameter.
test/functional-portable/corerp/cloud/resources/testdata/corerp-aci.bicep Accepts an immutable Magpie image.
test/testutil/testutil.go Changes the default test image tag.
test/testutil/testutil_test.go Tests image reference generation.
Review details
  • Files reviewed: 39/39 changed files
  • Comments generated: 2
  • Review effort level: Balanced

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.


build-and-push-helm-chart:
if: github.repository == 'radius-project/radius' && github.ref == 'refs/heads/main' && needs.changes.outputs.only_changed != 'true'
if: github.repository == 'radius-project/radius' && github.ref == 'refs/heads/main' && needs.changes.outputs.only_changed != 'true' && needs.build-and-push-images.outputs.edge-current == 'true'
Comment thread test/testutil/testutil.go
}
if imageTag == "" {
imageTag = "latest"
imageTag = "test-local"
@github-actions

github-actions Bot commented Sep 10, 2026

Copy link
Copy Markdown

Unit Tests

    2 files    460 suites   8m 28s ⏱️
6 577 tests 6 575 ✅ 2 💤 0 ❌
7 878 runs  7 876 ✅ 2 💤 0 ❌

Results for commit 6bf4bf8.

♻️ This comment has been updated with latest results.

@codecov

codecov Bot commented Sep 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 59.82%. Comparing base (af4029a) to head (6bf4bf8).

Additional details and impacted files
@@                       Coverage Diff                        @@
##           dp/helm-immutable-image-tags   #12956      +/-   ##
================================================================
- Coverage                         59.83%   59.82%   -0.01%     
================================================================
  Files                               778      778              
  Lines                             45916    45916              
================================================================
- Hits                              27474    27471       -3     
- Misses                            18442    18445       +3     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented Sep 10, 2026

Copy link
Copy Markdown

Functional Tests - upgrade-noncloud

1 tests   0 ✅  5m 5s ⏱️
1 suites  0 💤
1 files    1 ❌

For more details on these failures, see this check.

Results for commit 6bf4bf8.

♻️ This comment has been updated with latest results.

@DariuszPorowski
DariuszPorowski force-pushed the dp/release-final-cleanup branch 2 times, most recently from 03154ae to 8ff4430 Compare September 10, 2026 20:56
@DariuszPorowski
DariuszPorowski force-pushed the dp/release-final-cleanup branch 2 times, most recently from 1e89973 to 55ccbe3 Compare September 10, 2026 21:47
@DariuszPorowski
DariuszPorowski force-pushed the dp/release-final-cleanup branch 2 times, most recently from 02a19d0 to 6a60879 Compare September 10, 2026 22:27
@github-actions

github-actions Bot commented Sep 11, 2026

Copy link
Copy Markdown

Functional Tests - corerp-cloud

32 tests   31 ✅  18m 53s ⏱️
 2 suites   1 💤
 1 files     0 ❌

Results for commit dcab14c.

♻️ This comment has been updated with latest results.

@DariuszPorowski
DariuszPorowski force-pushed the dp/release-final-cleanup branch 2 times, most recently from dcab14c to e61efaf Compare September 11, 2026 05:51
Use one canonical snapshot for PR artifacts and main edge publication. Keep production release gates intact, retain Bicep and developer builds, and move test images to attempt-scoped functional workflow tags.

BREAKING CHANGE: The legacy multi-architecture Make targets and release selectors are removed. Use GoReleaser snapshot and edge targets for core images and docker-publish-bicep for Bicep. Test images no longer receive release-channel aliases; use explicit test-run tags.

Refs: #12816
Signed-off-by: Dariusz Porowski <3431813+DariuszPorowski@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown

❌ Spellcheck Failed

There are spelling errors in your PR. Visit the workflow output to see what words are failing.

Adding new words

You can add new custom words to .cspellignore.

@radius-functional-tests

radius-functional-tests Bot commented Sep 11, 2026

Copy link
Copy Markdown

Radius functional test overview

🔍 Go to test action run

Click here to see the test run details
Name Value
Repository radius-project/radius
Commit ref 6bf4bf8
Unique ID func71bbaa6c86
Image tag pr-func71bbaa6c86
  • Dapr: 1.14.4
  • Azure KeyVault CSI driver: 1.4.2
  • Azure Workload identity webhook: 1.3.0
  • Bicep recipe location ghcr.io/radius-project/dev/test/testrecipes/test-bicep-recipes/<name>:pr-func71bbaa6c86
  • Terraform recipe location http://tf-module-server.radius-test-tf-module-server.svc.cluster.local/<name>.zip (in cluster)
  • applications-rp test image location: ghcr.io/radius-project/dev/applications-rp:pr-func71bbaa6c86
  • dynamic-rp test image location: ghcr.io/radius-project/dev/dynamic-rp:pr-func71bbaa6c86
  • controller test image location: ghcr.io/radius-project/dev/controller:pr-func71bbaa6c86
  • ucp test image location: ghcr.io/radius-project/dev/ucpd:pr-func71bbaa6c86
  • deployment-engine test image location: ghcr.io/radius-project/deployment-engine:latest

Test Status

⌛ Building Radius and pushing container images for functional tests...
✅ Container images build succeeded
⌛ Publishing Bicep Recipes for functional tests...
✅ Recipe publishing succeeded
⌛ Starting ucp-cloud functional tests...
⌛ Starting corerp-cloud functional tests...
✅ ucp-cloud functional tests succeeded
✅ corerp-cloud functional tests succeeded

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove legacy release paths and harden the lifecycle

2 participants