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
