helm/helm · error
uninstall: Failed to purge the release: %w
Error message
uninstall: Failed to purge the release: %w
What it means
On the already-uninstalled path: the latest revision has StatusUninstalled and KeepHistory is false, so Helm tries to purge every historical revision via Releases.Delete(name, version); one delete failed and the wrapped storage error is returned. The release stays half-purged: some revisions removed, the failing one(s) still in storage.
Source
Thrown at pkg/action/uninstall.go:188
}
if len(relsi) < 1 {
return nil, errMissingRelease
}
rels, err := releaseListToV1List(relsi)
if err != nil {
return nil, err
}
releaseutil.SortByRevision(rels)
rel := rels[len(rels)-1]
// TODO: Are there any cases where we want to force a delete even if it's
// already marked deleted?
if rel.Info.Status == common.StatusUninstalled {
if !u.KeepHistory {
if err := u.purgeReleases(rels...); err != nil {
return nil, fmt.Errorf("uninstall: Failed to purge the release: %w", err)
}
return &releasei.UninstallReleaseResponse{Release: rel}, nil
}
return nil, fmt.Errorf("the release named %q is already deleted", name)
}
u.cfg.Logger().Debug("uninstall: deleting release", "name", name)
rel.Info.Status = common.StatusUninstalling
rel.Info.Deleted = time.Now()
rel.Info.Description = "Deletion in progress (or silently failed)"
res := &releasei.UninstallReleaseResponse{Release: rel}
if !u.DisableHooks {
serverSideApply := true
if err := u.cfg.execHook(rel, release.HookPreDelete, u.WaitStrategy, u.WaitOptions, u.Timeout, serverSideApply); err != nil {
return res, err
}
} else {View on GitHub (pinned to 2a29f1770b)
Solutions
- Check which revisions remain: helm history <name> or kubectl get secrets | grep sh.helm.release.v1.<name>
- Grant delete permission or fix the backend error named by the wrapped %w
- Re-run helm uninstall <name> (without --keep-history) — purging remaining revisions is idempotent
- Delete leftover records manually if the release object is otherwise empty: kubectl delete secret sh.helm.release.v1.<name>.v<N>
Defensive patterns
Strategy: retry
Try / catch
if err != nil && strings.Contains(err.Error(), "uninstall: Failed to purge the release") {
// half-purged history: re-running uninstall without --keep-history is idempotent
u.KeepHistory = false
return u.Run(name)
} Prevention
- Never run two uninstalls of one release concurrently; lock per release in automation
- Ensure delete verb on release secrets/configmaps, not just get/list
- After purge errors, sweep for leftover sh.helm.release.v1.<name>.* records before declaring cleanup done
When it happens
Trigger: u.purgeReleases iterating all revisions and the driver Delete failing on any single one: RBAC delete denial on that Secret/ConfigMap, SQL delete error, concurrent uninstall deleting the same revision first (404/already-gone race).
Common situations: Two helm uninstall processes racing; permission grants that allow get/list but not delete on secrets; SQL backend constraint or connection drop mid-purge; operator automation re-running cleanup after a partially failed prior purge.
Related errors
- uninstall: Release not loaded: %s: %w
- unable to verify resource ownership: %w
- an error occurred while finding last successful release. ori
- no objects visited
- an error occurred while cleaning up resources. original roll
AI-assisted analysis of helm/helm@2a29f1770b (2026-08-15).
Data as JSON: /api/errors/cc6dff5b6222ef4e.
Report an issue: GitHub.