Commit graph

542 commits

Author SHA1 Message Date
Matheus Pimenta
787b61cedb
Revert "Consider GroupVersionKind when matching resources"
Signed-off-by: Matheus Pimenta <matheuscscp@gmail.com>
2026-01-29 06:04:56 +00:00
Austin Abro
ec0726523e
whitespace
Signed-off-by: Austin Abro <austinabro321@gmail.com>
2026-01-22 15:45:29 -05:00
Austin Abro
63b40a7a5e
use logger with waiter
Signed-off-by: Austin Abro <austinabro321@gmail.com>
2026-01-22 09:12:53 -05:00
Matheus Pimenta
b0b35f1231
feat(kstatus): fine-grained context options for waiting
Signed-off-by: Matheus Pimenta <matheuscscp@gmail.com>
2026-01-21 19:03:20 +00:00
Matheus Pimenta
bbec77c1f7
bugfix(kstatus): do not wait forever on failed resources
Signed-off-by: Matheus Pimenta <matheuscscp@gmail.com>
2026-01-17 12:18:16 +00:00
Evans Mungai
40a9de1086
Merge pull request #31412 from fmuyassarov/devel/rollback
Some checks failed
build-test / build (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
golangci-lint / golangci-lint (push) Has been cancelled
release / release (push) Has been cancelled
release / canary-release (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
Fix rollback for missing resources
2026-01-13 11:07:24 +00:00
Evans Mungai
f46f1ce55d
Update pkg/kube/statuswait.go
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
2026-01-12 18:32:31 +00:00
Matheus Pimenta
59ece92bed
pkg/kube: introduce support for custom kstatus readers
Signed-off-by: Matheus Pimenta <matheuscscp@gmail.com>
2026-01-12 18:16:26 +00:00
Feruzjon Muyassarov
374aeb4b4e
Fix rollback for missing resources
Signed-off-by: Feruzjon Muyassarov <feruzjon.muyassarov@est.tech>
2026-01-05 18:34:33 +02:00
George Jenkins
fa41d60d73
Merge pull request #31239 from StephanieHhnbrg/test-actions-pkg
Some checks are pending
build-test / build (push) Waiting to run
CodeQL / Analyze (push) Waiting to run
golangci-lint / golangci-lint (push) Waiting to run
release / release (push) Waiting to run
release / canary-release (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
Add tests to action package to improve coverage
2026-01-02 20:24:27 -08:00
Matt Farina
fe1c749183
Fixing failing tests for cli-tools update
Tests were failing for cli-utils watcher because upstream k8s made
changes that impacted cli-utils. In k8s WatchListClient is now
enabled by default. Fake clients used for testing don't know this
semantic. cli-utils leverages reflection in k8s to handle this.
The Helm tests didn't handle this well.

The tests are updated to use PrependReactor and PrependWatchReactor
in the same way that cli-utils does for testing. This works without
wrapping the client.

Signed-off-by: Matt Farina <matt.farina@suse.com>
2025-12-27 10:25:08 -05:00
George Jenkins
a15db7f087 Replace deprecated NewSimpleClientset
Signed-off-by: George Jenkins <gvjenkins@gmail.com>
2025-12-26 08:36:42 -08:00
George Jenkins
24e8297343
Merge pull request #31610 from mohsenmottaghi/fix-helm-4-watch-strategy
Some checks are pending
build-test / build (push) Waiting to run
CodeQL / Analyze (push) Waiting to run
golangci-lint / golangci-lint (push) Waiting to run
release / release (push) Waiting to run
release / canary-release (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
fix: use namespace-scoped watching to avoid cluster-wide LIST permiss…
2025-12-22 12:41:17 -08:00
Brenden Ehlers
1c119bcaa6 fix: add default casess to switch statements
Signed-off-by: Brenden Ehlers <brenden@theehlers.org>
2025-12-21 09:13:24 -07:00
Mohsen Mottaghi
d6b35cedeb
test(statuswait): fix Copilot code review suggestion for goroutine in tests
Signed-off-by: Mohsen Mottaghi <mohsenmottaghi@outlook.com>
2025-12-16 17:43:15 +03:30
Mohsen Mottaghi
a1543d5947
test(statuswait): add more tests suggested by Copilot code review
add missing coverage for the positive case where cluster-scoped resources (like ClusterRole or Namespace) should work correctly

Signed-off-by: Mohsen Mottaghi <mohsenmottaghi@outlook.com>
2025-12-16 17:33:29 +03:30
Mohsen Mottaghi
dd44f4ecd0
test(statuswait): add some tests for statuswait
Adding some tests for multi namespace deployment, simulate restrcited rbac access and mixed namespace scope and cluster scope resources

Signed-off-by: Mohsen Mottaghi <mohsenmottaghi@outlook.com>
2025-12-16 13:55:07 +03:30
Mohsen Mottaghi
3dd54ed0b6
fix: use namespace-scoped watching to avoid cluster-wide LIST permissions
Signed-off-by: Mohsen Mottaghi <mohsenmottaghi@outlook.com>
2025-12-16 13:55:02 +03:30
Robert Sirchia
4cf7d8d025
Merge pull request #31641 from wangjingcun/main
chore: fix some comments to improve readability
2025-12-12 19:34:20 +01:00
wangjingcun
858cf31583 chore: fix some comments to improve readability
Signed-off-by: wangjingcun <wangjingcun@aliyun.com>
2025-12-12 12:01:35 +08:00
Mads Jensen
a18e59e465 Enable the sloglint linter
Signed-off-by: Mads Jensen <atombrella@users.noreply.github.com>
2025-12-09 08:24:36 +01:00
Stephanie Hohenberg
31131cff9b Add tests to action package to improve coverage
Signed-off-by: Stephanie Hohenberg <stephanie.hohenberg@gmail.com>
2025-12-03 13:17:58 +05:30
Matt Farina
61d289c119
Merge pull request #31518 from gjenkins8/gjenkins/fix_update_create
Some checks failed
build-test / build (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
golangci-lint / golangci-lint (push) Has been cancelled
release / release (push) Has been cancelled
release / canary-release (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
fix: Use server-side apply for object create during update
2025-11-21 17:13:56 -05:00
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>
2025-11-18 22:25:34 +05:30
George Jenkins
f8a49f1852 fixup test
Signed-off-by: George Jenkins <gvjenkins@gmail.com>
2025-11-17 08:31:56 -08:00
George Jenkins
a9cdc78116 logs
Signed-off-by: George Jenkins <gvjenkins@gmail.com>
2025-11-17 08:08:23 -08:00
George Jenkins
b1a976073f fix
Signed-off-by: George Jenkins <gvjenkins@gmail.com>
2025-11-17 08:02:46 -08:00
George Jenkins
18616e6ce9 fix: Use server-side apply for object create during update
Signed-off-by: George Jenkins <gvjenkins@gmail.com>
2025-11-15 20:37:30 -05:00
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>
2025-11-10 18:52:44 +01:00
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>
2025-11-10 18:40:24 +01:00
Benoit Tigeot
11128659aa
Provide more help for SDK user when setting up WaitStrategy
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2025-11-10 18:39:56 +01:00
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>
2025-11-10 18:39:54 +01:00
Matheus Pimenta
efc1702657
Introduce a context for canceling wait operations
Signed-off-by: Matheus Pimenta <matheuscscp@gmail.com>
2025-11-01 17:55:33 +00:00
Evans Mungai
b6eca1c0f1
Refactor logging functionality to use slog.Handler
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
2025-10-22 15:26:48 +01:00
Evans Mungai
5ab4ca5490
Embed logging functionality to DRY code
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
2025-10-22 13:55:12 +01:00
Evans Mungai
50e43f4017
nil logger should be handled by discard handler
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
2025-10-22 00:40:03 +01:00
Evans Mungai
7a5816b106
Self review changes
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
2025-10-21 23:53:09 +01:00
Evans Mungai
0f90c83118
Merge remote-tracking branch 'upstream/main' into em/reinstate-logger-param 2025-10-21 23:43:10 +01:00
Evans Mungai
b1d4dc680d
feat: reinstate logger parameter to actions package
Fixes: #31399

Signed-off-by: Evans Mungai <mbuevans@gmail.com>
2025-10-21 22:48:51 +01:00
Matt Farina
752354074c
Merge pull request #31393 from benoittgt/12299
Return errors during upgrade when the deletion of resources fails
2025-10-21 15:29:58 -04:00
Jesse Simpson
3f860e83fb
fix: use empty results instead of nil
Signed-off-by: Jesse Simpson <jesse.simpson36@gmail.com>
2025-10-18 09:12:58 -04:00
Jesse Simpson
96b4c363c8
fix: Update returns nil on error, test should reflect this
Signed-off-by: Jesse Simpson <jesse.simpson36@gmail.com>
2025-10-17 23:25:21 -04:00
Benoit Tigeot
7097c8e2e5
Replicate as unit test case where we fail once a resource deletion
Signed-off-by: Benoit Tigeot <benoit.tigeot@lifen.fr>
2025-10-15 00:33:15 +02:00
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>
2025-10-15 00:11:33 +02:00
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>
2025-10-13 09:36:33 +02:00
Matt Farina
fbf02e494e
Merge pull request #30980 from gjenkins8/gjenkins/cleanup_kubeclient_interfaces
cleanup: Remove/consolidate redundant kube client Interfaces
2025-10-10 17:05:09 -04:00
George Jenkins
c75026c318 doc string
Signed-off-by: George Jenkins <gvjenkins@gmail.com>
2025-10-09 10:27:06 -07:00
George Jenkins
1581eaa034
Apply suggestions from code review
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: George Jenkins <gvjenkins@gmail.com>
2025-10-09 10:26:24 -07:00
George Jenkins
b861de5696
Update pkg/kube/interface.go
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: George Jenkins <gvjenkins@gmail.com>
2025-10-09 10:24:49 -07:00
George Jenkins
61e3d95a94
Merge pull request #31143 from TerryHowe/fix-remove-redundant-error-check
fix: remove redundant error check
2025-09-25 08:12:37 -07:00