Robert Sirchia
722482b77d
Merge pull request #31561 from atombrella/feature/nilness_cleanup
...
Remove two redundant if-checks.
2 months ago
Mads Jensen
6cceead399
Use modernize to use newer Golang features.
...
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>
2 months ago
Mads Jensen
380abe2b16
Remove two redundant if-checks.
...
These were found with the nilness checker.
Signed-off-by: Mads Jensen <atombrella@users.noreply.github.com>
2 months ago
Matt Farina
936cd328ac
Fix kube client logging
...
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>
2 months ago
Matt Farina
61d289c119
Merge pull request #31518 from gjenkins8/gjenkins/fix_update_create
...
fix: Use server-side apply for object create during update
2 months ago
Matt Farina
698fcd2290
Merge pull request #31515 from gjenkins8/gjenkins/copy_adopted
...
fix: Copy adopted resource info
2 months ago
Benoit Tigeot
81d244ca21
fix: prevent segmentation violation on empty yaml in multidoc
...
Fixes: https://github.com/helm/helm/issues/31544
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2 months ago
Benoit Tigeot
40e22dedb2
fix: prevent reporting fallback on version when none specified
...
Fixes: https://github.com/helm/helm/issues/31548
```
❯ helm pull rancher/longhorn-crd --version 106.2.0+up1.8.2 --destination /tmp/
level=WARN msg="unable to find exact version; falling back to closest available version" chart=longhorn-crd requested=106.2.0+up1.8.2 selected=106.2.0+up1.8.1
❯ bin/helm show chart brigade/brigade
apiVersion: v1
appVersion: v1.5.0
dependencies:
- condition: kashti.enabled
name: kashti
repository: https://brigadecore.github.io/charts
version: 0.7.0
- condition: brigade-github-app.enabled
name: brigade-github-app
repository: https://brigadecore.github.io/charts
version: 0.8.0
- alias: gw
condition: gw.enabled
name: brigade-github-oauth
repository: https://brigadecore.github.io/charts
version: 0.4.0
description: Brigade provides event-driven scripting of Kubernetes pipelines.
name: brigade
version: 1.10.0
```
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2 months ago
Matt Farina
df6aafeeee
Merge pull request #31462 from mattfarina/load-archive
...
Adding a LoadArchive to common loader
2 months ago
Matt Farina
63858b383f
Merge pull request #31535 from mattfarina/bump-4.1
...
bump version to 4.1
2 months ago
Robert Sirchia
eb3da36e2e
Merge pull request #31530 from shuv0id/improve-debug-logging
...
fix: add missing context to debug logs
2 months ago
George Jenkins
63dcb5c74c
Merge pull request #31464 from benoittgt/fix-test
...
Properly test error messages on pull command's test
2 months ago
Matt Farina
63e060fb05
bump version to 4.1
...
Signed-off-by: Matt Farina <matt.farina@suse.com>
2 months ago
shuv0id
2dc5864f44
fix: add missing context to debug logs
...
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>
2 months ago
Benoit Tigeot
ce273eea48
fix: preserve vendor suffixes in KubeVersion.GitVersion
...
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>
2 months ago
George Jenkins
f8a49f1852
fixup test
...
Signed-off-by: George Jenkins <gvjenkins@gmail.com>
2 months ago
George Jenkins
a9cdc78116
logs
...
Signed-off-by: George Jenkins <gvjenkins@gmail.com>
2 months ago
George Jenkins
b1a976073f
fix
...
Signed-off-by: George Jenkins <gvjenkins@gmail.com>
2 months ago
Terry Howe
5f3c617940
chore: add warning for registry login with namespace
...
Signed-off-by: Terry Howe <terrylhowe@gmail.com>
2 months ago
Robert Sirchia
a75fcc2948
Merge pull request #31478 from promalert/main
...
refactor: use strings.Builder to improve performance
2 months ago
George Jenkins
18616e6ce9
fix: Use server-side apply for object create during update
...
Signed-off-by: George Jenkins <gvjenkins@gmail.com>
2 months ago
Scott Rigby
ebd5f53fc3
Merge pull request #31421 from benoittgt/improve-doc-wait-strategy
...
Unify --wait strategy inputs, clarify defaults and docs; avoid SDK timeout footgun
2 months ago
George Jenkins
855ebb6884
Copy adopted resource info
...
Signed-off-by: George Jenkins <gvjenkins@gmail.com>
2 months ago
Scott Rigby
b740071279
Merge pull request #31342 from TerryHowe/chore-remove-mitchellh-dependency-3
...
chore: replace github.com/mitchellh/copystructure
2 months ago
Scott Rigby
e7ac8fe3b8
Merge pull request #30984 from fm1ck3y/bug/index-concurrency
...
feat(concurrency): allow concurrent dependency build with atomic file write
2 months ago
Scott Rigby
d57fb45648
Merge pull request #31469 from saimanojk1/issue-31454
...
Convert pkg/cmd/load_plugins.go to slog
2 months ago
promalert
d8c4040336
refactor: use strings.Builder to improve performance
...
Signed-off-by: promalert <promalert@outlook.com>
2 months ago
Scott Rigby
0ee89d2d4e
Merge pull request #31418 from tisonkun/typo
...
chore: fix typo of public field
2 months ago
Benoit Tigeot
02312a1cf2
Update pkg/cmd/flags.go
...
Co-authored-by: George Jenkins <gvjenkins@gmail.com>
Signed-off-by: Benoit Tigeot <benoittgt@users.noreply.github.com>
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2 months ago
Benoit Tigeot
277c140c87
Error strategy list match help
...
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2 months ago
Benoit Tigeot
5f6fa437b2
Prevent surprising failure with SDK when timeout is not set
...
While testing SDK features for v4. I was surprised with the error:
"reporter failed to start: event funnel closed: context deadline exceeded"
This occurs when no timeout is set:
```
upgradeClient := action.NewUpgrade(actionConfig)
upgradeClient.WaitStrategy = kube.StatusWatcherStrategy
// When Timeout is zero, the status wait uses a context with zero timeout which
// immediately expires causing "context deadline exceeded" errors.
upgradeClient.Timeout = 2 * time.Minute
```
With this patch it will work without specifying.
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2 months ago
Benoit Tigeot
52a282832f
Do not change the default waiting strategy when --wait is not set
...
It is too much a breaking change for a new RC of beta V4.
See comment: https://github.com/helm/helm/pull/31421#discussion_r2465121438
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2 months ago
Benoit Tigeot
11128659aa
Provide more help for SDK user when setting up WaitStrategy
...
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2 months ago
Benoit Tigeot
8535e9f4ab
Avoid confusion between `--wait` (watcher) and no --wait (hookOnly)
...
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2 months ago
Benoit Tigeot
1836f37f4d
The default is not HookOnlyStrategy but WaitStrategy
...
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2 months ago
Benoit Tigeot
a5e110fccd
Make wait strategy selection more obvious
...
It is not clear enough that you need to set --wait=false for a hook only
strategy.
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2 months ago
Benoit Tigeot
e8b0cff45a
Update pkg/cmd/flags.go
...
Co-authored-by: George Jenkins <gvjenkins@gmail.com>
Signed-off-by: Benoit Tigeot <benoittgt@users.noreply.github.com>
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2 months ago
Benoit Tigeot
95e1ee1089
Increase documentation of --wait flag
...
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2 months ago
Benoit Tigeot
5cbd9b3035
While testing SDK features for v4. I was surprised with the error:
...
> "reporter failed to start: event funnel closed: context deadline exceeded"
It happens when you forget to set a minimal timeout:
```go
upgradeClient := action.NewUpgrade(actionConfig)
upgradeClient.WaitStrategy = kube.StatusWatcherStrategy
// When Timeout is zero, the status wait uses a context with zero timeout which
// immediately expires causing "context deadline exceeded" errors.
upgradeClient.Timeout = 2 * time.Minute
```
Also maybe it might be worth documenting this more clearly. Initial [PR](https://github.com/helm/helm/pull/13604 ) say:
> I have not written any docs, I assume that can be done when we are closer to Helm 4, a lot of it is covered by linking to - https://github.com/kubernetes-sigs/cli-utils/blob/master/pkg/kstatus/README.md
Related:
- https://github.com/helm/helm/pull/31411#issuecomment-3443925663
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2 months ago
saimanojk1
6de83c5f60
Convert pkg/cmd/load_plugins.go to slog
...
Signed-off-by: saimanojk1 <saimanojk1@hotmail.com>
2 months ago
Hidde Beydals
d158708fbf
fix(rollback): `errors.Is` instead of string comp
...
Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2 months ago
Hidde Beydals
2f1ecc7100
fix(uninstall): supersede deployed releases
...
This ensures that when `helm uninstall` is run with `--keep-history`
any release in a `deployed` state other than the last release (e.g.
due to a failed upgrade) is being marked as `superseded`.
As a by-effect, running `helm upgrade` on a release which has been
uninstalled after an upgrade failure now no longer works. But instead
fails with a `"<name>" has no deployed releases` error. Which is the
(likely) intended behavior, and prevents other side-effects like
rolling back to a release version which happened before the uninstall
if `--atomic` (or `--rollback-on-failure`) was provided.
Signed-off-by: Hidde Beydals <hidde@hhh.computer>
2 months ago
George Jenkins
cdb48b88fb
Merge pull request #31240 from benoittgt/fix-31170-URN
...
jsonschema: warn and ignore unresolved URN $ref to match v3.18.4
2 months ago
tison
4576a81a00
for remaining local variable case inconsistency
...
Signed-off-by: tison <wander4096@gmail.com>
2 months ago
Benoit Tigeot
ed6cf0e8a1
Properly test error messages on pull command's test
...
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2 months ago
Matt Farina
0f5eda74c1
Adding a LoadArchive to common loader
...
LoadArchive is in the individual loaders for the chart versions.
It is used by SDK users to load a stream rather than a file on
the filesystem. Adding to support SDK users like Flux.
Signed-off-by: Matt Farina <matt.farina@suse.com>
2 months ago
George Jenkins
384a3f0ff8
Merge pull request #31385 from porridge/test-unknown-policy
...
test: protect unknown hook delete policies
3 months ago
tison
90d01915f9
for all other similar cases
...
Signed-off-by: tison <wander4096@gmail.com>
3 months ago
Scott Rigby
99cd196435
Merge pull request #31435 from matheuscscp/cancel-health-checks
...
Introduce a context for canceling wait operations
3 months ago
Matheus Pimenta
efc1702657
Introduce a context for canceling wait operations
...
Signed-off-by: Matheus Pimenta <matheuscscp@gmail.com>
3 months ago
laervn
36aaa9aab9
Merge branch 'helm:main' into feat/add-no-headers-option
3 months ago
George Jenkins
bdc459d73c
Merge pull request #31389 from TerryHowe/chore-more-registry-clean-up
...
chore: fix pkg/registry warnings to reduce noise
3 months ago
Paul Van Laer
6ef79bb8d5
feat(repo): add --no-headers option to 'helm repo list'
...
This adds a --no-headers flag to the 'helm repo list' command,
allowing users to suppress table headers in the output.
Useful for scripting and automation.
Signed-off-by: Paul Van Laer <paul.van.laer1@gmail.com>
3 months ago
Benoit Tigeot
97b7a1c9ae
Merge branch 'main' into fix-31170-URN
...
Signed-off-by: Benoit Tigeot <benoittgt@users.noreply.github.com>
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
3 months ago
Matt Farina
15300549f0
When time not available, using time.Now
...
Note, when time is not available, the builds are not reproducible.
This problem would only happen when an SDK user is using parts of
the API to build their own tooling. Helm will consistently inject
the dates through the higher level APIs.
Signed-off-by: Matt Farina <matt.farina@suse.com>
3 months ago
Matt Farina
ca8eae9361
Reproducible chart archive builds
...
Building the same chart into an archive multiple times will have
the same sha256 hash.
Perviously, the time in the headers for a file was time.Now() which
changed each time. The time is now collected from the operating
system when the file is loaded and this time is used.
Fixes : #3612
Signed-off-by: Matt Farina <matt.farina@suse.com>
3 months ago
Scott Rigby
f4c5220d99
Merge pull request #31411 from banjoh/em/reinstate-logger-param
...
feat: reinstate logger parameter to actions package
3 months ago
tison
0d6de28bf4
chore: fix typo of public field
...
Signed-off-by: tison <wander4096@gmail.com>
3 months ago
Evans Mungai
2ddeb50fa6
Set default logger in Configuration constructor
...
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
3 months ago
Evans Mungai
a112bf5aa6
Remove non-reachable code
...
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
3 months ago
Matt Farina
1da2b0a6d4
Merge pull request #31204 from benoittgt/fix-31202
...
Avoid panic in helm.sh/helm/v3/pkg/chartutil.ValidateAgainstSchema
3 months ago
Robert Sirchia
25ad74f5a7
Merge pull request #31337 from rachelvweber/rawo/fixingWaitStrategy
...
Fixing rollback and uninstall client WaitStrategy
3 months ago
Evans Mungai
aed687eaa1
Add config options to NewConfiguration()
...
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
3 months ago
Evans Mungai
b6eca1c0f1
Refactor logging functionality to use slog.Handler
...
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
3 months ago
Evans Mungai
5ab4ca5490
Embed logging functionality to DRY code
...
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
3 months ago
Evans Mungai
9c32e34d60
Add logger to sql driver and ensure storage has logger
...
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
3 months ago
Evans Mungai
50e43f4017
nil logger should be handled by discard handler
...
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
3 months ago
Evans Mungai
7a5816b106
Self review changes
...
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
3 months ago
Evans Mungai
0f90c83118
Merge remote-tracking branch 'upstream/main' into em/reinstate-logger-param
3 months ago
Evans Mungai
b1d4dc680d
feat: reinstate logger parameter to actions package
...
Fixes : #31399
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
3 months ago
Matt Farina
76e6b7a6fe
Merge pull request #31390 from TerryHowe/chore-increase-helm-list-test-coverage
...
fix: improve pkg/cmd/list test coverage
3 months ago
Matt Farina
2cfd41ec28
Merge pull request #31351 from gjenkins8/gjenkins/helm_version_kubeversion
...
feat: `helm version` print Kubernetes (client-go) version
3 months ago
Matt Farina
752354074c
Merge pull request #31393 from benoittgt/12299
...
Return errors during upgrade when the deletion of resources fails
3 months ago
Matt Farina
37de51428c
Merge pull request #31376 from benoittgt/accept-yaml-yml
...
Do not ignore *.yml file on linting while accepting *.yaml
3 months ago
Matt Farina
b0247ce8bf
Merge pull request #31395 from wyrapeseed/main
...
chore: fix some comment format
3 months ago
Terry Howe
0f6e14dfd3
chore: fix various warnings to reduce noise
...
Signed-off-by: Terry Howe <terrylhowe@gmail.com>
3 months ago
Jesse Simpson
3f860e83fb
fix: use empty results instead of nil
...
Signed-off-by: Jesse Simpson <jesse.simpson36@gmail.com>
3 months ago
Jesse Simpson
96b4c363c8
fix: Update returns nil on error, test should reflect this
...
Signed-off-by: Jesse Simpson <jesse.simpson36@gmail.com>
3 months ago
Terry Howe
917822cfca
refactor: remove unused err from pkg/registry/client.go
...
Signed-off-by: Terry Howe <terrylhowe@gmail.com>
3 months ago
wyrapeseed
b9eadd3186
chore: fix some comment format
...
Signed-off-by: wyrapeseed <wyrapeseed@outlook.com>
3 months ago
Benoit Tigeot
7097c8e2e5
Replicate as unit test case where we fail once a resource deletion
...
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
3 months ago
Benoit Tigeot
054eabddd7
Return errors on upgrade when deletion fails
...
This is a rebase of https://github.com/helm/helm/pull/12299
as the pull request was tagged for Helm v4.
Closes: https://github.com/helm/helm/issues/11375
Related: https://github.com/helm/helm/pull/7929
It was a pain to reproduce, here is a script:
```
set -u
NS=default
RELEASE=test-release
CHART=./test-chart
SA=limited-helm-sa
HELM=${HELM:-./bin/helm}
echo "Helm: $($HELM version)"
echo "Cleaning…"
$HELM uninstall "$RELEASE" -n "$NS" >/dev/null 2>&1 || true
kubectl -n "$NS" delete sa "$SA" role "${SA}-role" rolebinding "${SA}-rb" >/dev/null 2>&1 || true
kubectl -n "$NS" delete cronjob "$RELEASE-test-chart-cronjob" >/dev/null 2>&1 || true
rm -rf "$CHART" /tmp/limited-helm-kubeconfig
echo "Create minimal chart with only a CronJob"
$HELM create "$CHART" >/dev/null
rm -f "$CHART"/templates/{deployment.yaml,service.yaml,hpa.yaml,tests/test-connection.yaml,serviceaccount.yaml}
cat > "$CHART/templates/cronjob.yaml" <<'YAML'
apiVersion: batch/v1
kind: CronJob
metadata:
name: {{ include "test-chart.fullname" . }}-cronjob
spec:
schedule: "*/5 * * * *"
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: hello
image: busybox
command: ["/bin/sh","-c","date; echo Hello from CronJob"]
YAML
echo "RBAC: allow Helm storage, basic reads/creates, but NO delete on cronjobs"
kubectl -n "$NS" apply -f - >/dev/null <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: $SA
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: ${SA}-role
rules:
- apiGroups: [""]
resources: ["secrets","configmaps"]
verbs: ["get","list","watch","create","patch","update","delete"]
- apiGroups: [""]
resources: ["pods","events"]
verbs: ["get","list","watch"]
- apiGroups: ["batch"]
resources: ["cronjobs"]
verbs: ["get","list","watch","create","patch","update"]
EOF
kubectl -n "$NS" apply -f - >/dev/null <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: ${SA}-rb
subjects:
- kind: ServiceAccount
name: $SA
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: ${SA}-role
EOF
echo "Create kubeconfig for that SA"
TOKEN=$(kubectl -n "$NS" create token "$SA")
SERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')
CA_DATA=$(kubectl config view --minify --raw -o jsonpath='{.clusters[0].cluster.certificate-authority-data}')
KCFG=/tmp/limited-helm-kubeconfig
cat > "$KCFG" <<EOF
apiVersion: v1
kind: Config
clusters:
- name: local
cluster:
server: $SERVER
certificate-authority-data: $CA_DATA
contexts:
- name: limited
context:
cluster: local
namespace: $NS
user: $SA
current-context: limited
users:
- name: $SA
user:
token: $TOKEN
EOF
set +e
echo "Install (as limited SA)"
KUBECONFIG="$KCFG" $HELM upgrade --install "$RELEASE" "$CHART" -n "$NS" --wait
echo "CronJob after install:"
kubectl -n "$NS" get cronjob "$RELEASE-test-chart-cronjob" || true
echo "Remove CronJob from chart and add a small ConfigMap to force an upgrade"
rm -f "$CHART/templates/cronjob.yaml"
cat > "$CHART/templates/configmap.yaml" <<'YAML'
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "test-chart.fullname" . }}-config
data:
hello: world
YAML
echo "Upgrade without CronJob (as limited SA)"
KUBECONFIG="$KCFG" $HELM upgrade --install "$RELEASE" "$CHART" -n "$NS"
RC=$?
echo "Post-upgrade verification"
if kubectl -n "$NS" get cronjob "$RELEASE-test-chart-cronjob" >/dev/null 2>&1; then
echo "OK: Stale CronJob still present: $RELEASE-test-chart-cronjob"
else
echo "NO_OK: CronJob deleted"
fi
echo "Helm exit code: $RC"
exit 0
```
With the current build:
```sh
./reproduce-helm-issue.sh
Helm: version.BuildInfo{Version:"v4.0+unreleased", GitCommit:"f19bb9cd4c99943f7a4980d6670de44affe3e472", GitTreeState:"dirty", GoVersion:"go1.24.0"}
Cleaning…
Create minimal chart with CronJob + ConfigMap (we will remove both in v2)
RBAC: allow Helm storage + delete for configmaps, but NO delete on cronjobs
Create kubeconfig for that SA
Install v1 (as limited SA)
Release "test-release" does not exist. Installing it now.
NAME: test-release
LAST DEPLOYED: Tue Oct 14 18:55:57 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
DESCRIPTION: Install complete
TEST SUITE: None
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=test-chart,app.kubernetes.io/instance=test-release" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
Verify v1 objects exist
NAME SCHEDULE TIMEZONE SUSPEND ACTIVE LAST SCHEDULE AGE
test-release-test-chart-cronjob */5 * * * * <none> False 0 <none> 0s
NAME DATA AGE
test-release-test-chart-config 1 0s
Prepare v2: remove BOTH CronJob and ConfigMap from the chart
Upgrade to v2 (as limited SA) — expecting CronJob delete first, then ConfigMap
- CronJob delete should FAIL (no delete permission)
- ConfigMap delete should SUCCEED (delete allowed) — proves 'continue on error' and inverted order
level=DEBUG msg="getting history for release" release=test-release
level=DEBUG msg="getting release history" name=test-release
level=DEBUG msg="preparing upgrade" name=test-release
level=DEBUG msg="getting last revision" name=test-release
level=DEBUG msg="getting release history" name=test-release
level=DEBUG msg="number of dependencies in the chart" dependencies=0
level=DEBUG msg="determined release apply method" server_side_apply=true previous_release_apply_method=ssa
level=DEBUG msg="performing update" name=test-release
level=DEBUG msg="creating upgraded release" name=test-release
level=DEBUG msg="creating release" key=sh.helm.release.v1.test-release.v2
level=DEBUG msg="getting release history" name=test-release
level=DEBUG msg="using server-side apply for resource update" forceConflicts=false dryRun=false fieldValidationDirective=Strict upgradeClientSideFieldManager=false
level=DEBUG msg="checking resources for changes" resources=0
level=DEBUG msg="deleting resource" namespace=default name=test-release-test-chart-config kind=ConfigMap
level=DEBUG msg="deleting resource" namespace=default name=test-release-test-chart-cronjob kind=CronJob
level=DEBUG msg="failed to delete resource" namespace=default name=test-release-test-chart-cronjob kind=CronJob error="cronjobs.batch \"test-release-test-chart-cronjob\" is forbidden: User \"system:serviceaccount:default:limited-helm-sa\" cannot delete resource \"cronjobs\" in API group \"batch\" in the namespace \"default\""
level=INFO msg="update completed" created=0 updated=0 deleted=1
level=WARN msg="update completed with errors" errors=1
level=DEBUG msg="updating release" key=sh.helm.release.v1.test-release.v1
level=WARN msg="upgrade failed" name=test-release error="failed to delete resource test-release-test-chart-cronjob: cronjobs.batch \"test-release-test-chart-cronjob\" is forbidden: User \"system:serviceaccount:default:limited-helm-sa\" cannot delete resource \"cronjobs\" in API group \"batch\" in the namespace \"default\""
level=DEBUG msg="updating release" key=sh.helm.release.v1.test-release.v2
Error: UPGRADE FAILED: failed to delete resource test-release-test-chart-cronjob: cronjobs.batch "test-release-test-chart-cronjob" is forbidden: User "system:serviceaccount:default:limited-helm-sa" cannot delete resource "cronjobs" in API group "batch" in the namespace "default"
Post-upgrade verification
Stale CronJob still present: test-release-test-chart-cronjob (expected if delete is forbidden)
ConfigMap deleted as expected: test-release-test-chart-config (and after CronJob attempt)
Helm exit code: 1
```
With last version v3.19:
```
HELM=/usr/local/bin/helm ./reproduce-helm-issue.sh
Helm: version.BuildInfo{Version:"v3.19.0", GitCommit:"3d8990f0836691f0229297773f3524598f46bda6", GitTreeState:"clean", GoVersion:"go1.24.7"}
Cleaning…
Create minimal chart with only a CronJob
RBAC: allow Helm storage, basic reads/creates, but NO delete on cronjobs
Create kubeconfig for that SA
Install (as limited SA)
Release "test-release" does not exist. Installing it now.
NAME: test-release
LAST DEPLOYED: Tue Oct 14 19:07:01 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=test-chart,app.kubernetes.io/instance=test-release" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
CronJob after install:
NAME SCHEDULE TIMEZONE SUSPEND ACTIVE LAST SCHEDULE AGE
test-release-test-chart-cronjob */5 * * * * <none> False 0 <none> 0s
Remove CronJob from chart and add a small ConfigMap to force an upgrade
Upgrade without CronJob (as limited SA)
Release "test-release" has been upgraded. Happy Helming!
NAME: test-release
LAST DEPLOYED: Tue Oct 14 19:07:01 2025
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=test-chart,app.kubernetes.io/instance=test-release" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
Post-upgrade verification
OK: Stale CronJob still present: test-release-test-chart-cronjob
Helm exit code: 0
```
Co-authored-by: dayeguilaiye <979014041@qq.com>
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
3 months ago
Terry Howe
3b2fd17799
chore: rename test registry
...
Signed-off-by: Terry Howe <terrylhowe@gmail.com>
3 months ago
Terry Howe
379b0899b3
fix: increase helm list test coverage
...
Signed-off-by: Terry Howe <terrylhowe@gmail.com>
3 months ago
George Jenkins
7dd2484aed
Merge pull request #31295 from TerryHowe/fix-make-helm-list-show-all-by-default
...
Fix make helm list show all by default
3 months ago
Scott Rigby
f0530309f0
Merge pull request #31302 from TerryHowe/fix-helm-verify-signature
...
fix: helm verify Run signature
3 months ago
Scott Rigby
f9d4373ea4
Merge pull request #31270 from TerryHowe/chore-registry-clean-up
...
chore: registry utils clean up
3 months ago
Terry Howe
abdf6603c0
fix test for rebase
...
Signed-off-by: Terry Howe <terrylhowe@gmail.com>
3 months ago
Matt Farina
a03e8c9541
Merge pull request #31375 from TerryHowe/fix-release-info-time
...
fix: release info time parsing
3 months ago
Terry Howe
f6e60138e8
Update pkg/cmd/list.go
...
Co-authored-by: George Jenkins <gvjenkins@gmail.com>
Signed-off-by: Terry Howe <terrylhowe@gmail.com>
3 months ago
Terry Howe
c3aa5c51e6
chore: clean up for comments
...
Signed-off-by: Terry Howe <terrylhowe@gmail.com>
3 months ago
copilot-swe-agent[bot]
b4f932a715
Fix test by making date sorting stable and updating golden files
...
Signed-off-by: Terry Howe <terrylhowe@gmail.com>
3 months ago
Terry Howe
8a73d97984
fix: make helm list show all by default
...
Signed-off-by: Terry Howe <terrylhowe@gmail.com>
3 months ago
Marcin Owsiany
269a32a6d2
test: protect unknown hook delete policies
...
Signed-off-by: Marcin Owsiany <porridge@redhat.com>
3 months ago
Dirk Müller
9cd40c612a
Avoid accessing .Items on nil object
...
When listing fails for whatever reason, the return value is nil, err.
so handle err explicitly.
Signed-off-by: Dirk Müller <dirk@dmllr.de>
3 months ago
Benoit Tigeot
06188f9dfe
Add test for isYamlFileExtension functions
...
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
3 months ago
Terry Howe
20eb6e9b04
fix: empty time values
...
Signed-off-by: Terry Howe <terrylhowe@gmail.com>
3 months ago
Matt Farina
fbf02e494e
Merge pull request #30980 from gjenkins8/gjenkins/cleanup_kubeclient_interfaces
...
cleanup: Remove/consolidate redundant kube client Interfaces
3 months ago
Matt Farina
78cd44bd75
Merge pull request #30712 from gjenkins8/gjenkins/cleanup_lint_template
...
cleanup: Remove extra lint/rules.Template functions
3 months ago
Matt Farina
24159ec8b6
Moving new default accessor functions to internal per feedback
...
Signed-off-by: Matt Farina <matt.farina@suse.com>
3 months ago