Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package helmfile for openSUSE:Factory 
checked in at 2025-12-20 21:46:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/helmfile (Old)
 and      /work/SRC/openSUSE:Factory/.helmfile.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "helmfile"

Sat Dec 20 21:46:28 2025 rev:80 rq:1323757 version:1.2.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/helmfile/helmfile.changes        2025-11-28 
16:55:19.252320172 +0100
+++ /work/SRC/openSUSE:Factory/.helmfile.new.1928/helmfile.changes      
2025-12-20 21:48:36.308437710 +0100
@@ -1,0 +2,50 @@
+Sat Dec 20 07:41:55 UTC 2025 - Manfred Hollstein <[email protected]>
+
+- Update to version 1.2.3:
+  * build(deps): bump github.com/aws/aws-sdk-go-v2/config from
+    1.32.2 to 1.32.3 by @dependabot[bot] in #2308
+  * build(deps): bump github.com/spf13/cobra from 1.10.1 to 1.10.2
+    by @dependabot[bot] in #2310
+  * build(deps): bump github.com/aws/aws-sdk-go-v2/service/s3 from
+    1.92.1 to 1.93.0 by @dependabot[bot] in #2307
+  * Add parameter to render helmfile as go template without .gotmpl
+    extension by @ronaldour in #2312
+  * build(deps): bump golang.org/x/sync from 0.18.0 to 0.19.0 by
+    @dependabot[bot] in #2315
+  * build(deps): bump github.com/aws/aws-sdk-go-v2/service/s3 from
+    1.93.0 to 1.93.2 by @dependabot[bot] in #2323
+  * build(deps): bump k8s.io/apimachinery from 0.34.2 to 0.34.3
+    by @dependabot[bot] in #2322
+  * build(deps): bump golang.org/x/term from 0.37.0 to 0.38.0 by
+    @dependabot[bot] in #2317
+  * build(deps): bump k8s.io/client-go from 0.34.2 to 0.34.3 by
+    @dependabot[bot] in #2321
+  * build(deps): bump github.com/aws/aws-sdk-go-v2/config from
+    1.32.3 to 1.32.5 by @dependabot[bot] in #2320
+  * build(deps): bump helm.sh/helm/v3 from 3.19.2 to 3.19.3 by
+    @dependabot[bot] in #2325
+  * build(deps): bump helm.sh/helm/v4 from 4.0.1 to 4.0.2 by
+    @dependabot[bot] in #2326
+  * build(deps): bump actions/upload-artifact from 5 to 6 by
+    @dependabot[bot] in #2331
+  * build(deps): bump helm.sh/helm/v3 from 3.19.3 to 3.19.4 by
+    @dependabot[bot] in #2328
+  * build(deps): bump actions/download-artifact from 6 to 7 by
+    @dependabot[bot] in #2332
+  * build(deps): bump dessant/lock-threads from 5 to 6 by
+    @dependabot[bot] in #2330
+  * build(deps): bump helm.sh/helm/v4 from 4.0.3 to 4.0.4 by
+    @dependabot[bot] in #2329
+  * build(deps): bump github.com/aws/aws-sdk-go-v2/service/s3
+    from 1.93.2 to 1.94.0 by @dependabot[bot] in #2333
+  * bump helm version to 4.0.4 by @yxxhero in #2335
+  * build(deps): bump github.com/aws/aws-sdk-go-v2/config from
+    1.32.5 to 1.32.6 by @dependabot[bot] in #2336
+  * build(deps): bump github.com/zclconf/go-cty-yaml from 1.1.0
+    to 1.2.0 by @dependabot[bot] in #2340
+  * build(deps): bump k8s.io/client-go from 0.34.3 to 0.35.0 by
+    @dependabot[bot] in #2338
+  * fix: rewrite relative file:// chart dependencies to absolute
+    paths by @sstarcher in #2334
+
+-------------------------------------------------------------------

Old:
----
  helmfile-1.2.2.tar.gz

New:
----
  helmfile-1.2.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ helmfile.spec ++++++
--- /var/tmp/diff_new_pack.x7U2Vn/_old  2025-12-20 21:48:37.416483683 +0100
+++ /var/tmp/diff_new_pack.x7U2Vn/_new  2025-12-20 21:48:37.420483849 +0100
@@ -17,9 +17,9 @@
 #
 
 
-%define git_commit 97779914ec55b370623fb8000fc1c737a974c060
+%define git_commit 61f4a316a643f86ba86f9e9d683d9a08003544f0
 Name:           helmfile
-Version:        1.2.2
+Version:        1.2.3
 Release:        0
 Summary:        Deploy Kubernetes Helm Charts
 License:        MIT
@@ -28,7 +28,7 @@
 Source:         %{name}-%{version}.tar.gz
 Source1:        vendor.tar.gz
 Requires:       helm >= 3.13.1
-Recommends:     helm >= 3.14.3
+Recommends:     helm >= 3.19.4
 BuildRequires:  golang-packaging
 BuildRequires:  xz
 BuildRequires:  golang(API) >= 1.25

++++++ _service ++++++
--- /var/tmp/diff_new_pack.x7U2Vn/_old  2025-12-20 21:48:37.468485841 +0100
+++ /var/tmp/diff_new_pack.x7U2Vn/_new  2025-12-20 21:48:37.476486173 +0100
@@ -5,7 +5,7 @@
     <param name="exclude">.git</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
-    <param name="revision">v1.2.2</param>
+    <param name="revision">v1.2.3</param>
     <param name="changesgenerate">enable</param>
     <param name="changesauthor">[email protected]</param>
   </service>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.x7U2Vn/_old  2025-12-20 21:48:37.500487168 +0100
+++ /var/tmp/diff_new_pack.x7U2Vn/_new  2025-12-20 21:48:37.504487334 +0100
@@ -1,7 +1,7 @@
 <servicedata>
 <service name="tar_scm">
   <param name="url">https://github.com/helmfile/helmfile.git</param>
-  <param 
name="changesrevision">97779914ec55b370623fb8000fc1c737a974c060</param>
+  <param 
name="changesrevision">61f4a316a643f86ba86f9e9d683d9a08003544f0</param>
 </service>
 </servicedata>
 

++++++ helmfile-1.2.2.tar.gz -> helmfile-1.2.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-1.2.2/Dockerfile 
new/helmfile-1.2.3/Dockerfile
--- old/helmfile-1.2.2/Dockerfile       2025-11-28 01:46:37.000000000 +0100
+++ new/helmfile-1.2.3/Dockerfile       2025-12-20 02:08:39.000000000 +0100
@@ -30,7 +30,7 @@
 ARG HELM_DATA_HOME="${HOME}/.local/share/helm"
 ENV HELM_DATA_HOME="${HELM_DATA_HOME}"
 
-ARG HELM_VERSION="v4.0.1"
+ARG HELM_VERSION="v4.0.4"
 ENV HELM_VERSION="${HELM_VERSION}"
 ENV HELM_BIN="/usr/local/bin/helm"
 ARG HELM_LOCATION="https://get.helm.sh";
@@ -39,8 +39,8 @@
     curl --retry 5 --retry-connrefused -LO "${HELM_LOCATION}/${HELM_FILENAME}" 
&& \
     echo Verifying ${HELM_FILENAME}... && \
     case ${TARGETPLATFORM} in \
-    "linux/amd64")  
HELM_SHA256="e0365548f01ed52a58a1181ad310b604a3244f59257425bb1739499372bdff60"  
;; \
-    "linux/arm64")  
HELM_SHA256="959fa52d34e2e1f0154e3220ed5f22263c8593447647a43af07890bba4b004d1"  
;; \
+    "linux/amd64")  
HELM_SHA256="29454bc351f4433e66c00f5d37841627cbbcc02e4c70a6d796529d355237671c"  
;; \
+    "linux/arm64")  
HELM_SHA256="16b88acc6503d646b7537a298e7389bef469c5cc9ebadf727547abe9f6a35903"  
;; \
     esac && \
     echo "${HELM_SHA256}  ${HELM_FILENAME}" | sha256sum -c && \
     echo Extracting ${HELM_FILENAME}... && \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-1.2.2/Dockerfile.debian-stable-slim 
new/helmfile-1.2.3/Dockerfile.debian-stable-slim
--- old/helmfile-1.2.2/Dockerfile.debian-stable-slim    2025-11-28 
01:46:37.000000000 +0100
+++ new/helmfile-1.2.3/Dockerfile.debian-stable-slim    2025-12-20 
02:08:39.000000000 +0100
@@ -38,7 +38,7 @@
 ARG HELM_DATA_HOME="${HOME}/.local/share/helm"
 ENV HELM_DATA_HOME="${HELM_DATA_HOME}"
 
-ARG HELM_VERSION="v4.0.1"
+ARG HELM_VERSION="v4.0.4"
 ENV HELM_VERSION="${HELM_VERSION}"
 ENV HELM_BIN="/usr/local/bin/helm"
 ARG HELM_LOCATION="https://get.helm.sh";
@@ -47,8 +47,8 @@
     curl --retry 5 --retry-connrefused -LO "${HELM_LOCATION}/${HELM_FILENAME}" 
&& \
     echo Verifying ${HELM_FILENAME}... && \
     case ${TARGETPLATFORM} in \
-    "linux/amd64")  
HELM_SHA256="e0365548f01ed52a58a1181ad310b604a3244f59257425bb1739499372bdff60"  
;; \
-    "linux/arm64")  
HELM_SHA256="959fa52d34e2e1f0154e3220ed5f22263c8593447647a43af07890bba4b004d1"  
;; \
+    "linux/amd64")  
HELM_SHA256="29454bc351f4433e66c00f5d37841627cbbcc02e4c70a6d796529d355237671c"  
;; \
+    "linux/arm64")  
HELM_SHA256="16b88acc6503d646b7537a298e7389bef469c5cc9ebadf727547abe9f6a35903"  
;; \
     esac && \
     echo "${HELM_SHA256}  ${HELM_FILENAME}" | sha256sum -c && \
     echo Extracting ${HELM_FILENAME}... && \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-1.2.2/Dockerfile.ubuntu 
new/helmfile-1.2.3/Dockerfile.ubuntu
--- old/helmfile-1.2.2/Dockerfile.ubuntu        2025-11-28 01:46:37.000000000 
+0100
+++ new/helmfile-1.2.3/Dockerfile.ubuntu        2025-12-20 02:08:39.000000000 
+0100
@@ -38,7 +38,7 @@
 ARG HELM_DATA_HOME="${HOME}/.local/share/helm"
 ENV HELM_DATA_HOME="${HELM_DATA_HOME}"
 
-ARG HELM_VERSION="v4.0.1"
+ARG HELM_VERSION="v4.0.4"
 ENV HELM_VERSION="${HELM_VERSION}"
 ENV HELM_BIN="/usr/local/bin/helm"
 ARG HELM_LOCATION="https://get.helm.sh";
@@ -47,8 +47,8 @@
     curl --retry 5 --retry-connrefused -LO "${HELM_LOCATION}/${HELM_FILENAME}" 
&& \
     echo Verifying ${HELM_FILENAME}... && \
     case ${TARGETPLATFORM} in \
-    "linux/amd64")  
HELM_SHA256="e0365548f01ed52a58a1181ad310b604a3244f59257425bb1739499372bdff60"  
;; \
-    "linux/arm64")  
HELM_SHA256="959fa52d34e2e1f0154e3220ed5f22263c8593447647a43af07890bba4b004d1"  
;; \
+    "linux/amd64")  
HELM_SHA256="29454bc351f4433e66c00f5d37841627cbbcc02e4c70a6d796529d355237671c"  
;; \
+    "linux/arm64")  
HELM_SHA256="16b88acc6503d646b7537a298e7389bef469c5cc9ebadf727547abe9f6a35903"  
;; \
     esac && \
     echo "${HELM_SHA256}  ${HELM_FILENAME}" | sha256sum -c && \
     echo Extracting ${HELM_FILENAME}... && \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-1.2.2/docs/index.md 
new/helmfile-1.2.3/docs/index.md
--- old/helmfile-1.2.2/docs/index.md    2025-11-28 01:46:37.000000000 +0100
+++ new/helmfile-1.2.3/docs/index.md    2025-12-20 02:08:39.000000000 +0100
@@ -586,6 +586,7 @@
 * `HELMFILE_CACHE_HOME` - specify directory to store cached files for remote 
operations
 * `HELMFILE_FILE_PATH` - specify the path to the helmfile.yaml file
 * `HELMFILE_INTERACTIVE` - enable interactive mode, expecting `true` lower 
case. The same as `--interactive` CLI flag
+* `HELMFILE_RENDER_YAML` - force helmfile.yaml to be rendered as a Go template 
regardless of file extension, expecting `true` lower case. Useful for migrating 
from v0 to v1 without renaming files to `.gotmpl`
 
 ## CLI Reference
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-1.2.2/go.mod new/helmfile-1.2.3/go.mod
--- old/helmfile-1.2.2/go.mod   2025-11-28 01:46:37.000000000 +0100
+++ new/helmfile-1.2.3/go.mod   2025-12-20 02:08:39.000000000 +0100
@@ -6,8 +6,8 @@
        dario.cat/mergo v1.0.2
        github.com/Masterminds/semver/v3 v3.4.0
        github.com/Masterminds/sprig/v3 v3.3.0
-       github.com/aws/aws-sdk-go-v2/config v1.32.2
-       github.com/aws/aws-sdk-go-v2/service/s3 v1.92.1
+       github.com/aws/aws-sdk-go-v2/config v1.32.6
+       github.com/aws/aws-sdk-go-v2/service/s3 v1.94.0
        github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
        github.com/go-test/deep v1.1.1
        github.com/gofrs/flock v0.13.0
@@ -18,24 +18,25 @@
        github.com/hashicorp/hcl/v2 v2.24.0
        github.com/helmfile/chartify v0.26.1
        github.com/helmfile/vals v0.42.6
-       github.com/spf13/cobra v1.10.1
+       github.com/spf13/cobra v1.10.2
        github.com/spf13/pflag v1.0.10
        github.com/stretchr/testify v1.11.1
        github.com/tatsushid/go-prettytable v0.0.0-20141013043238-ed2d14c29939
        github.com/tj/assert v0.0.3
        github.com/variantdev/dag v1.1.0
        github.com/zclconf/go-cty v1.17.0
-       github.com/zclconf/go-cty-yaml v1.1.0
+       github.com/zclconf/go-cty-yaml v1.2.0
        go.szostok.io/version v1.2.0
        go.uber.org/zap v1.27.1
        go.yaml.in/yaml/v2 v2.4.3
        go.yaml.in/yaml/v3 v3.0.4
-       golang.org/x/sync v0.18.0
-       golang.org/x/term v0.37.0
-       helm.sh/helm/v3 v3.19.2
-       helm.sh/helm/v4 v4.0.1
-       k8s.io/apimachinery v0.34.2
-       k8s.io/client-go v0.34.2
+       golang.org/x/sync v0.19.0
+       golang.org/x/term v0.38.0
+       gopkg.in/yaml.v3 v3.0.1
+       helm.sh/helm/v3 v3.19.4
+       helm.sh/helm/v4 v4.0.4
+       k8s.io/apimachinery v0.35.0
+       k8s.io/client-go v0.35.0
 )
 
 require (
@@ -96,7 +97,7 @@
        go.uber.org/atomic v1.9.0 // indirect
        golang.org/x/net v0.47.0 // indirect
        golang.org/x/oauth2 v0.33.0 // indirect
-       golang.org/x/sys v0.38.0 // indirect
+       golang.org/x/sys v0.39.0 // indirect
        golang.org/x/text v0.31.0 // indirect
        golang.org/x/time v0.14.0 // indirect
        google.golang.org/api v0.253.0 // indirect
@@ -104,7 +105,7 @@
        google.golang.org/grpc v1.76.0 // indirect
        google.golang.org/protobuf v1.36.10 // indirect
        gopkg.in/ini.v1 v1.67.0 // indirect
-       sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
+       sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
        sigs.k8s.io/yaml v1.6.0 // indirect
 )
 
@@ -147,27 +148,27 @@
        github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de // 
indirect
        github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // 
indirect
        github.com/atotto/clipboard v0.1.4 // indirect
-       github.com/aws/aws-sdk-go-v2 v1.40.0 // indirect
-       github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.3 // indirect
-       github.com/aws/aws-sdk-go-v2/credentials v1.19.2 // indirect
-       github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.14 // indirect
+       github.com/aws/aws-sdk-go-v2 v1.41.0 // indirect
+       github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4 // indirect
+       github.com/aws/aws-sdk-go-v2/credentials v1.19.6 // indirect
+       github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.16 // indirect
        github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.19.9 // indirect
-       github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.14 // indirect
-       github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.14 // indirect
+       github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.16 // indirect
+       github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.16 // indirect
        github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect
-       github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.14 // indirect
-       github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 
// indirect
-       github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.5 // 
indirect
-       github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14 // 
indirect
-       github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.14 // 
indirect
+       github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.16 // indirect
+       github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 
// indirect
+       github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.7 // 
indirect
+       github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.16 // 
indirect
+       github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.16 // 
indirect
        github.com/aws/aws-sdk-go-v2/service/kms v1.46.1 // indirect
        github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.39.7 // indirect
-       github.com/aws/aws-sdk-go-v2/service/signin v1.0.2 // indirect
+       github.com/aws/aws-sdk-go-v2/service/signin v1.0.4 // indirect
        github.com/aws/aws-sdk-go-v2/service/ssm v1.66.2 // indirect
-       github.com/aws/aws-sdk-go-v2/service/sso v1.30.5 // indirect
-       github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.10 // indirect
-       github.com/aws/aws-sdk-go-v2/service/sts v1.41.2 // indirect
-       github.com/aws/smithy-go v1.23.2 // indirect
+       github.com/aws/aws-sdk-go-v2/service/sso v1.30.8 // indirect
+       github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.12 // indirect
+       github.com/aws/aws-sdk-go-v2/service/sts v1.41.5 // indirect
+       github.com/aws/smithy-go v1.24.0 // indirect
        github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
        github.com/blang/semver/v4 v4.0.0 // indirect
        github.com/cenkalti/backoff/v4 v4.3.0 // indirect
@@ -181,7 +182,7 @@
        github.com/containerd/platforms v0.2.1 // indirect
        github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
        github.com/cyberark/conjur-api-go v0.13.9 // indirect
-       github.com/cyphar/filepath-securejoin v0.6.0 // indirect
+       github.com/cyphar/filepath-securejoin v0.6.1 // indirect
        github.com/danieljoos/wincred v1.2.2 // indirect
        github.com/dustin/go-humanize v1.0.1 // indirect
        github.com/dylibso/observe-sdk/go v0.0.0-20240819160327-2d926c5d788a // 
indirect
@@ -319,20 +320,19 @@
        golang.org/x/tools v0.38.0 // indirect
        google.golang.org/genproto/googleapis/api 
v0.0.0-20250818200422-3122310a409c // indirect
        google.golang.org/genproto/googleapis/rpc 
v0.0.0-20251014184007-4626949a642f // indirect
-       gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
+       gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
        gopkg.in/gookit/color.v1 v1.1.6 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/yaml.v2 v2.4.0 // indirect
-       gopkg.in/yaml.v3 v3.0.1 // indirect
-       k8s.io/api v0.34.2 // indirect
-       k8s.io/apiextensions-apiserver v0.34.1 // indirect
-       k8s.io/apiserver v0.34.1 // indirect
-       k8s.io/cli-runtime v0.34.1 // indirect
-       k8s.io/component-base v0.34.1 // indirect
+       k8s.io/api v0.35.0 // indirect
+       k8s.io/apiextensions-apiserver v0.34.2 // indirect
+       k8s.io/apiserver v0.34.2 // indirect
+       k8s.io/cli-runtime v0.34.2 // indirect
+       k8s.io/component-base v0.34.2 // indirect
        k8s.io/klog/v2 v2.130.1 // indirect
-       k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect
-       k8s.io/kubectl v0.34.1 // indirect
-       k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 // indirect
+       k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 // indirect
+       k8s.io/kubectl v0.34.2 // indirect
+       k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 // indirect
        oras.land/oras-go/v2 v2.6.0 // indirect
        sigs.k8s.io/controller-runtime v0.22.3 // indirect
        sigs.k8s.io/kustomize/api v0.20.1 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-1.2.2/go.sum new/helmfile-1.2.3/go.sum
--- old/helmfile-1.2.2/go.sum   2025-11-28 01:46:37.000000000 +0100
+++ new/helmfile-1.2.3/go.sum   2025-12-20 02:08:39.000000000 +0100
@@ -141,52 +141,52 @@
 github.com/atotto/clipboard v0.1.4/go.mod 
h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
 github.com/aws/aws-sdk-go v1.55.8 
h1:JRmEUbU52aJQZ2AjX4q4Wu7t4uZjOu71uyNmaWlUkJQ=
 github.com/aws/aws-sdk-go v1.55.8/go.mod 
h1:ZkViS9AqA6otK+JBBNH2++sx1sgxrPKcSzPPvQkUtXk=
-github.com/aws/aws-sdk-go-v2 v1.40.0 
h1:/WMUA0kjhZExjOQN2z3oLALDREea1A7TobfuiBrKlwc=
-github.com/aws/aws-sdk-go-v2 v1.40.0/go.mod 
h1:c9pm7VwuW0UPxAEYGyTmyurVcNrbF6Rt/wixFqDhcjE=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.3 
h1:DHctwEM8P8iTXFxC/QK0MRjwEpWQeM9yzidCRjldUz0=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.3/go.mod 
h1:xdCzcZEtnSTKVDOmUZs4l/j3pSV6rpo1WXl5ugNsL8Y=
-github.com/aws/aws-sdk-go-v2/config v1.32.2 
h1:4liUsdEpUUPZs5WVapsJLx5NPmQhQdez7nYFcovrytk=
-github.com/aws/aws-sdk-go-v2/config v1.32.2/go.mod 
h1:l0hs06IFz1eCT+jTacU/qZtC33nvcnLADAPL/XyrkZI=
-github.com/aws/aws-sdk-go-v2/credentials v1.19.2 
h1:qZry8VUyTK4VIo5aEdUcBjPZHL2v4FyQ3QEOaWcFLu4=
-github.com/aws/aws-sdk-go-v2/credentials v1.19.2/go.mod 
h1:YUqm5a1/kBnoK+/NY5WEiMocZihKSo15/tJdmdXnM5g=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.14 
h1:WZVR5DbDgxzA0BJeudId89Kmgy6DIU4ORpxwsVHz0qA=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.14/go.mod 
h1:Dadl9QO0kHgbrH1GRqGiZdYtW5w+IXXaBNCHTIaheM4=
+github.com/aws/aws-sdk-go-v2 v1.41.0 
h1:tNvqh1s+v0vFYdA1xq0aOJH+Y5cRyZ5upu6roPgPKd4=
+github.com/aws/aws-sdk-go-v2 v1.41.0/go.mod 
h1:MayyLB8y+buD9hZqkCW3kX1AKq07Y5pXxtgB+rRFhz0=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4 
h1:489krEF9xIGkOaaX3CE/Be2uWjiXrkCH6gUX+bZA/BU=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4/go.mod 
h1:IOAPF6oT9KCsceNTvvYMNHy0+kMF8akOjeDvPENWxp4=
+github.com/aws/aws-sdk-go-v2/config v1.32.6 
h1:hFLBGUKjmLAekvi1evLi5hVvFQtSo3GYwi+Bx4lpJf8=
+github.com/aws/aws-sdk-go-v2/config v1.32.6/go.mod 
h1:lcUL/gcd8WyjCrMnxez5OXkO3/rwcNmvfno62tnXNcI=
+github.com/aws/aws-sdk-go-v2/credentials v1.19.6 
h1:F9vWao2TwjV2MyiyVS+duza0NIRtAslgLUM0vTA1ZaE=
+github.com/aws/aws-sdk-go-v2/credentials v1.19.6/go.mod 
h1:SgHzKjEVsdQr6Opor0ihgWtkWdfRAIwxYzSJ8O85VHY=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.16 
h1:80+uETIWS1BqjnN9uJ0dBUaETh+P1XwFy5vwHwK5r9k=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.16/go.mod 
h1:wOOsYuxYuB/7FlnVtzeBYRcjSRtQpAW0hCP7tIULMwo=
 github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.19.9 
h1:Z1897HnnfLLgbs3pcUv8xLvtbai9TEfPUZfA0BFw968=
 github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.19.9/go.mod 
h1:8oVESJIPBYGWdZhaHcIvTm7BnI6hbsR3ggKn0uyRMhk=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.14 
h1:PZHqQACxYb8mYgms4RZbhZG0a7dPW06xOjmaH0EJC/I=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.14/go.mod 
h1:VymhrMJUWs69D8u0/lZ7jSB6WgaG/NqHi3gX0aYf6U0=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.14 
h1:bOS19y6zlJwagBfHxs0ESzr1XCOU2KXJCWcq3E2vfjY=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.14/go.mod 
h1:1ipeGBMAxZ0xcTm6y6paC2C/J6f6OO7LBODV9afuAyM=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.16 
h1:rgGwPzb82iBYSvHMHXc8h9mRoOUBZIGFgKb9qniaZZc=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.16/go.mod 
h1:L/UxsGeKpGoIj6DxfhOWHWQ/kGKcd4I1VncE4++IyKA=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.16 
h1:1jtGzuV7c82xnqOVfx2F0xmJcOw5374L7N6juGW6x6U=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.16/go.mod 
h1:M2E5OQf+XLe+SZGmmpaI2yy+J326aFf6/+54PoxSANc=
 github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 
h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk=
 github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod 
h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc=
-github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.14 
h1:ITi7qiDSv/mSGDSWNpZ4k4Ve0DQR6Ug2SJQ8zEHoDXg=
-github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.14/go.mod 
h1:k1xtME53H1b6YpZt74YmwlONMWf4ecM+lut1WQLAF/U=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 
h1:x2Ibm/Af8Fi+BH+Hsn9TXGdT+hKbDd5XOTZxTMxDk7o=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3/go.mod 
h1:IW1jwyrQgMdhisceG8fQLmQIydcT/jWY21rFhzgaKwo=
-github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.5 
h1:Hjkh7kE6D81PgrHlE/m9gx+4TyyeLHuY8xJs7yXN5C4=
-github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.5/go.mod 
h1:nPRXgyCfAurhyaTMoBMwRBYBhaHI4lNPAnJmjM0Tslc=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14 
h1:FIouAnCE46kyYqyhs0XEBDFFSREtdnr8HQuLPQPLCrY=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.14/go.mod 
h1:UTwDc5COa5+guonQU8qBikJo1ZJ4ln2r1MkF7Dqag1E=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.14 
h1:FzQE21lNtUor0Fb7QNgnEyiRCBlolLTX/Z1j65S7teM=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.14/go.mod 
h1:s1ydyWG9pm3ZwmmYN21HKyG9WzAZhYVW85wMHs5FV6w=
+github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.16 
h1:CjMzUs78RDDv4ROu3JnJn/Ig1r6ZD7/T2DXLLRpejic=
+github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.16/go.mod 
h1:uVW4OLBqbJXSHJYA9svT9BluSvvwbzLQ2Crf6UPzR3c=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 
h1:0ryTNEdJbzUCEWkVXEXoqlXV72J5keC1GvILMOuD00E=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4/go.mod 
h1:HQ4qwNZh32C3CBeO6iJLQlgtMzqeG17ziAA/3KDJFow=
+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.7 
h1:DIBqIrJ7hv+e4CmIk2z3pyKT+3B6qVMgRsawHiR3qso=
+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.7/go.mod 
h1:vLm00xmBke75UmpNvOcZQ/Q30ZFjbczeLFqGx5urmGo=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.16 
h1:oHjJHeUy0ImIV0bsrX0X91GkV5nJAyv1l1CC9lnO0TI=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.16/go.mod 
h1:iRSNGgOYmiYwSCXxXaKb9HfOEj40+oTKn8pTxMlYkRM=
+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.16 
h1:NSbvS17MlI2lurYgXnCOLvCFX38sBW4eiVER7+kkgsU=
+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.16/go.mod 
h1:SwT8Tmqd4sA6G1qaGdzWCJN99bUmPGHfRwwq3G5Qb+A=
 github.com/aws/aws-sdk-go-v2/service/kms v1.46.1 
h1:zbNE7uLqCc9vLYV6p/wv0h05WmYStXO2uXFE+cFvvYA=
 github.com/aws/aws-sdk-go-v2/service/kms v1.46.1/go.mod 
h1:YXPskkMuiMgp6qUG96NSTl7UpideOQT/Kx0u9Y1MKn0=
-github.com/aws/aws-sdk-go-v2/service/s3 v1.92.1 
h1:OgQy/+0+Kc3khtqiEOk23xQAglXi3Tj0y5doOxbi5tg=
-github.com/aws/aws-sdk-go-v2/service/s3 v1.92.1/go.mod 
h1:wYNqY3L02Z3IgRYxOBPH9I1zD9Cjh9hI5QOy/eOjQvw=
+github.com/aws/aws-sdk-go-v2/service/s3 v1.94.0 
h1:SWTxh/EcUCDVqi/0s26V6pVUq0BBG7kx0tDTmF/hCgA=
+github.com/aws/aws-sdk-go-v2/service/s3 v1.94.0/go.mod 
h1:79S2BdqCJpScXZA2y+cpZuocWsjGjJINyXnOsf5DTz8=
 github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.39.7 
h1:ac9qk31MWmUlUci1tthz0iREvkjFktEeGaDF1fAgeCU=
 github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.39.7/go.mod 
h1:A3WcpfEY2lhQvpnS6SJbMfljJuskxIKIVDcuYbIbXeE=
-github.com/aws/aws-sdk-go-v2/service/signin v1.0.2 
h1:MxMBdKTYBjPQChlJhi4qlEueqB1p1KcbTEa7tD5aqPs=
-github.com/aws/aws-sdk-go-v2/service/signin v1.0.2/go.mod 
h1:iS6EPmNeqCsGo+xQmXv0jIMjyYtQfnwg36zl2FwEouk=
+github.com/aws/aws-sdk-go-v2/service/signin v1.0.4 
h1:HpI7aMmJ+mm1wkSHIA2t5EaFFv5EFYXePW30p1EIrbQ=
+github.com/aws/aws-sdk-go-v2/service/signin v1.0.4/go.mod 
h1:C5RdGMYGlfM0gYq/tifqgn4EbyX99V15P2V3R+VHbQU=
 github.com/aws/aws-sdk-go-v2/service/ssm v1.66.2 
h1:f1d7XwtcPywunzl/2vFZ9nxumsvhCjKVaFsEy7kHQDE=
 github.com/aws/aws-sdk-go-v2/service/ssm v1.66.2/go.mod 
h1:CpiCR+ZLofnmhb0zRIq2FxVgfKIdevx43rIENOgN1vY=
-github.com/aws/aws-sdk-go-v2/service/sso v1.30.5 
h1:ksUT5KtgpZd3SAiFJNJ0AFEJVva3gjBmN7eXUZjzUwQ=
-github.com/aws/aws-sdk-go-v2/service/sso v1.30.5/go.mod 
h1:av+ArJpoYf3pgyrj6tcehSFW+y9/QvAY8kMooR9bZCw=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.10 
h1:GtsxyiF3Nd3JahRBJbxLCCdYW9ltGQYrFWg8XdkGDd8=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.10/go.mod 
h1:/j67Z5XBVDx8nZVp9EuFM9/BS5dvBznbqILGuu73hug=
-github.com/aws/aws-sdk-go-v2/service/sts v1.41.2 
h1:a5UTtD4mHBU3t0o6aHQZFJTNKVfxFWfPX7J0Lr7G+uY=
-github.com/aws/aws-sdk-go-v2/service/sts v1.41.2/go.mod 
h1:6TxbXoDSgBQ225Qd8Q+MbxUxUh6TtNKwbRt/EPS9xso=
-github.com/aws/smithy-go v1.23.2 
h1:Crv0eatJUQhaManss33hS5r40CG3ZFH+21XSkqMrIUM=
-github.com/aws/smithy-go v1.23.2/go.mod 
h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
+github.com/aws/aws-sdk-go-v2/service/sso v1.30.8 
h1:aM/Q24rIlS3bRAhTyFurowU8A0SMyGDtEOY/l/s/1Uw=
+github.com/aws/aws-sdk-go-v2/service/sso v1.30.8/go.mod 
h1:+fWt2UHSb4kS7Pu8y+BMBvJF0EWx+4H0hzNwtDNRTrg=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.12 
h1:AHDr0DaHIAo8c9t1emrzAlVDFp+iMMKnPdYy6XO4MCE=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.12/go.mod 
h1:GQ73XawFFiWxyWXMHWfhiomvP3tXtdNar/fi8z18sx0=
+github.com/aws/aws-sdk-go-v2/service/sts v1.41.5 
h1:SciGFVNZ4mHdm7gpD1dgZYnCuVdX1s+lFTg4+4DOy70=
+github.com/aws/aws-sdk-go-v2/service/sts v1.41.5/go.mod 
h1:iW40X4QBmUxdP+fZNOpfmkdMZqsovezbAeO+Ubiv2pk=
+github.com/aws/smithy-go v1.24.0 
h1:LpilSUItNPFr1eY85RYgTIg5eIEPtvFbskaFcmmIUnk=
+github.com/aws/smithy-go v1.24.0/go.mod 
h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
 github.com/aymanbagabas/go-osc52/v2 v2.0.1 
h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
 github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod 
h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
@@ -229,8 +229,8 @@
 github.com/creack/pty v1.1.18/go.mod 
h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
 github.com/cyberark/conjur-api-go v0.13.9 
h1:Cd4uJmnEkZJBnU4hsIcZN1maqhqRT2fSax65SEvqvEs=
 github.com/cyberark/conjur-api-go v0.13.9/go.mod 
h1:hZ6lyBHQW5WFZNMngQb/QtHpB8l0pY8PLgcJ1Vp8H74=
-github.com/cyphar/filepath-securejoin v0.6.0 
h1:BtGB77njd6SVO6VztOHfPxKitJvd/VPT+OFBFMOi1Is=
-github.com/cyphar/filepath-securejoin v0.6.0/go.mod 
h1:A8hd4EnAeyujCJRrICiOWqjS1AX0a9kM5XL+NwKoYSc=
+github.com/cyphar/filepath-securejoin v0.6.1 
h1:5CeZ1jPXEiYt3+Z6zqprSAgSWiggmpVyciv8syjIpVE=
+github.com/cyphar/filepath-securejoin v0.6.1/go.mod 
h1:A8hd4EnAeyujCJRrICiOWqjS1AX0a9kM5XL+NwKoYSc=
 github.com/danieljoos/wincred v1.2.2 
h1:774zMFJrqaeYCK2W57BgAem/MLi6mtSE47MB6BOJ0i0=
 github.com/danieljoos/wincred v1.2.2/go.mod 
h1:w7w4Utbrz8lqeMbDAK0lkNJUv5sAOkFi7nd/ogr0Uh8=
 github.com/davecgh/go-spew v1.1.0/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -585,10 +585,10 @@
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod 
h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
 github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
 github.com/oklog/ulid v1.3.1/go.mod 
h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
-github.com/onsi/ginkgo/v2 v2.23.4 
h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus=
-github.com/onsi/ginkgo/v2 v2.23.4/go.mod 
h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8=
-github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y=
-github.com/onsi/gomega v1.37.0/go.mod 
h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0=
+github.com/onsi/ginkgo/v2 v2.27.2 
h1:LzwLj0b89qtIy6SSASkzlNvX6WktqurSHwkk2ipF/Ns=
+github.com/onsi/ginkgo/v2 v2.27.2/go.mod 
h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo=
+github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A=
+github.com/onsi/gomega v1.38.2/go.mod 
h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k=
 github.com/opencontainers/go-digest v1.0.0 
h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
 github.com/opencontainers/go-digest v1.0.0/go.mod 
h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
 github.com/opencontainers/image-spec v1.1.1 
h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
@@ -663,8 +663,8 @@
 github.com/sony/gobreaker v0.5.0/go.mod 
h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
 github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
 github.com/spf13/cast v1.7.0/go.mod 
h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
-github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s=
-github.com/spf13/cobra v1.10.1/go.mod 
h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0=
+github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
+github.com/spf13/cobra v1.10.2/go.mod 
h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
 github.com/spf13/pflag v1.0.9/go.mod 
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
 github.com/spf13/pflag v1.0.10/go.mod 
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
@@ -736,8 +736,8 @@
 github.com/zclconf/go-cty v1.17.0/go.mod 
h1:wqFzcImaLTI6A5HfsRwB0nj5n0MRZFwmey8YoFPPs3U=
 github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 
h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo=
 github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod 
h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM=
-github.com/zclconf/go-cty-yaml v1.1.0 
h1:nP+jp0qPHv2IhUVqmQSzjvqAWcObN0KBkUl2rWBdig0=
-github.com/zclconf/go-cty-yaml v1.1.0/go.mod 
h1:9YLUH4g7lOhVWqUbctnVlZ5KLpg7JAprQNgxSZ1Gyxs=
+github.com/zclconf/go-cty-yaml v1.2.0 
h1:GDyL4+e/Qe/S0B7YaecMLbVvAR/Mp21CXMOSiCTOi1M=
+github.com/zclconf/go-cty-yaml v1.2.0/go.mod 
h1:9YLUH4g7lOhVWqUbctnVlZ5KLpg7JAprQNgxSZ1Gyxs=
 github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM=
 github.com/zeebo/errs v1.4.0/go.mod 
h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4=
 go.mongodb.org/mongo-driver v1.17.4 
h1:jUorfmVzljjr0FLzYQsGP8cgN/qzzxlY9Vh0C9KFXVw=
@@ -796,8 +796,6 @@
 go.szostok.io/version v1.2.0/go.mod 
h1:EiU0gPxaXb6MZ+apSN0WgDO6F4JXyC99k9PIXf2k2E8=
 go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
 go.uber.org/atomic v1.9.0/go.mod 
h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
-go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
-go.uber.org/automaxprocs v1.6.0/go.mod 
h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
 go.uber.org/goleak v1.3.0/go.mod 
h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
 go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
@@ -848,8 +846,8 @@
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
-golang.org/x/sync v0.18.0/go.mod 
h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
+golang.org/x/sync v0.19.0/go.mod 
h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -871,8 +869,8 @@
 golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
-golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
+golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod 
h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod 
h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod 
h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -881,8 +879,8 @@
 golang.org/x/term v0.17.0/go.mod 
h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
 golang.org/x/term v0.19.0/go.mod 
h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
 golang.org/x/term v0.20.0/go.mod 
h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
-golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
-golang.org/x/term v0.37.0/go.mod 
h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
+golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q=
+golang.org/x/term v0.38.0/go.mod 
h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -926,8 +924,8 @@
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c 
h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod 
h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/evanphx/json-patch.v4 v4.12.0 
h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
-gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod 
h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
+gopkg.in/evanphx/json-patch.v4 v4.13.0 
h1:czT3CmqEaQ1aanPc5SdlgQrrEIb8w/wwCvWWnfEbYzo=
+gopkg.in/evanphx/json-patch.v4 v4.13.0/go.mod 
h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
 gopkg.in/gookit/color.v1 v1.1.6 h1:5fB10p6AUFjhd2ayq9JgmJWr9WlTrguFdw3qlYtKNHk=
 gopkg.in/gookit/color.v1 v1.1.6/go.mod 
h1:IcEkFGaveVShJ+j8ew+jwe9epHyGpJ9IrptHmW3laVY=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
@@ -940,38 +938,38 @@
 gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-helm.sh/helm/v3 v3.19.2 h1:psQjaM8aIWrSVEly6PgYtLu/y6MRSmok4ERiGhZmtUY=
-helm.sh/helm/v3 v3.19.2/go.mod h1:gX10tB5ErM+8fr7bglUUS/UfTOO8UUTYWIBH1IYNnpE=
-helm.sh/helm/v4 v4.0.1 h1:WAfnyQEaEnTgaIPJssN+sPx0k1pkKldro8tE4q3c51A=
-helm.sh/helm/v4 v4.0.1/go.mod h1:G1Y5AE+lJPQSAjh7nbXnhZrtGtxo+I6POSu9DruYiGI=
-k8s.io/api v0.34.2 h1:fsSUNZhV+bnL6Aqrp6O7lMTy6o5x2C4XLjnh//8SLYY=
-k8s.io/api v0.34.2/go.mod h1:MMBPaWlED2a8w4RSeanD76f7opUoypY8TFYkSM+3XHw=
-k8s.io/apiextensions-apiserver v0.34.1 
h1:NNPBva8FNAPt1iSVwIE0FsdrVriRXMsaWFMqJbII2CI=
-k8s.io/apiextensions-apiserver v0.34.1/go.mod 
h1:hP9Rld3zF5Ay2Of3BeEpLAToP+l4s5UlxiHfqRaRcMc=
-k8s.io/apimachinery v0.34.2 h1:zQ12Uk3eMHPxrsbUJgNF8bTauTVR2WgqJsTmwTE/NW4=
-k8s.io/apimachinery v0.34.2/go.mod 
h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw=
-k8s.io/apiserver v0.34.1 h1:U3JBGdgANK3dfFcyknWde1G6X1F4bg7PXuvlqt8lITA=
-k8s.io/apiserver v0.34.1/go.mod h1:eOOc9nrVqlBI1AFCvVzsob0OxtPZUCPiUJL45JOTBG0=
-k8s.io/cli-runtime v0.34.1 h1:btlgAgTrYd4sk8vJTRG6zVtqBKt9ZMDeQZo2PIzbL7M=
-k8s.io/cli-runtime v0.34.1/go.mod 
h1:aVA65c+f0MZiMUPbseU/M9l1Wo2byeaGwUuQEQVVveE=
-k8s.io/client-go v0.34.2 h1:Co6XiknN+uUZqiddlfAjT68184/37PS4QAzYvQvDR8M=
-k8s.io/client-go v0.34.2/go.mod h1:2VYDl1XXJsdcAxw7BenFslRQX28Dxz91U9MWKjX97fE=
-k8s.io/component-base v0.34.1 h1:v7xFgG+ONhytZNFpIz5/kecwD+sUhVE6HU7qQUiRM4A=
-k8s.io/component-base v0.34.1/go.mod 
h1:mknCpLlTSKHzAQJJnnHVKqjxR7gBeHRv0rPXA7gdtQ0=
+helm.sh/helm/v3 v3.19.4 h1:E2yFBejmZBczWr5LblhjZbvAOAwVumfBO1AtN3nqI30=
+helm.sh/helm/v3 v3.19.4/go.mod h1:PC1rk7PqacpkV4acUFMLStOOis7QM9Jq3DveHBInu4s=
+helm.sh/helm/v4 v4.0.4 h1:5Lokr7XxCe6IW/NMtdECuAFW/0bTs/2831deUrlKqP8=
+helm.sh/helm/v4 v4.0.4/go.mod h1:fMyG9onvVK6HOBjjkzhhHORAsgEWlRMqDY84lvX7GvY=
+k8s.io/api v0.35.0 h1:iBAU5LTyBI9vw3L5glmat1njFK34srdLmktWwLTprlY=
+k8s.io/api v0.35.0/go.mod h1:AQ0SNTzm4ZAczM03QH42c7l3bih1TbAXYo0DkF8ktnA=
+k8s.io/apiextensions-apiserver v0.34.2 
h1:WStKftnGeoKP4AZRz/BaAAEJvYp4mlZGN0UCv+uvsqo=
+k8s.io/apiextensions-apiserver v0.34.2/go.mod 
h1:398CJrsgXF1wytdaanynDpJ67zG4Xq7yj91GrmYN2SE=
+k8s.io/apimachinery v0.35.0 h1:Z2L3IHvPVv/MJ7xRxHEtk6GoJElaAqDCCU0S6ncYok8=
+k8s.io/apimachinery v0.35.0/go.mod 
h1:jQCgFZFR1F4Ik7hvr2g84RTJSZegBc8yHgFWKn//hns=
+k8s.io/apiserver v0.34.2 h1:2/yu8suwkmES7IzwlehAovo8dDE07cFRC7KMDb1+MAE=
+k8s.io/apiserver v0.34.2/go.mod h1:gqJQy2yDOB50R3JUReHSFr+cwJnL8G1dzTA0YLEqAPI=
+k8s.io/cli-runtime v0.34.2 h1:cct1GEuWc3IyVT8MSCoIWzRGw9HJ/C5rgP32H60H6aE=
+k8s.io/cli-runtime v0.34.2/go.mod 
h1:X13tsrYexYUCIq8MarCBy8lrm0k0weFPTpcaNo7lms4=
+k8s.io/client-go v0.35.0 h1:IAW0ifFbfQQwQmga0UdoH0yvdqrbwMdq9vIFEhRpxBE=
+k8s.io/client-go v0.35.0/go.mod h1:q2E5AAyqcbeLGPdoRB+Nxe3KYTfPce1Dnu1myQdqz9o=
+k8s.io/component-base v0.34.2 h1:HQRqK9x2sSAsd8+R4xxRirlTjowsg6fWCPwWYeSvogQ=
+k8s.io/component-base v0.34.2/go.mod 
h1:9xw2FHJavUHBFpiGkZoKuYZ5pdtLKe97DEByaA+hHbM=
 k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
 k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b 
h1:MloQ9/bdJyIu9lb1PzujOPolHyvO06MXG5TUIj2mNAA=
-k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b/go.mod 
h1:UZ2yyWbFTpuhSbFhv24aGNOdoRdJZgsIObGBUaYVsts=
-k8s.io/kubectl v0.34.1 h1:1qP1oqT5Xc93K+H8J7ecpBjaz511gan89KO9Vbsh/OI=
-k8s.io/kubectl v0.34.1/go.mod h1:JRYlhJpGPyk3dEmJ+BuBiOB9/dAvnrALJEiY/C5qa6A=
-k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 
h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y=
-k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod 
h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 
h1:Y3gxNAuB0OBLImH611+UDZcmKS3g6CthxToOb37KgwE=
+k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912/go.mod 
h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ=
+k8s.io/kubectl v0.34.2 h1:+fWGrVlDONMUmmQLDaGkQ9i91oszjjRAa94cr37hzqA=
+k8s.io/kubectl v0.34.2/go.mod h1:X2KTOdtZZNrTWmUD4oHApJ836pevSl+zvC5sI6oO2YQ=
+k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 
h1:SjGebBtkBqHFOli+05xYbK8YF1Dzkbzn+gDM4X9T4Ck=
+k8s.io/utils v0.0.0-20251002143259-bc988d571ff4/go.mod 
h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 oras.land/oras-go/v2 v2.6.0 h1:X4ELRsiGkrbeox69+9tzTu492FMUu7zJQW6eJU+I2oc=
 oras.land/oras-go/v2 v2.6.0/go.mod 
h1:magiQDfG6H1O9APp+rOsvCPcW1GD2MM7vgnKY0Y+u1o=
 sigs.k8s.io/controller-runtime v0.22.3 
h1:I7mfqz/a/WdmDCEnXmSPm8/b/yRTy6JsKKENTijTq8Y=
 sigs.k8s.io/controller-runtime v0.22.3/go.mod 
h1:+QX1XUpTXN4mLoblf4tqr5CQcyHPAki2HLXqQMY6vh8=
-sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 
h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=
-sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod 
h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
+sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 
h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
+sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod 
h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
 sigs.k8s.io/kustomize/api v0.20.1 
h1:iWP1Ydh3/lmldBnH/S5RXgT98vWYMaTUL1ADcr+Sv7I=
 sigs.k8s.io/kustomize/api v0.20.1/go.mod 
h1:t6hUFxO+Ph0VxIk1sKp1WS0dOjbPCtLJ4p8aADLwqjM=
 sigs.k8s.io/kustomize/kyaml v0.20.1 
h1:PCMnA2mrVbRP3NIB6v9kYCAc38uvFLVs8j/CD567A78=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-1.2.2/pkg/app/app_test.go 
new/helmfile-1.2.3/pkg/app/app_test.go
--- old/helmfile-1.2.2/pkg/app/app_test.go      2025-11-28 01:46:37.000000000 
+0100
+++ new/helmfile-1.2.3/pkg/app/app_test.go      2025-12-20 02:08:39.000000000 
+0100
@@ -4455,3 +4455,149 @@
                require.Equalf(t, test.expected, strings.Join(receivedArgs, " 
"), "expected args %s, received args %s", test.expected, 
strings.Join(receivedArgs, " "))
        }
 }
+
+func TestRenderYamlEnvVar(t *testing.T) {
+       testCases := []struct {
+               name           string
+               envValue       string
+               filename       string
+               content        string
+               shouldRender   bool
+               expectErr      bool
+               expectedOutput string
+       }{
+               {
+                       name:           "default behavior - helmfile.yaml 
without .gotmpl is NOT rendered",
+                       envValue:       "",
+                       filename:       "helmfile.yaml",
+                       content:        "releases:\n- name: {{ 
.Environment.Name }}-app\n  chart: test/chart\n",
+                       shouldRender:   false,
+                       expectErr:      false,
+                       expectedOutput: "",
+               },
+               {
+                       name:           "default behavior - 
helmfile.yaml.gotmpl IS rendered",
+                       envValue:       "",
+                       filename:       "helmfile.yaml.gotmpl",
+                       content:        "releases:\n- name: {{ 
.Environment.Name }}-app\n  chart: test/chart\n",
+                       shouldRender:   true,
+                       expectErr:      false,
+                       expectedOutput: "default-app",
+               },
+               {
+                       name:           "HELMFILE_RENDER_YAML=true - 
helmfile.yaml IS rendered",
+                       envValue:       "true",
+                       filename:       "helmfile.yaml",
+                       content:        "releases:\n- name: {{ 
.Environment.Name }}-app\n  chart: test/chart\n",
+                       shouldRender:   true,
+                       expectErr:      false,
+                       expectedOutput: "default-app",
+               },
+               {
+                       name:           "HELMFILE_RENDER_YAML=true - 
helmfile.yaml.gotmpl IS rendered",
+                       envValue:       "true",
+                       filename:       "helmfile.yaml.gotmpl",
+                       content:        "releases:\n- name: {{ 
.Environment.Name }}-app\n  chart: test/chart\n",
+                       shouldRender:   true,
+                       expectErr:      false,
+                       expectedOutput: "default-app",
+               },
+               {
+                       name:           "HELMFILE_RENDER_YAML=false - 
helmfile.yaml is NOT rendered",
+                       envValue:       "false",
+                       filename:       "helmfile.yaml",
+                       content:        "releases:\n- name: {{ 
.Environment.Name }}-app\n  chart: test/chart\n",
+                       shouldRender:   false,
+                       expectErr:      false,
+                       expectedOutput: "",
+               },
+               {
+                       name:           "HELMFILE_RENDER_YAML=false - 
helmfile.yaml.gotmpl IS rendered (extension takes precedence)",
+                       envValue:       "false",
+                       filename:       "helmfile.yaml.gotmpl",
+                       content:        "releases:\n- name: {{ 
.Environment.Name }}-app\n  chart: test/chart\n",
+                       shouldRender:   true,
+                       expectErr:      false,
+                       expectedOutput: "default-app",
+               },
+               {
+                       name:           "HELMFILE_RENDER_YAML=TRUE (uppercase) 
- should NOT render (strict comparison)",
+                       envValue:       "TRUE",
+                       filename:       "helmfile.yaml",
+                       content:        "releases:\n- name: {{ 
.Environment.Name }}-app\n  chart: test/chart\n",
+                       shouldRender:   false,
+                       expectErr:      false,
+                       expectedOutput: "",
+               },
+               {
+                       name:           "HELMFILE_RENDER_YAML=1 - should NOT 
render (strict comparison)",
+                       envValue:       "1",
+                       filename:       "helmfile.yaml",
+                       content:        "releases:\n- name: {{ 
.Environment.Name }}-app\n  chart: test/chart\n",
+                       shouldRender:   false,
+                       expectErr:      false,
+                       expectedOutput: "",
+               },
+       }
+
+       for _, tc := range testCases {
+               t.Run(tc.name, func(t *testing.T) {
+                       if tc.envValue != "" {
+                               t.Setenv(envvar.RenderYaml, tc.envValue)
+                       }
+
+                       files := map[string]string{
+                               fmt.Sprintf("/path/to/%s", tc.filename): 
tc.content,
+                       }
+
+                       app := &App{
+                               OverrideHelmBinary:              
DefaultHelmBinary,
+                               OverrideKubeContext:             "default",
+                               DisableKubeVersionAutoDetection: true,
+                               Logger:                          
newAppTestLogger(),
+                               Namespace:                       "",
+                               Env:                             "default",
+                               FileOrDir:                       tc.filename,
+                       }
+
+                       expectNoCallsToHelm(app)
+                       app = appWithFs(app, files)
+
+                       err := app.ForEachState(
+                               func(run *Run) (bool, []error) {
+                                       if tc.shouldRender {
+                                               // If rendering is expected, 
check that the template was rendered
+                                               require.NotNil(t, run.state)
+                                               require.NotEmpty(t, 
run.state.Releases)
+                                               // The rendered name should be 
"default-app" not "{{ .Environment.Name }}-app"
+                                               actualName := 
run.state.Releases[0].Name
+                                               require.Equal(t, 
tc.expectedOutput, actualName, "expected release name to be rendered as %s, got 
%s", tc.expectedOutput, actualName)
+                                       } else {
+                                               // If rendering is NOT 
expected, check that the template was NOT rendered
+                                               // In this case, the YAML 
parser will likely fail or the template syntax will remain
+                                               // We just verify that if there 
are releases, they contain the unrendered template
+                                               if run.state != nil && 
len(run.state.Releases) > 0 {
+                                                       actualName := 
run.state.Releases[0].Name
+                                                       require.Contains(t, 
actualName, "{{", "expected template syntax to remain unrendered, got %s", 
actualName)
+                                               }
+                                       }
+                                       return false, nil
+                               },
+                               false,
+                               SetFilter(true),
+                       )
+
+                       if tc.expectErr {
+                               require.Error(t, err)
+                       } else {
+                               if err != nil && !tc.shouldRender {
+                                       // It's OK if there's an error when we 
don't expect rendering
+                                       // because the template syntax might 
cause YAML parsing issues
+                                       t.Logf("Expected error when not 
rendering template: %v", err)
+                               } else if tc.shouldRender {
+                                       require.NoError(t, err, "unexpected 
error: %v", err)
+                               }
+                       }
+               })
+       }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-1.2.2/pkg/app/desired_state_file_loader.go 
new/helmfile-1.2.3/pkg/app/desired_state_file_loader.go
--- old/helmfile-1.2.2/pkg/app/desired_state_file_loader.go     2025-11-28 
01:46:37.000000000 +0100
+++ new/helmfile-1.2.3/pkg/app/desired_state_file_loader.go     2025-12-20 
02:08:39.000000000 +0100
@@ -4,6 +4,7 @@
        "bytes"
        "errors"
        "fmt"
+       "os"
        "path/filepath"
        "slices"
 
@@ -12,6 +13,7 @@
        "go.uber.org/zap"
 
        "github.com/helmfile/helmfile/pkg/environment"
+       "github.com/helmfile/helmfile/pkg/envvar"
        "github.com/helmfile/helmfile/pkg/filesystem"
        "github.com/helmfile/helmfile/pkg/helmexec"
        "github.com/helmfile/helmfile/pkg/policy"
@@ -216,7 +218,9 @@
 
                var rawContent []byte
 
-               if filepath.Ext(filename) == ".gotmpl" {
+               shouldRender := filepath.Ext(filename) == ".gotmpl" || 
os.Getenv(envvar.RenderYaml) == "true"
+
+               if shouldRender {
                        var yamlBuf *bytes.Buffer
                        var err error
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-1.2.2/pkg/app/init.go 
new/helmfile-1.2.3/pkg/app/init.go
--- old/helmfile-1.2.2/pkg/app/init.go  2025-11-28 01:46:37.000000000 +0100
+++ new/helmfile-1.2.3/pkg/app/init.go  2025-12-20 02:08:39.000000000 +0100
@@ -20,7 +20,7 @@
 const (
        HelmRequiredVersion           = "v3.18.6" // Minimum required version 
(supports Helm 3.x and 4.x)
        HelmDiffRecommendedVersion    = "v3.14.1"
-       HelmRecommendedVersion        = "v4.0.1" // Recommended to use latest 
Helm 4
+       HelmRecommendedVersion        = "v4.0.4" // Recommended to use latest 
Helm 4
        HelmSecretsRecommendedVersion = "v4.7.4" // v4.7.0+ works with both 
Helm 3 (single plugin) and Helm 4 (split plugin architecture)
        HelmGitRecommendedVersion     = "v1.3.0"
        HelmS3RecommendedVersion      = "v0.16.3"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-1.2.2/pkg/envvar/const.go 
new/helmfile-1.2.3/pkg/envvar/const.go
--- old/helmfile-1.2.2/pkg/envvar/const.go      2025-11-28 01:46:37.000000000 
+0100
+++ new/helmfile-1.2.3/pkg/envvar/const.go      2025-12-20 02:08:39.000000000 
+0100
@@ -15,6 +15,7 @@
        GoYamlV3              = "HELMFILE_GO_YAML_V3"
        CacheHome             = "HELMFILE_CACHE_HOME"
        Interactive           = "HELMFILE_INTERACTIVE"
+       RenderYaml            = "HELMFILE_RENDER_YAML" // force helmfile.yaml 
to be rendered as template regardless of extension, expecting "true" lower case
 
        // AWSSDKLogLevel controls AWS SDK logging level
        // Valid values: "off" (default), "minimal", "standard", "verbose", or 
custom (e.g., "request,response")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/helmfile-1.2.2/pkg/state/chart_dependencies_rewrite_test.go 
new/helmfile-1.2.3/pkg/state/chart_dependencies_rewrite_test.go
--- old/helmfile-1.2.2/pkg/state/chart_dependencies_rewrite_test.go     
1970-01-01 01:00:00.000000000 +0100
+++ new/helmfile-1.2.3/pkg/state/chart_dependencies_rewrite_test.go     
2025-12-20 02:08:39.000000000 +0100
@@ -0,0 +1,485 @@
+package state
+
+import (
+       "os"
+       "path/filepath"
+       "strings"
+       "testing"
+
+       "go.uber.org/zap"
+
+       "github.com/helmfile/helmfile/pkg/filesystem"
+)
+
+func TestRewriteChartDependencies(t *testing.T) {
+       tests := []struct {
+               name           string
+               chartYaml      string
+               expectModified bool
+               expectError    bool
+               validate       func(t *testing.T, chartPath string)
+       }{
+               {
+                       name:           "no Chart.yaml exists",
+                       chartYaml:      "",
+                       expectModified: false,
+                       expectError:    false,
+               },
+               {
+                       name: "no dependencies",
+                       chartYaml: `apiVersion: v2
+name: test-chart
+version: 1.0.0
+`,
+                       expectModified: false,
+                       expectError:    false,
+               },
+               {
+                       name: "absolute file:// dependency - not modified",
+                       chartYaml: `apiVersion: v2
+name: test-chart
+version: 1.0.0
+dependencies:
+  - name: dep1
+    repository: file:///absolute/path/to/chart
+    version: 1.0.0
+`,
+                       expectModified: false,
+                       expectError:    false,
+                       validate: func(t *testing.T, chartPath string) {
+                               data, err := 
os.ReadFile(filepath.Join(chartPath, "Chart.yaml"))
+                               if err != nil {
+                                       t.Fatalf("failed to read Chart.yaml: 
%v", err)
+                               }
+                               content := string(data)
+                               if !strings.Contains(content, 
"file:///absolute/path/to/chart") {
+                                       t.Errorf("absolute path should not be 
modified")
+                               }
+                       },
+               },
+               {
+                       name: "relative file:// dependency - should be 
modified",
+                       chartYaml: `apiVersion: v2
+name: test-chart
+version: 1.0.0
+dependencies:
+  - name: dep1
+    repository: file://../relative-chart
+    version: 1.0.0
+`,
+                       expectModified: true,
+                       expectError:    false,
+                       validate: func(t *testing.T, chartPath string) {
+                               data, err := 
os.ReadFile(filepath.Join(chartPath, "Chart.yaml"))
+                               if err != nil {
+                                       t.Fatalf("failed to read Chart.yaml: 
%v", err)
+                               }
+                               content := string(data)
+
+                               // Should have been converted to absolute path
+                               if strings.Contains(content, 
"file://../relative-chart") {
+                                       t.Errorf("relative path should have 
been converted to absolute")
+                               }
+
+                               // Should now have an absolute path
+                               if !strings.Contains(content, "file://") {
+                                       t.Errorf("should still have file:// 
prefix")
+                               }
+                       },
+               },
+               {
+                       name: "mixed dependencies - only relative file:// 
modified",
+                       chartYaml: `apiVersion: v2
+name: test-chart
+version: 1.0.0
+dependencies:
+  - name: dep1
+    repository: https://charts.example.com
+    version: 1.0.0
+  - name: dep2
+    repository: file://../relative-chart
+    version: 2.0.0
+  - name: dep3
+    repository: file:///absolute/chart
+    version: 3.0.0
+  - name: dep4
+    repository: oci://registry.example.com/charts/mychart
+    version: 4.0.0
+`,
+                       expectModified: true,
+                       expectError:    false,
+                       validate: func(t *testing.T, chartPath string) {
+                               data, err := 
os.ReadFile(filepath.Join(chartPath, "Chart.yaml"))
+                               if err != nil {
+                                       t.Fatalf("failed to read Chart.yaml: 
%v", err)
+                               }
+                               content := string(data)
+
+                               // HTTPS repo should remain unchanged
+                               if !strings.Contains(content, 
"https://charts.example.com";) {
+                                       t.Errorf("https repository should not 
be modified")
+                               }
+
+                               // Relative path should be converted
+                               if strings.Contains(content, 
"file://../relative-chart") {
+                                       t.Errorf("relative file:// path should 
have been converted")
+                               }
+
+                               // Absolute path should remain unchanged
+                               if !strings.Contains(content, 
"file:///absolute/chart") {
+                                       t.Errorf("absolute file:// path should 
not be modified")
+                               }
+
+                               // OCI repo should remain unchanged
+                               if !strings.Contains(content, 
"oci://registry.example.com") {
+                                       t.Errorf("oci repository should not be 
modified")
+                               }
+                       },
+               },
+               {
+                       name: "multiple relative dependencies",
+                       chartYaml: `apiVersion: v2
+name: test-chart
+version: 1.0.0
+dependencies:
+  - name: dep1
+    repository: file://../chart1
+    version: 1.0.0
+  - name: dep2
+    repository: file://./chart2
+    version: 2.0.0
+  - name: dep3
+    repository: file://../../../chart3
+    version: 3.0.0
+`,
+                       expectModified: true,
+                       expectError:    false,
+                       validate: func(t *testing.T, chartPath string) {
+                               data, err := 
os.ReadFile(filepath.Join(chartPath, "Chart.yaml"))
+                               if err != nil {
+                                       t.Fatalf("failed to read Chart.yaml: 
%v", err)
+                               }
+                               content := string(data)
+
+                               // All relative paths should be converted
+                               if strings.Contains(content, 
"file://../chart1") ||
+                                       strings.Contains(content, 
"file://./chart2") ||
+                                       strings.Contains(content, 
"file://../../../chart3") {
+                                       t.Errorf("all relative paths should 
have been converted")
+                               }
+                       },
+               },
+       }
+
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       // Create temporary directory for test
+                       tempDir, err := os.MkdirTemp("", "helmfile-test-")
+                       if err != nil {
+                               t.Fatalf("failed to create temp dir: %v", err)
+                       }
+                       defer os.RemoveAll(tempDir)
+
+                       // Create Chart.yaml if provided
+                       if tt.chartYaml != "" {
+                               chartYamlPath := filepath.Join(tempDir, 
"Chart.yaml")
+                               if err := os.WriteFile(chartYamlPath, 
[]byte(tt.chartYaml), 0644); err != nil {
+                                       t.Fatalf("failed to write Chart.yaml: 
%v", err)
+                               }
+                       }
+
+                       // Create HelmState with logger
+                       logger := zap.NewNop().Sugar()
+                       st := &HelmState{
+                               logger: logger,
+                               fs:     filesystem.DefaultFileSystem(),
+                       }
+
+                       // Read original content if it exists
+                       var originalContent []byte
+                       chartYamlPath := filepath.Join(tempDir, "Chart.yaml")
+                       if _, err := os.Stat(chartYamlPath); err == nil {
+                               originalContent, _ = os.ReadFile(chartYamlPath)
+                       }
+
+                       // Call rewriteChartDependencies
+                       cleanup, err := st.rewriteChartDependencies(tempDir)
+
+                       if tt.expectError {
+                               if err == nil {
+                                       t.Errorf("expected error but got none")
+                               }
+                               return
+                       }
+
+                       if err != nil {
+                               t.Fatalf("unexpected error: %v", err)
+                       }
+
+                       // Validate the modified Chart.yaml
+                       if tt.validate != nil {
+                               tt.validate(t, tempDir)
+                       }
+
+                       // Call cleanup and verify restoration
+                       if tt.chartYaml != "" {
+                               cleanup()
+
+                               // Read restored content
+                               restoredContent, err := 
os.ReadFile(chartYamlPath)
+                               if err != nil {
+                                       t.Fatalf("failed to read restored 
Chart.yaml: %v", err)
+                               }
+
+                               // Verify content was restored
+                               if string(restoredContent) != 
string(originalContent) {
+                                       t.Errorf("cleanup did not restore 
original content\noriginal:\n%s\nrestored:\n%s",
+                                               string(originalContent), 
string(restoredContent))
+                               }
+                       }
+               })
+       }
+}
+
+func TestRewriteChartDependencies_CleanupRestoresOriginal(t *testing.T) {
+       tempDir, err := os.MkdirTemp("", "helmfile-test-")
+       if err != nil {
+               t.Fatalf("failed to create temp dir: %v", err)
+       }
+       defer os.RemoveAll(tempDir)
+
+       originalChart := `apiVersion: v2
+name: test-chart
+version: 1.0.0
+dependencies:
+  - name: dep1
+    repository: file://../relative-chart
+    version: 1.0.0
+`
+
+       chartYamlPath := filepath.Join(tempDir, "Chart.yaml")
+       if err := os.WriteFile(chartYamlPath, []byte(originalChart), 0644); err 
!= nil {
+               t.Fatalf("failed to write Chart.yaml: %v", err)
+       }
+
+       logger := zap.NewNop().Sugar()
+       st := &HelmState{
+               logger: logger,
+               fs:     filesystem.DefaultFileSystem(),
+       }
+
+       cleanup, err := st.rewriteChartDependencies(tempDir)
+       if err != nil {
+               t.Fatalf("unexpected error: %v", err)
+       }
+
+       // Verify modification happened
+       modifiedContent, err := os.ReadFile(chartYamlPath)
+       if err != nil {
+               t.Fatalf("failed to read modified Chart.yaml: %v", err)
+       }
+
+       if string(modifiedContent) == originalChart {
+               t.Errorf("Chart.yaml should have been modified")
+       }
+
+       // Call cleanup
+       cleanup()
+
+       // Verify restoration
+       restoredContent, err := os.ReadFile(chartYamlPath)
+       if err != nil {
+               t.Fatalf("failed to read restored Chart.yaml: %v", err)
+       }
+
+       if string(restoredContent) != originalChart {
+               t.Errorf("cleanup did not restore original 
content\nexpected:\n%s\ngot:\n%s",
+                       originalChart, string(restoredContent))
+       }
+}
+
+func TestRewriteChartDependencies_PreservesOtherFields(t *testing.T) {
+       tempDir, err := os.MkdirTemp("", "helmfile-test-")
+       if err != nil {
+               t.Fatalf("failed to create temp dir: %v", err)
+       }
+       defer os.RemoveAll(tempDir)
+
+       chartYaml := `apiVersion: v2
+name: test-chart
+version: 1.0.0
+description: A test chart
+keywords:
+  - test
+  - example
+maintainers:
+  - name: Test User
+    email: [email protected]
+dependencies:
+  - name: dep1
+    repository: file://../relative-chart
+    version: 1.0.0
+`
+
+       chartYamlPath := filepath.Join(tempDir, "Chart.yaml")
+       if err := os.WriteFile(chartYamlPath, []byte(chartYaml), 0644); err != 
nil {
+               t.Fatalf("failed to write Chart.yaml: %v", err)
+       }
+
+       logger := zap.NewNop().Sugar()
+       st := &HelmState{
+               logger: logger,
+               fs:     filesystem.DefaultFileSystem(),
+       }
+
+       cleanup, err := st.rewriteChartDependencies(tempDir)
+       if err != nil {
+               t.Fatalf("unexpected error: %v", err)
+       }
+       defer cleanup()
+
+       // Read modified content
+       modifiedContent, err := os.ReadFile(chartYamlPath)
+       if err != nil {
+               t.Fatalf("failed to read modified Chart.yaml: %v", err)
+       }
+
+       content := string(modifiedContent)
+
+       // Verify top-level fields are preserved
+       // Note: The implementation preserves top-level chart metadata but may 
not preserve
+       // extra dependency-level fields (like condition, tags) that are not in 
the ChartDependency struct
+       requiredFields := []string{
+               "apiVersion: v2",
+               "name: test-chart",
+               "version: 1.0.0",
+               "description: A test chart",
+               "keywords:",
+               "maintainers:",
+       }
+
+       for _, field := range requiredFields {
+               if !strings.Contains(content, field) {
+                       t.Errorf("field %q should be preserved", field)
+               }
+       }
+
+       // Verify the dependency was rewritten
+       if strings.Contains(content, "file://../relative-chart") {
+               t.Errorf("relative path should have been converted to absolute")
+       }
+}
+
+func TestRewriteChartDependencies_ErrorHandling(t *testing.T) {
+       tests := []struct {
+               name        string
+               setupFunc   func(tempDir string) error
+               expectError bool
+               errorMsg    string
+       }{
+               {
+                       name: "invalid yaml in Chart.yaml",
+                       setupFunc: func(tempDir string) error {
+                               invalidYaml := `apiVersion: v2
+name: test-chart
+version: 1.0.0
+dependencies:
+  - name: dep1
+    repository: file://../chart
+    version: 1.0.0
+    invalid yaml here!
+`
+                               return os.WriteFile(filepath.Join(tempDir, 
"Chart.yaml"), []byte(invalidYaml), 0644)
+                       },
+                       expectError: true,
+               },
+               {
+                       name: "unreadable Chart.yaml",
+                       setupFunc: func(tempDir string) error {
+                               chartYamlPath := filepath.Join(tempDir, 
"Chart.yaml")
+                               if err := os.WriteFile(chartYamlPath, 
[]byte("test"), 0000); err != nil {
+                                       return err
+                               }
+                               return nil
+                       },
+                       expectError: true,
+               },
+       }
+
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       tempDir, err := os.MkdirTemp("", "helmfile-test-")
+                       if err != nil {
+                               t.Fatalf("failed to create temp dir: %v", err)
+                       }
+                       defer os.RemoveAll(tempDir)
+
+                       if err := tt.setupFunc(tempDir); err != nil {
+                               t.Fatalf("setup failed: %v", err)
+                       }
+
+                       logger := zap.NewNop().Sugar()
+                       st := &HelmState{
+                               logger: logger,
+                               fs:     filesystem.DefaultFileSystem(),
+                       }
+
+                       _, err = st.rewriteChartDependencies(tempDir)
+
+                       if tt.expectError && err == nil {
+                               t.Errorf("expected error but got none")
+                       }
+                       if !tt.expectError && err != nil {
+                               t.Errorf("unexpected error: %v", err)
+                       }
+               })
+       }
+}
+
+func TestRewriteChartDependencies_WindowsStylePath(t *testing.T) {
+       tempDir, err := os.MkdirTemp("", "helmfile-test-")
+       if err != nil {
+               t.Fatalf("failed to create temp dir: %v", err)
+       }
+       defer os.RemoveAll(tempDir)
+
+       // Test with backslash (Windows-style) paths
+       // Note: file:// URLs should use forward slashes, but test handling of 
edge cases
+       chartYaml := `apiVersion: v2
+name: test-chart
+version: 1.0.0
+dependencies:
+  - name: dep1
+    repository: file://./subdir/chart
+    version: 1.0.0
+`
+
+       chartYamlPath := filepath.Join(tempDir, "Chart.yaml")
+       if err := os.WriteFile(chartYamlPath, []byte(chartYaml), 0644); err != 
nil {
+               t.Fatalf("failed to write Chart.yaml: %v", err)
+       }
+
+       logger := zap.NewNop().Sugar()
+       st := &HelmState{
+               logger: logger,
+               fs:     filesystem.DefaultFileSystem(),
+       }
+
+       cleanup, err := st.rewriteChartDependencies(tempDir)
+       if err != nil {
+               t.Fatalf("unexpected error: %v", err)
+       }
+       defer cleanup()
+
+       // Should handle the path correctly
+       data, err := os.ReadFile(chartYamlPath)
+       if err != nil {
+               t.Fatalf("failed to read Chart.yaml: %v", err)
+       }
+
+       content := string(data)
+       // The relative path should have been converted to absolute
+       if strings.Contains(content, "file://./subdir/chart") {
+               t.Errorf("relative path with ./ should have been converted")
+       }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-1.2.2/pkg/state/state.go 
new/helmfile-1.2.3/pkg/state/state.go
--- old/helmfile-1.2.2/pkg/state/state.go       2025-11-28 01:46:37.000000000 
+0100
+++ new/helmfile-1.2.3/pkg/state/state.go       2025-12-20 02:08:39.000000000 
+0100
@@ -1352,11 +1352,102 @@
 // When running `helmfile template` on helm v2, or `helmfile lint` on both 
helm v2 and v3,
 // PrepareCharts will download and untar charts for linting and templating.
 //
-// Otheriwse, if a chart is not a helm chart, it will call "chartify" to turn 
it into a chart.
+// rewriteChartDependencies rewrites relative file:// dependencies in 
Chart.yaml to absolute paths
+// to ensure they can be resolved from chartify's temporary directory
+func (st *HelmState) rewriteChartDependencies(chartPath string) (func(), 
error) {
+       chartYamlPath := filepath.Join(chartPath, "Chart.yaml")
+
+       // Check if Chart.yaml exists
+       if _, err := os.Stat(chartYamlPath); os.IsNotExist(err) {
+               return func() {}, nil
+       }
+
+       // Read Chart.yaml
+       data, err := os.ReadFile(chartYamlPath)
+       if err != nil {
+               return func() {}, err
+       }
+
+       originalContent := data
+       cleanup := func() {
+               // Restore original Chart.yaml
+               if err := os.WriteFile(chartYamlPath, originalContent, 0644); 
err != nil {
+                       st.logger.Warnf("Failed to restore original Chart.yaml 
at %s: %v", chartYamlPath, err)
+               }
+       }
+
+       // Parse Chart.yaml
+       type ChartDependency struct {
+               Name       string `yaml:"name"`
+               Repository string `yaml:"repository"`
+               Version    string `yaml:"version"`
+       }
+       type ChartMeta struct {
+               Dependencies []ChartDependency      
`yaml:"dependencies,omitempty"`
+               Data         map[string]interface{} `yaml:",inline"`
+       }
+
+       var chartMeta ChartMeta
+       if err := yaml.Unmarshal(data, &chartMeta); err != nil {
+               return cleanup, err
+       }
+
+       // Rewrite relative file:// dependencies to absolute paths
+       modified := false
+       for i := range chartMeta.Dependencies {
+               dep := &chartMeta.Dependencies[i]
+               if strings.HasPrefix(dep.Repository, "file://") {
+                       relPath := strings.TrimPrefix(dep.Repository, "file://")
+
+                       // Check if it's a relative path
+                       if !filepath.IsAbs(relPath) {
+                               // Convert to absolute path relative to the 
chart directory
+                               absPath := filepath.Join(chartPath, relPath)
+                               absPath, err = filepath.Abs(absPath)
+                               if err != nil {
+                                       return cleanup, fmt.Errorf("failed to 
resolve absolute path for dependency %s: %w", dep.Name, err)
+                               }
+
+                               st.logger.Debugf("Rewriting Chart dependency %s 
from %s to file://%s", dep.Name, dep.Repository, absPath)
+                               dep.Repository = "file://" + absPath
+                               modified = true
+                       }
+               }
+       }
+
+       // Write back if modified
+       if modified {
+               updatedData, err := yaml.Marshal(&chartMeta)
+               if err != nil {
+                       return cleanup, fmt.Errorf("failed to marshal 
Chart.yaml: %w", err)
+               }
+
+               if err := os.WriteFile(chartYamlPath, updatedData, 0644); err 
!= nil {
+                       return cleanup, fmt.Errorf("failed to write Chart.yaml: 
%w", err)
+               }
+
+               st.logger.Debugf("Rewrote Chart.yaml with absolute dependency 
paths at %s", chartYamlPath)
+       }
+
+       return cleanup, nil
+}
+
+// Otherwise, if a chart is not a helm chart, it will call "chartify" to turn 
it into a chart.
 //
 // If exists, it will also patch resources by json patches, strategic-merge 
patches, and injectors.
 // processChartification handles the chartification process
 func (st *HelmState) processChartification(chartification *Chartify, release 
*ReleaseSpec, chartPath string, opts ChartPrepareOptions, skipDeps bool, 
helmfileCommand string) (string, bool, error) {
+       // Rewrite relative file:// dependencies in Chart.yaml to absolute 
paths before chartify processes them
+       // This prevents errors like "Error: directory 
/tmp/chartify.../argocd-application not found"
+       // when Chart.yaml contains dependencies like 
"file://../argocd-application"
+       if st.fs.DirectoryExistsAt(chartPath) {
+               restoreChart, err := st.rewriteChartDependencies(chartPath)
+               if err != nil {
+                       return "", false, fmt.Errorf("failed to rewrite chart 
dependencies: %w", err)
+               }
+               defer restoreChart()
+       }
+
        c := chartify.New(
                chartify.HelmBin(st.DefaultHelmBinary),
                chartify.KustomizeBin(st.DefaultKustomizeBinary),

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/helmfile/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.helmfile.new.1928/vendor.tar.gz differ: char 28, 
line 1

Reply via email to