Manual Upgrade
Upgrade BoltMCP to a new chart release with helm upgrade.
To deploy a new release, first set the target version and update the paths to your values file and access key file:
export BOLTMCP_VERSION=0.3.8
export BOLTMCP_VALUES="$PWD/config/values-prod.yaml"
export HELM_REGISTRY_CONFIG="$PWD/keys/boltmcp-key.json"Make sure your values file contains all required fields from the Getting Started pages, including the ingress block if you're using chart-managed ingress.
Now run the upgrade:
helm upgrade boltmcp \
oci://europe-west2-docker.pkg.dev/boltmcp-platform/boltmcp-alpha/charts/boltmcp \
--version ${BOLTMCP_VERSION} \
-n boltmcp \
-f ${BOLTMCP_VALUES} \
--timeout 15mRun with --dry-run=client first to verify the rendered manifests and surface any schema errors before applying for real.
The upgrade blocks on the post-upgrade hook jobs (database migration and seed). As with installation, --timeout 15m is required on EKS Auto Mode, where scheduling the hook pods can trigger a node scale-up that exceeds Helm's default 5m timeout. A timed-out upgrade leaves the release stuck in pending-upgrade (see below).
Verify the Upgrade
Confirm the new revision shows deployed:
helm history boltmcp -n boltmcpWatch pods until all show Running / Completed:
kubectl get pods -n boltmcp -wThe boltmcp-migrate-core and boltmcp-seed pods created by the post-upgrade hooks should show Completed. If a pod is not starting, check its logs and events:
kubectl logs -n boltmcp <pod-name>
kubectl describe pod -n boltmcp <pod-name>Check the Vault Seal Status
If the upgrade caused the Vault pod to restart, and auto-unseal isn't configured, it will come back sealed. Check the Sealed status with:
kubectl exec -n boltmcp deploy/boltmcp-vault -- vault statusIf it reads true, unseal Vault again, or configure auto-unseal to avoid the manual step on future restarts.
Values-Only Changes
To apply a change to values-prod.yaml without a chart-version bump, re-run the same helm upgrade command above with the unchanged --version. Values render into the pod specs, so Helm rolls the affected deployments automatically — no manual restart is needed.
Editing the contents of the externally-managed application Secrets (boltmcp-database, boltmcp-oidc, boltmcp-auth) is different: that isn't a values change and Helm won't notice it. Pods read these Secrets only at startup, so restart the deployments that consume them:
kubectl rollout restart -n boltmcp deployment/<deployment>Recovering a stuck pending-upgrade release
If a helm upgrade is interrupted (timeout, Ctrl-C, OOM, kube-apiserver hiccup) the release record can be left in pending-upgrade state. Every subsequent helm upgrade will then fail with:
Error: UPGRADE FAILED: another operation (install/upgrade/rollback) is in progressBefore doing anything, make sure the state is actually stale: confirm no helm upgrade is still running in another terminal or CI job, and let any in-flight hook jobs from the interrupted attempt finish (retrying while a migration job is mid-run would delete and recreate it):
kubectl get jobs -n boltmcpTo clear the stale record without losing the deployed resources, delete the stuck revision's Helm release Secret. Helm will fall back to the previous successful revision as the current state:
# Find the pending revision (column STATUS = pending-upgrade)
helm history boltmcp -n boltmcp
# Delete its release Secret
kubectl delete secret sh.helm.release.v1.boltmcp.v<N> -n boltmcp
# Confirm the release no longer shows pending-upgrade
helm history boltmcp -n boltmcp
# Re-run the upgrade
helm upgrade boltmcp ... -f ./config/values-prod.yamlhelm rollback is the textbook recovery, but it can fail with original object Secret with the name "boltmcp-auth" not found when rolling back across a chart version that changed which resources are Helm-managed. If that happens, fall back to the manual kubectl delete secret sh.helm.release.v1.boltmcp.v<N> approach above.