When `helm uninstall --wait` is called, the default deletion propagation
is now "foreground" instead of "background". This ensures dependent
resources (like Pods, ReplicaSets created by controllers) are fully
cleaned up before the command returns.
Previously, with background deletion, parent resources were deleted
immediately while garbage collection handled dependents asynchronously.
This caused subsequent namespace deletions to hang for 2+ minutes waiting
for those dependent resources to be cleaned up.
With foreground deletion, Kubernetes waits for all dependents to be
deleted before removing the parent resource, ensuring `--wait` truly
waits for all cleanup to complete.
Cascade behavior by command:
| Command | Cascade |
|----------------------------------------------|------------|
| `helm uninstall release` | background |
| `helm uninstall release --wait` | foreground |
| `helm uninstall release --wait=hookOnly` | background |
| `helm uninstall release --wait --cascade=background` | background |
Users can still explicitly set `--cascade=background` to restore the
previous behavior if needed.
Fixes#31651
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
In GoLang, using the == operator to check for a certain error will not
unwrap the error chain, and therefore may hide the problem.
Signed-off-by: Mads Jensen <atombrella@users.noreply.github.com>
When running `helm upgrade --install` on a non-existent release, the
--server-side flag was not being passed to the install action. This
caused the install to always use server-side apply (the default),
ignoring --server-side=false.
Copy ServerSideApply and ForceConflicts from the upgrade client to the
install client when falling back to install.
Fixes#31627
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
The rangeint suggestion is faster.
The maps.Copy and slices.Contains are just syntatic sugar.
Signed-off-by: Mads Jensen <atombrella@users.noreply.github.com>
The kube client logging is based on the actionConfig logging. This
is setup to use slog.Default() before the logging flags are parsed
and logging is setup.
newRootCmdWithConfig changes the logging but it wasn't picked up
for actionConfig or the kube client. This change updates the logging
to include any changes.
Signed-off-by: Matt Farina <matt.farina@suse.com>
Adds chart name to dependency logs, namespace to resource waiting logs,
and confirmation message when all resources are ready.
Addresses #31520
Signed-off-by: shuv0id <110290476+shuv0id@users.noreply.github.com>
Helm 3.19.0 introduced a regression where vendor-specific suffixes
(e.g., -gke.1245000, -eks-4096722, +) are stripped from
.Capabilities.KubeVersion.GitVersion, breaking charts that detect
managed Kubernetes platforms.
The root cause was using k8sversion.ParseGeneric().String() which
intentionally discards vendor suffixes. The fix stores both the full
version (with vendor suffix) and a normalized version. String() returns
the normalized version for constraint checking (e.g., ">= 1.21.0"),
while Version/GitVersion preserve the full string for template access.
Fixes#31423
Related to #31063, #31078
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>