Release Cut And Demo Roll
Overview
Use this skill for the formal release path: update release metadata, cut the release commit and tag, publish the refs, confirm that the release artifacts exist, and then roll demo to the released semver image tag, such as v1.2.41. Prefer the repo's existing release script, CI publish path, and ArgoCD Image Updater over ad hoc local image pushes.
Workflow
- Work from the repo root on the intended release branch.
- Update
VERSIONand the topCHANGELOGentry for the new semver. - Dry-run the release cut to verify the changelog entry is wired correctly.
- Run
scripts/cut-release.sh --version <version>and append--pushwhen ready to publish refs. - Confirm the release commit and tag landed where expected.
- Wait for the published release artifacts to exist for the target semver tag.
- Let ArgoCD Image Updater advance
demotov<version>, or patch the Argo app tov<version>if an immediate manual reconcile is required. - Watch Argo until
demoreachesSynced|Healthy|Succeeded. - Report the release version, release commit, release tag, Image Updater status, and final demo rollout status.
Guardrails
- Use this only for actual release cuts. Do not use it for one-off local testing or unpublished commits.
- Do not bypass
scripts/cut-release.shunless the user explicitly asks for a different path. - Do not treat the release as deployable until the published artifacts for the release version actually exist.
- Prefer published release artifacts over rebuilding images locally in this workflow.
- Roll formal releases with the semver image tag, for example
v1.2.41. Thesha-<commit>path is for unpublished local demo testing only. - Do not switch ArgoCD Image Updater back to
newest-buildoversha-*tags. Harbor tag timestamps can point demo at an older release; semver policy avoids that failure mode.
Update Release Metadata
Before cutting the release:
- update
VERSION - add the matching top entry in
CHANGELOG
Then dry-run the cut:
scripts/cut-release.sh --version <version> --dry-run
Fix metadata issues before continuing.
Cut And Push The Release
Create the release commit and annotated tag:
scripts/cut-release.sh --version <version>
When the user wants the refs published immediately, use:
scripts/cut-release.sh --version <version> --push
Afterward, capture:
git rev-parse HEAD
git describe --tags --exact-match
Keep the release commit SHA for reporting and traceability. Use the release version as the demo image tag source: v<version>.
Published Artifact Expectations
Do not roll demo until the release artifacts for the target semver tag exist.
Typical release build path from this repo:
./scripts/docker-login.sh
bazel build --config=remote $(bazel query 'kind(oci_image, //docker/images:*)')
make push_all_release
In practice, this usually runs in CI instead of locally. The important requirement is that the release images for the target version are published and signed before the demo rollout starts.
If only a single release image must be republished, use the matching Bazel push target. If only Wasm plugins are relevant, use make push_wasm_plugins.
Roll Demo To The Release Tag
The steady-state demo path is ArgoCD Image Updater with a semver strategy. After the release images are published, force a reconcile if needed:
kubectl annotate imageupdater -n argocd serviceradar-demo-image-updater \
force-reconcile="$(date +%s)" \
--overwrite
Then check the Image Updater status:
kubectl get imageupdater -n argocd serviceradar-demo-image-updater \
-o jsonpath='{.status.applicationsMatched}{"|"}{.status.imagesManaged}{"|"}{range .status.conditions[?(@.type=="Error")]}{.reason}{":"}{.status}{":"}{.message}{end}{"\n"}'
Expect one matched application, one managed image, and an Error condition with reason NoErrors and status False.
If an immediate manual override is required, patch the Argo application to the semver tag:
kubectl patch application -n argocd serviceradar-demo-prod \
--type merge \
-p '{"spec":{"source":{"helm":{"parameters":[{"name":"global.imageTag","value":"v<version>"}]}}}}'
Do not use sr_demo_deploy for formal releases; that helper rolls demo to a sha-... tag and is only appropriate for local unpublished test builds.
Verify Demo Rollout
Watch the Argo app or Helm result until the deployment is healthy. For Argo-backed environments, wait for:
Synced|Healthy|Succeeded
Useful checks:
kubectl get application -n argocd serviceradar-demo-prod \
-o jsonpath='{.status.sync.status}{"|"}{.status.health.status}{"|"}{.status.operationState.phase}{"\n"}'
kubectl get pods -n demo
kubectl get deploy -n demo \
serviceradar-web-ng serviceradar-core serviceradar-agent serviceradar-tools \
-o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{range .spec.template.spec.containers[*]}{.image}{" "}{end}{"\n"}{end}'
Do not report the rollout finished until the key workloads are running the new v<version> tag and the environment is healthy.
Report Back
Close with:
- release version
- release commit SHA
- release tag
- whether refs were pushed
- whether release artifacts were confirmed published
- Image Updater status
- final
demorollout status - any residual risk or follow-up needed
Source: carverauto/serviceradar — distributed by TomeVault.