Browse Docs
Catalog
Config
Stacks
Operate
Docs

Review a chart upgrade before promoting it

Compare retained Redis 25.5.3 and 27.0.0 configurations and save a review packet. This Guide completes an offline candidate review. It does not upgrade a cluster, approve a release or establish application/data compatibility. View source markdown.

The Workshop plugin used here is version 0.6.21, source revision 56e261a87dc3b060a86474bc796d379dd9bb7f3d. Use that pin in the linked setup.

Jump to the assistant task. Complete the setup below first if this is your first Guide.

Set up the pinned inputs

You need Git, Node.js and cub; no Helm, account, registry, Docker or cluster is needed. Install the pinned Workshop plugin using the Adapt setup. In a separate working directory that does not already contain helm-expt, obtain the retained Catalog inputs:

git clone https://github.com/confighub/helm-expt.git
cd helm-expt
git checkout ed7efffe485b582b41f8d48dc568c8b85492fb74
mkdir upgrade-review
cp recipes/bitnami/redis/25.5.3/revisions/default/r001/rendered/release-objects.yaml upgrade-review/current.yaml
cp recipes/bitnami/redis/27.0.0/revisions/default/r001/rendered/release-objects.yaml upgrade-review/candidate.yaml
cp config-catalog/demonstrations/ai-upgrade-risk.yaml upgrade-review/source-reference.yaml

Keep the original copies. These are committed desired-state renders, not fresh observations of your production system. The source reference identifies both recipe paths and chart versions. The same image can appear in different chart versions; a chart version change alone does not tell you which workload fields changed.

Produce the exact comparison

New to cub? Install the cub CLI first. Public catalog packages pull and render anonymously, and you sign in only once a command saves or changes ConfigHub data.

cub config diff upgrade-review/current.yaml upgrade-review/candidate.yaml --json --out upgrade-review/comparison.json

Expected exit: 0. Open the JSON and review all changed objects and fields, including label/version metadata. Keep both input hashes and the object summary. There are no added or removed objects in this retained pair. This does not mean there are no differences, and a successful command does not mean the upgrade is safe.

Compare your findings with the retained risk evidence at data/ai-upgrade-risk/render-facts.yaml and its receipt. That check covers specific removed-object, immutable-field and image-change signals; it is not an oracle for all Kubernetes admission rules, policies or application migrations. Do not turn a low result on those checks into general production approval.

Write the review decision

Create upgrade-review/review.md with these sections and actual findings:

SectionWhat to retain
SourceRepository revision, both chart versions, recipe paths and input hashes.
Exact changesEvery changed object and field from the JSON, including metadata changes.
Protected intentValues or overlays your team requires to survive; for this anonymous exercise no team-owned overlay has been supplied, so mark preservation untested.
PreconditionsHook/CRD ordering, operator dependencies, policy, target capabilities, credentials and storage/migration questions that need target-specific evidence.
DecisionLocal comparison complete; production promotion on hold pending the missing evidence and authorized approval.
RecoveryPrior reviewed configuration, storage/data recovery plan and actual rollback rehearsal evidence needed before a live release.

To demonstrate a meaningful review hold, make a separate copy:

cp upgrade-review/candidate.yaml upgrade-review/unexpected.yaml

In that copy, change only one workload's metadata.name, leaving all other fields unchanged. Save its comparison to a new file:

cub config diff upgrade-review/current.yaml upgrade-review/unexpected.yaml --json --out upgrade-review/unexpected-comparison.json

Expect exit 0 and an added/removed object pair caused by the changed identity, in addition to the ordinary version differences. Record the unexpected replacement in your review. Do not repair the input to make the report look clean, and do not treat exit 0 as authorization to replace the workload.

A task for an assistant

Start a fresh session in the prepared directory with normal approvals:

Compare current.yaml and candidate.yaml with cub config diff, saving the full
JSON. Use source-reference.yaml to retain their version/source identities.
Read every changed object and field. Write review.md separating observed
changes from untested protected intent, target prerequisites, migration and
rollback questions. Do not infer safe promotion from exit 0 or from a narrow
low-risk classification. Make a separate unexpected.yaml candidate, change
only one workload metadata.name, compare it to the original and keep the
added/removed pair on review hold. Preserve all files and report actual exit
codes and hashes. Do not contact a cluster, ConfigHub or registry, publish,
approve or deploy anything.

Where the next step belongs

The outcome is a local review packet. ConfigHub representation is not created; approval, delivery, runtime observation and data recovery are not run. In a real workflow, update the authored chart/values/overlay source, retain the new candidate under the established ConfigHub authority, and advance the reconciler's desired reference only through its approved release process. A written review does not perform that transition.

Use the hooks and CRDs Guide to identify hidden lifecycle work. The field and restore Guide shows exact local restoration; live rollback additionally needs evidence that the old revision can run against the resulting data and target state.

Generated from the committed markdown file docs/user/workshop-upgrade-guide.md. The source file is the authoritative version.