Compare commits
	
		
			No commits in common. "main" and "v1.1.7" have entirely different histories.
		
	
	
		|  | @ -37,7 +37,7 @@ jobs: | |||
|         run: make check test | ||||
|       - name: Archive built binaries | ||||
|         run: tar -cvf built-binaries.tar helmfile diff-yamls dyff | ||||
|       - uses: actions/upload-artifact@v5 | ||||
|       - uses: actions/upload-artifact@v4 | ||||
|         with: | ||||
|           name: built-binaries-${{ github.run_id }} | ||||
|           path: built-binaries.tar | ||||
|  | @ -92,7 +92,7 @@ jobs: | |||
|         with: | ||||
|           go-version-file: go.mod | ||||
| 
 | ||||
|       - uses: actions/download-artifact@v6 | ||||
|       - uses: actions/download-artifact@v5 | ||||
|         with: | ||||
|           name: built-binaries-${{ github.run_id }} | ||||
|       - name: install semver | ||||
|  | @ -127,7 +127,7 @@ jobs: | |||
|       - uses: actions/checkout@v5 | ||||
|         with: | ||||
|           fetch-depth: 0 | ||||
|       - uses: actions/download-artifact@v6 | ||||
|       - uses: actions/download-artifact@v5 | ||||
|         with: | ||||
|           name: built-binaries-${{ github.run_id }} | ||||
|       - name: Extract tar to get built binaries | ||||
|  |  | |||
|  | @ -30,17 +30,6 @@ jobs: | |||
|           go-version-file: go.mod | ||||
|       - name: check disk usage | ||||
|         run: df -h | ||||
|       - name: cleanup disk | ||||
|         run: | | ||||
|             sudo rm -rf /usr/share/dotnet | ||||
|             sudo rm -rf /opt/ghc | ||||
|             sudo rm -rf /usr/local/share/boost | ||||
|             sudo rm -fr /usr/local/lib/android | ||||
|             sudo rm -fr /opt/hostedtoolcache/CodeQL | ||||
|             sudo docker image prune --all --force | ||||
|             sudo docker builder prune -a | ||||
|       - name: check disk usage | ||||
|         run: df -h | ||||
|       - uses: goreleaser/goreleaser-action@v6 | ||||
|         with: | ||||
|           version: latest | ||||
|  |  | |||
|  | @ -12,11 +12,11 @@ RUN make static-${TARGETOS}-${TARGETARCH} | |||
| 
 | ||||
| # ----------------------------------------------------------------------------- | ||||
| 
 | ||||
| FROM alpine:3.22 | ||||
| FROM alpine:3.19 | ||||
| 
 | ||||
| LABEL org.opencontainers.image.source=https://github.com/helmfile/helmfile | ||||
| 
 | ||||
| RUN apk add --no-cache ca-certificates git bash curl jq yq openssh-client gnupg | ||||
| RUN apk add --no-cache ca-certificates git bash curl jq openssh-client gnupg | ||||
| 
 | ||||
| ARG TARGETARCH TARGETOS TARGETPLATFORM | ||||
| 
 | ||||
|  | @ -93,7 +93,7 @@ RUN set -x && \ | |||
|     [ "$(age --version)" = "${AGE_VERSION}" ] && \ | ||||
|     [ "$(age-keygen --version)" = "${AGE_VERSION}" ] | ||||
| 
 | ||||
| RUN helm plugin install https://github.com/databus23/helm-diff --version v3.13.1 && \ | ||||
| RUN helm plugin install https://github.com/databus23/helm-diff --version v3.13.0 && \ | ||||
|     helm plugin install https://github.com/jkroepke/helm-secrets --version v4.6.5 && \ | ||||
|     helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.16.3 && \ | ||||
|     helm plugin install https://github.com/aslafy-z/helm-git.git --version v1.3.0 && \ | ||||
|  |  | |||
|  | @ -25,9 +25,6 @@ RUN apt update -qq && \ | |||
| 
 | ||||
| ARG TARGETARCH TARGETOS TARGETPLATFORM | ||||
| 
 | ||||
| RUN wget https://github.com/mikefarah/yq/releases/latest/download/yq_${TARGETOS}_${TARGETARCH} -O /usr/local/bin/yq &&\ | ||||
|     chmod +x /usr/local/bin/yq | ||||
| 
 | ||||
| # Set Helm home variables so that also non-root users can use plugins etc. | ||||
| ARG HOME="/helm" | ||||
| ENV HOME="${HOME}" | ||||
|  | @ -102,7 +99,7 @@ RUN set -x && \ | |||
|     [ "$(age --version)" = "${AGE_VERSION}" ] && \ | ||||
|     [ "$(age-keygen --version)" = "${AGE_VERSION}" ] | ||||
| 
 | ||||
| RUN helm plugin install https://github.com/databus23/helm-diff --version v3.13.1 && \ | ||||
| RUN helm plugin install https://github.com/databus23/helm-diff --version v3.13.0 && \ | ||||
|     helm plugin install https://github.com/jkroepke/helm-secrets --version v4.6.5 && \ | ||||
|     helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.16.3 && \ | ||||
|     helm plugin install https://github.com/aslafy-z/helm-git.git --version v1.3.0 && \ | ||||
|  |  | |||
|  | @ -25,9 +25,6 @@ RUN apt update -qq && \ | |||
| 
 | ||||
| ARG TARGETARCH TARGETOS TARGETPLATFORM | ||||
| 
 | ||||
| RUN wget https://github.com/mikefarah/yq/releases/latest/download/yq_${TARGETOS}_${TARGETARCH} -O /usr/local/bin/yq &&\ | ||||
|     chmod +x /usr/local/bin/yq | ||||
| 
 | ||||
| # Set Helm home variables so that also non-root users can use plugins etc. | ||||
| ARG HOME="/helm" | ||||
| ENV HOME="${HOME}" | ||||
|  | @ -102,7 +99,7 @@ RUN set -x && \ | |||
|     [ "$(age --version)" = "${AGE_VERSION}" ] && \ | ||||
|     [ "$(age-keygen --version)" = "${AGE_VERSION}" ] | ||||
| 
 | ||||
| RUN helm plugin install https://github.com/databus23/helm-diff --version v3.13.1 && \ | ||||
| RUN helm plugin install https://github.com/databus23/helm-diff --version v3.13.0 && \ | ||||
|     helm plugin install https://github.com/jkroepke/helm-secrets --version v4.6.5 && \ | ||||
|     helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.16.3 && \ | ||||
|     helm plugin install https://github.com/aslafy-z/helm-git.git --version v1.3.0 && \ | ||||
|  |  | |||
|  | @ -17,7 +17,6 @@ | |||
| [](https://slack.sweetops.com) | ||||
| [](https://helmfile.readthedocs.io/en/latest/) | ||||
| [](https://gurubase.io/g/helmfile) | ||||
| [](https://zread.ai/helmfile/helmfile) | ||||
| 
 | ||||
| 声明式Helm Chart管理工具 | ||||
| <br /> | ||||
|  |  | |||
|  | @ -17,7 +17,6 @@ | |||
| [](https://slack.sweetops.com) | ||||
| [](https://helmfile.readthedocs.io/en/latest/) | ||||
| [](https://gurubase.io/g/helmfile) | ||||
| [](https://zread.ai/helmfile/helmfile) | ||||
| 
 | ||||
| Deploy Kubernetes Helm Charts | ||||
| <br /> | ||||
|  |  | |||
|  | @ -328,9 +328,6 @@ releases: | |||
|     reuseValues: false | ||||
|     # set `false` to uninstall this release on sync.  (default true) | ||||
|     installed: true | ||||
|     # Defines the strategy to use when updating. Possible value is: | ||||
|     # - "reinstallIfForbidden": Performs an uninstall before the update only if the update is forbidden (e.g., due to permission issues or conflicts). | ||||
|     updateStrategy: "" | ||||
|     # restores previous state in case of failed release (default false) | ||||
|     atomic: true | ||||
|     # when true, cleans up any new resources created during a failed release (default false) | ||||
|  |  | |||
							
								
								
									
										172
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										172
									
								
								go.mod
								
								
								
								
							|  | @ -6,17 +6,15 @@ require ( | |||
| 	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.31.15 | ||||
| 	github.com/aws/aws-sdk-go-v2/service/s3 v1.89.0 | ||||
| 	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc | ||||
| 	github.com/go-test/deep v1.1.1 | ||||
| 	github.com/golang/mock v1.6.0 | ||||
| 	github.com/google/go-cmp v0.7.0 | ||||
| 	github.com/gosuri/uitable v0.0.4 | ||||
| 	github.com/hashicorp/go-getter v1.8.2 | ||||
| 	github.com/hashicorp/go-getter v1.8.0 | ||||
| 	github.com/hashicorp/hcl/v2 v2.24.0 | ||||
| 	github.com/helmfile/chartify v0.25.0 | ||||
| 	github.com/helmfile/vals v0.42.4 | ||||
| 	github.com/helmfile/vals v0.42.1 | ||||
| 	github.com/spf13/cobra v1.10.1 | ||||
| 	github.com/spf13/pflag v1.0.10 | ||||
| 	github.com/stretchr/testify v1.11.1 | ||||
|  | @ -30,7 +28,7 @@ require ( | |||
| 	go.yaml.in/yaml/v2 v2.4.3 | ||||
| 	go.yaml.in/yaml/v3 v3.0.4 | ||||
| 	golang.org/x/sync v0.17.0 | ||||
| 	golang.org/x/term v0.36.0 | ||||
| 	golang.org/x/term v0.35.0 | ||||
| 	helm.sh/helm/v3 v3.19.0 | ||||
| 	k8s.io/apimachinery v0.34.1 | ||||
| ) | ||||
|  | @ -38,7 +36,7 @@ require ( | |||
| require ( | ||||
| 	cloud.google.com/go v0.121.6 // indirect | ||||
| 	cloud.google.com/go/iam v1.5.2 // indirect | ||||
| 	cloud.google.com/go/storage v1.57.0 // indirect | ||||
| 	cloud.google.com/go/storage v1.56.1 // indirect | ||||
| 	filippo.io/age v1.2.1 // indirect | ||||
| 	github.com/Azure/go-autorest v14.2.0+incompatible // indirect | ||||
| 	github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect | ||||
|  | @ -48,11 +46,12 @@ require ( | |||
| 	github.com/Azure/go-autorest/tracing v0.6.0 // indirect | ||||
| 	github.com/Masterminds/goutils v1.1.1 // indirect | ||||
| 	github.com/a8m/envsubst v1.4.3 // indirect | ||||
| 	github.com/aws/aws-sdk-go v1.55.7 | ||||
| 	github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect | ||||
| 	github.com/blang/semver v3.5.1+incompatible // indirect | ||||
| 	github.com/dimchansky/utfbom v1.1.1 // indirect | ||||
| 	github.com/fatih/color v1.18.0 | ||||
| 	github.com/fujiwara/tfstate-lookup v1.7.1 // indirect | ||||
| 	github.com/fujiwara/tfstate-lookup v1.7.0 // indirect | ||||
| 	github.com/golang-jwt/jwt/v4 v4.5.2 // indirect | ||||
| 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect | ||||
| 	github.com/google/go-querystring v1.1.0 // indirect | ||||
|  | @ -63,16 +62,18 @@ require ( | |||
| 	github.com/hashicorp/go-cleanhttp v0.5.2 // indirect | ||||
| 	github.com/hashicorp/go-multierror v1.1.1 // indirect | ||||
| 	github.com/hashicorp/go-rootcerts v1.0.2 // indirect | ||||
| 	github.com/hashicorp/go-safetemp v1.0.0 // indirect | ||||
| 	github.com/hashicorp/go-slug v0.16.4 // indirect | ||||
| 	github.com/hashicorp/go-sockaddr v1.0.7 // indirect | ||||
| 	github.com/hashicorp/go-tfe v1.84.0 // indirect | ||||
| 	github.com/hashicorp/golang-lru v1.0.2 // indirect | ||||
| 	github.com/hashicorp/hcl v1.0.1-vault-7 // indirect | ||||
| 	github.com/hashicorp/jsonapi v1.4.3-0.20250220162346-81a76b606f3e // indirect | ||||
| 	github.com/hashicorp/vault/api v1.22.0 // indirect | ||||
| 	github.com/hashicorp/vault/api v1.20.0 // indirect | ||||
| 	github.com/huandu/xstrings v1.5.0 // indirect | ||||
| 	github.com/inconshreveable/mousetrap v1.1.0 // indirect | ||||
| 	github.com/itchyny/gojq v0.12.16 // indirect | ||||
| 	github.com/jmespath/go-jmespath v0.4.0 // indirect | ||||
| 	github.com/klauspost/compress v1.18.0 // indirect | ||||
| 	github.com/lib/pq v1.10.9 // indirect | ||||
| 	github.com/mattn/go-colorable v0.1.14 // indirect | ||||
|  | @ -91,15 +92,15 @@ require ( | |||
| 	github.com/spf13/cast v1.7.0 // indirect | ||||
| 	github.com/ulikunitz/xz v0.5.15 // indirect | ||||
| 	go.uber.org/atomic v1.9.0 // indirect | ||||
| 	golang.org/x/net v0.44.0 // indirect | ||||
| 	golang.org/x/oauth2 v0.31.0 // indirect | ||||
| 	golang.org/x/sys v0.37.0 // indirect | ||||
| 	golang.org/x/text v0.29.0 // indirect | ||||
| 	golang.org/x/time v0.13.0 // indirect | ||||
| 	google.golang.org/api v0.252.0 // indirect | ||||
| 	golang.org/x/net v0.43.0 // indirect | ||||
| 	golang.org/x/oauth2 v0.30.0 // indirect | ||||
| 	golang.org/x/sys v0.36.0 // indirect | ||||
| 	golang.org/x/text v0.28.0 // indirect | ||||
| 	golang.org/x/time v0.12.0 // indirect | ||||
| 	google.golang.org/api v0.248.0 // indirect | ||||
| 	google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect | ||||
| 	google.golang.org/grpc v1.75.1 // indirect | ||||
| 	google.golang.org/protobuf v1.36.10 // indirect | ||||
| 	google.golang.org/grpc v1.74.2 // indirect | ||||
| 	google.golang.org/protobuf v1.36.7 // indirect | ||||
| 	gopkg.in/ini.v1 v1.67.0 // indirect | ||||
| 	sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect | ||||
| 	sigs.k8s.io/yaml v1.6.0 // indirect | ||||
|  | @ -108,10 +109,10 @@ require ( | |||
| require ( | ||||
| 	al.essio.dev/pkg/shellescape v1.6.0 // indirect | ||||
| 	cel.dev/expr v0.24.0 // indirect | ||||
| 	cloud.google.com/go/auth v0.17.0 // indirect | ||||
| 	cloud.google.com/go/auth v0.16.5 // indirect | ||||
| 	cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect | ||||
| 	cloud.google.com/go/compute/metadata v0.9.0 // indirect | ||||
| 	cloud.google.com/go/kms v1.23.0 // indirect | ||||
| 	cloud.google.com/go/compute/metadata v0.8.0 // indirect | ||||
| 	cloud.google.com/go/kms v1.22.0 // indirect | ||||
| 	cloud.google.com/go/longrunning v0.6.7 // indirect | ||||
| 	cloud.google.com/go/monitoring v1.24.2 // indirect | ||||
| 	cloud.google.com/go/secretmanager v1.15.0 // indirect | ||||
|  | @ -119,23 +120,23 @@ require ( | |||
| 	github.com/1Password/connect-sdk-go v1.5.3 // indirect | ||||
| 	github.com/1password/onepassword-sdk-go v0.3.1 // indirect | ||||
| 	github.com/AlecAivazis/survey/v2 v2.3.6 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.1 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.12.0 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.0 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.11.0 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.8.1 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.4.0 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.3.1 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.4.0 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.2.0 // indirect | ||||
| 	github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0 // indirect | ||||
| 	github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect | ||||
| 	github.com/AzureAD/microsoft-authentication-library-for-go v1.5.0 // indirect | ||||
| 	github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 // indirect | ||||
| 	github.com/DopplerHQ/cli v0.5.11-0.20230908185655-7aef4713e1a4 // indirect | ||||
| 	github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 // indirect | ||||
| 	github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 // indirect | ||||
| 	github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0 // indirect | ||||
| 	github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0 // indirect | ||||
| 	github.com/MakeNowJust/heredoc v1.0.0 // indirect | ||||
| 	github.com/Masterminds/squirrel v1.5.4 // indirect | ||||
| 	github.com/ProtonMail/go-crypto v1.3.0 // indirect | ||||
| 	github.com/ProtonMail/go-crypto v1.2.0 // indirect | ||||
| 	github.com/agext/levenshtein v1.2.3 // indirect | ||||
| 	github.com/antchfx/jsonquery v1.3.6 // indirect | ||||
| 	github.com/antchfx/xpath v1.3.5 // indirect | ||||
|  | @ -143,26 +144,28 @@ require ( | |||
| 	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.39.4 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.2 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/credentials v1.18.19 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.11 // 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.11 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.11 // 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.11 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.2 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.11 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.11 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/kms v1.45.6 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.39.6 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/ssm v1.65.1 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/sso v1.29.8 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.3 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/sts v1.38.9 // indirect | ||||
| 	github.com/aws/smithy-go v1.23.1 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2 v1.38.3 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/config v1.29.15 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/credentials v1.17.68 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.72 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.6 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.6 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/kms v1.38.3 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.39.2 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/ssm v1.64.2 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/sts v1.33.20 // indirect | ||||
| 	github.com/aws/smithy-go v1.23.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 | ||||
|  | @ -174,8 +177,8 @@ require ( | |||
| 	github.com/containerd/errdefs v0.3.0 // indirect | ||||
| 	github.com/containerd/log v0.1.0 // indirect | ||||
| 	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.7 // indirect | ||||
| 	github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect | ||||
| 	github.com/cyberark/conjur-api-go v0.13.3 // 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 | ||||
|  | @ -188,35 +191,23 @@ require ( | |||
| 	github.com/felixge/httpsnoop v1.0.4 // indirect | ||||
| 	github.com/fxamacker/cbor/v2 v2.9.0 // indirect | ||||
| 	github.com/getsops/gopgagent v0.0.0-20241224165529-7044f28e491e // indirect | ||||
| 	github.com/getsops/sops/v3 v3.11.0 // indirect | ||||
| 	github.com/getsops/sops/v3 v3.10.2 // indirect | ||||
| 	github.com/ghodss/yaml v1.0.0 // indirect | ||||
| 	github.com/go-errors/errors v1.4.2 // indirect | ||||
| 	github.com/go-gorp/gorp/v3 v3.1.0 // indirect | ||||
| 	github.com/go-jose/go-jose/v4 v4.1.1 // indirect | ||||
| 	github.com/go-jose/go-jose/v4 v4.0.5 // indirect | ||||
| 	github.com/go-logr/logr v1.4.3 // indirect | ||||
| 	github.com/go-logr/stdr v1.2.2 // indirect | ||||
| 	github.com/go-openapi/analysis v0.24.0 // indirect | ||||
| 	github.com/go-openapi/errors v0.22.3 // indirect | ||||
| 	github.com/go-openapi/jsonpointer v0.22.1 // indirect | ||||
| 	github.com/go-openapi/jsonreference v0.21.2 // indirect | ||||
| 	github.com/go-openapi/loads v0.23.1 // indirect | ||||
| 	github.com/go-openapi/runtime v0.29.0 // indirect | ||||
| 	github.com/go-openapi/spec v0.22.0 // indirect | ||||
| 	github.com/go-openapi/strfmt v0.24.0 // indirect | ||||
| 	github.com/go-openapi/swag v0.24.1 // indirect | ||||
| 	github.com/go-openapi/swag/cmdutils v0.24.0 // indirect | ||||
| 	github.com/go-openapi/swag/conv v0.25.1 // indirect | ||||
| 	github.com/go-openapi/swag/fileutils v0.25.1 // indirect | ||||
| 	github.com/go-openapi/swag/jsonname v0.25.1 // indirect | ||||
| 	github.com/go-openapi/swag/jsonutils v0.25.1 // indirect | ||||
| 	github.com/go-openapi/swag/loading v0.25.1 // indirect | ||||
| 	github.com/go-openapi/swag/mangling v0.25.1 // indirect | ||||
| 	github.com/go-openapi/swag/netutils v0.24.0 // indirect | ||||
| 	github.com/go-openapi/swag/stringutils v0.25.1 // indirect | ||||
| 	github.com/go-openapi/swag/typeutils v0.25.1 // indirect | ||||
| 	github.com/go-openapi/swag/yamlutils v0.25.1 // indirect | ||||
| 	github.com/go-openapi/validate v0.25.0 // indirect | ||||
| 	github.com/go-viper/mapstructure/v2 v2.4.0 // indirect | ||||
| 	github.com/go-openapi/analysis v0.23.0 // indirect | ||||
| 	github.com/go-openapi/errors v0.22.2 // indirect | ||||
| 	github.com/go-openapi/jsonpointer v0.21.0 // indirect | ||||
| 	github.com/go-openapi/jsonreference v0.21.0 // indirect | ||||
| 	github.com/go-openapi/loads v0.22.0 // indirect | ||||
| 	github.com/go-openapi/runtime v0.28.0 // indirect | ||||
| 	github.com/go-openapi/spec v0.21.0 // indirect | ||||
| 	github.com/go-openapi/strfmt v0.23.0 // indirect | ||||
| 	github.com/go-openapi/swag v0.23.1 // indirect | ||||
| 	github.com/go-openapi/validate v0.24.0 // indirect | ||||
| 	github.com/gobwas/glob v0.2.3 // indirect | ||||
| 	github.com/goccy/go-yaml v1.17.1 // indirect | ||||
| 	github.com/godbus/dbus/v5 v5.1.0 // indirect | ||||
|  | @ -231,15 +222,16 @@ require ( | |||
| 	github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect | ||||
| 	github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect | ||||
| 	github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.65 // indirect | ||||
| 	github.com/hashicorp/go-retryablehttp v0.7.8 // indirect | ||||
| 	github.com/hashicorp/go-retryablehttp v0.7.7 // indirect | ||||
| 	github.com/hashicorp/go-secure-stdlib/parseutil v0.2.0 // indirect | ||||
| 	github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect | ||||
| 	github.com/hashicorp/go-version v1.7.0 // indirect | ||||
| 	github.com/hashicorp/hcp-sdk-go v0.162.0 // indirect | ||||
| 	github.com/hashicorp/hcp-sdk-go v0.155.0 // indirect | ||||
| 	github.com/hokaccha/go-prettyjson v0.0.0-20211117102719-0474bc63780f // indirect | ||||
| 	github.com/ianlancetaylor/demangle v0.0.0-20240805132620-81f5be970eca // indirect | ||||
| 	github.com/itchyny/timefmt-go v0.1.6 // indirect | ||||
| 	github.com/jmoiron/sqlx v1.4.0 // indirect | ||||
| 	github.com/josharian/intern v1.0.0 // indirect | ||||
| 	github.com/json-iterator/go v1.1.12 // indirect | ||||
| 	github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect | ||||
| 	github.com/kylelemons/godebug v1.1.0 // indirect | ||||
|  | @ -247,6 +239,7 @@ require ( | |||
| 	github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect | ||||
| 	github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect | ||||
| 	github.com/lucasb-eyer/go-colorful v1.2.0 // indirect | ||||
| 	github.com/mailru/easyjson v0.9.0 // indirect | ||||
| 	github.com/mattn/go-isatty v0.0.20 // indirect | ||||
| 	github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect | ||||
| 	github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect | ||||
|  | @ -269,7 +262,6 @@ require ( | |||
| 	github.com/rivo/uniseg v0.4.7 // indirect | ||||
| 	github.com/rubenv/sql-migrate v1.8.0 // indirect | ||||
| 	github.com/russross/blackfriday/v2 v2.1.0 // indirect | ||||
| 	github.com/scaleway/scaleway-sdk-go v1.0.0-beta.33 // indirect | ||||
| 	github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 // indirect | ||||
| 	github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect | ||||
| 	github.com/tetratelabs/wabin v0.0.0-20230304001439-f6f874872834 // indirect | ||||
|  | @ -279,40 +271,40 @@ require ( | |||
| 	github.com/tidwall/pretty v1.2.0 // indirect | ||||
| 	github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect | ||||
| 	github.com/uber/jaeger-lib v2.4.1+incompatible // indirect | ||||
| 	github.com/urfave/cli v1.22.17 // indirect | ||||
| 	github.com/urfave/cli v1.22.16 // indirect | ||||
| 	github.com/x448/float16 v0.8.4 // indirect | ||||
| 	github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect | ||||
| 	github.com/xlab/treeprint v1.2.0 // indirect | ||||
| 	github.com/yandex-cloud/go-genproto v0.29.0 // indirect | ||||
| 	github.com/yandex-cloud/go-sdk v0.22.0 // indirect | ||||
| 	github.com/yandex-cloud/go-genproto v0.19.0 // indirect | ||||
| 	github.com/yandex-cloud/go-sdk v0.15.0 // indirect | ||||
| 	github.com/zalando/go-keyring v0.2.6 // indirect | ||||
| 	github.com/zeebo/errs v1.4.0 // indirect | ||||
| 	go.mongodb.org/mongo-driver v1.17.4 // indirect | ||||
| 	go.opentelemetry.io/auto/sdk v1.2.1 // indirect | ||||
| 	go.mongodb.org/mongo-driver v1.14.0 // indirect | ||||
| 	go.opentelemetry.io/auto/sdk v1.1.0 // indirect | ||||
| 	go.opentelemetry.io/contrib/detectors/gcp v1.36.0 // indirect | ||||
| 	go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect | ||||
| 	go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect | ||||
| 	go.opentelemetry.io/otel v1.38.0 // indirect | ||||
| 	go.opentelemetry.io/otel/metric v1.38.0 // indirect | ||||
| 	go.opentelemetry.io/otel/sdk v1.38.0 // indirect | ||||
| 	go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect | ||||
| 	go.opentelemetry.io/otel/trace v1.38.0 // indirect | ||||
| 	go.opentelemetry.io/otel v1.36.0 // indirect | ||||
| 	go.opentelemetry.io/otel/metric v1.36.0 // indirect | ||||
| 	go.opentelemetry.io/otel/sdk v1.36.0 // indirect | ||||
| 	go.opentelemetry.io/otel/sdk/metric v1.36.0 // indirect | ||||
| 	go.opentelemetry.io/otel/trace v1.36.0 // indirect | ||||
| 	go.opentelemetry.io/proto/otlp v1.5.0 // indirect | ||||
| 	go.uber.org/multierr v1.11.0 // indirect | ||||
| 	golang.org/x/crypto v0.42.0 // indirect | ||||
| 	golang.org/x/mod v0.27.0 // indirect | ||||
| 	golang.org/x/tools v0.36.0 // indirect | ||||
| 	golang.org/x/crypto v0.41.0 // indirect | ||||
| 	golang.org/x/mod v0.26.0 // indirect | ||||
| 	golang.org/x/tools v0.35.0 // indirect | ||||
| 	google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c // indirect | ||||
| 	gopkg.in/evanphx/json-patch.v4 v4.12.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.1 // indirect | ||||
| 	k8s.io/api v0.34.0 // indirect | ||||
| 	k8s.io/apiextensions-apiserver v0.34.0 // indirect | ||||
| 	k8s.io/cli-runtime v0.34.0 // indirect | ||||
| 	k8s.io/client-go v0.34.1 // indirect | ||||
| 	k8s.io/client-go v0.34.0 // indirect | ||||
| 	k8s.io/component-base v0.34.0 // indirect | ||||
| 	k8s.io/klog/v2 v2.130.1 // indirect | ||||
| 	k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect | ||||
|  |  | |||
							
								
								
									
										361
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										361
									
								
								go.sum
								
								
								
								
							|  | @ -6,16 +6,16 @@ cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= | |||
| cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= | ||||
| cloud.google.com/go v0.121.6 h1:waZiuajrI28iAf40cWgycWNgaXPO06dupuS+sgibK6c= | ||||
| cloud.google.com/go v0.121.6/go.mod h1:coChdst4Ea5vUpiALcYKXEpR1S9ZgXbhEzzMcMR66vI= | ||||
| cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4= | ||||
| cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= | ||||
| cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= | ||||
| cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= | ||||
| cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= | ||||
| cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= | ||||
| cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= | ||||
| cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= | ||||
| cloud.google.com/go/compute/metadata v0.8.0 h1:HxMRIbao8w17ZX6wBnjhcDkW6lTFpgcaobyVfZWqRLA= | ||||
| cloud.google.com/go/compute/metadata v0.8.0/go.mod h1:sYOGTp851OV9bOFJ9CH7elVvyzopvWQFNNghtDQ/Biw= | ||||
| cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= | ||||
| cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= | ||||
| cloud.google.com/go/kms v1.23.0 h1:WaqAZsUptyHwOo9II8rFC1Kd2I+yvNsNP2IJ14H2sUw= | ||||
| cloud.google.com/go/kms v1.23.0/go.mod h1:rZ5kK0I7Kn9W4erhYVoIRPtpizjunlrfU4fUkumUp8g= | ||||
| cloud.google.com/go/kms v1.22.0 h1:dBRIj7+GDeeEvatJeTB19oYZNV0aj6wEqSIT/7gLqtk= | ||||
| cloud.google.com/go/kms v1.22.0/go.mod h1:U7mf8Sva5jpOb4bxYZdtw/9zsbIjrklYwPcvMk34AL8= | ||||
| cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= | ||||
| cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= | ||||
| cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= | ||||
|  | @ -24,8 +24,8 @@ cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7d | |||
| cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= | ||||
| cloud.google.com/go/secretmanager v1.15.0 h1:RtkCMgTpaBMbzozcRUGfZe46jb9a3qh5EdEtVRUATF8= | ||||
| cloud.google.com/go/secretmanager v1.15.0/go.mod h1:1hQSAhKK7FldiYw//wbR/XPfPc08eQ81oBsnRUHEvUc= | ||||
| cloud.google.com/go/storage v1.57.0 h1:4g7NB7Ta7KetVbOMpCqy89C+Vg5VE8scqlSHUPm7Rds= | ||||
| cloud.google.com/go/storage v1.57.0/go.mod h1:329cwlpzALLgJuu8beyJ/uvQznDHpa2U5lGjWednkzg= | ||||
| cloud.google.com/go/storage v1.56.1 h1:n6gy+yLnHn0hTwBFzNn8zJ1kqWfR91wzdM8hjRF4wP0= | ||||
| cloud.google.com/go/storage v1.56.1/go.mod h1:C9xuCZgFl3buo2HZU/1FncgvvOgTAs/rnh4gF4lMg0s= | ||||
| cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= | ||||
| cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= | ||||
| dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= | ||||
|  | @ -42,10 +42,10 @@ github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9 | |||
| github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= | ||||
| github.com/AlecAivazis/survey/v2 v2.3.6 h1:NvTuVHISgTHEHeBFqt6BHOe4Ny/NwGZr7w+F8S9ziyw= | ||||
| github.com/AlecAivazis/survey/v2 v2.3.6/go.mod h1:4AuI9b7RjAR+G7v9+C4YSlX/YL3K3cWNXgWXOhllqvI= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.1 h1:5YTBM8QDVIBN3sxBil89WfdAAqDZbyJTgh688DSxX5w= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.1/go.mod h1:YD5h/ldMsG0XiIw7PdyNhLxaM317eFh5yNLccNfGdyw= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.12.0 h1:wL5IEG5zb7BVv1Kv0Xm92orq+5hB5Nipn3B5tn4Rqfk= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.12.0/go.mod h1:J7MUC/wtRpfGVbQ5sIItY5/FuVWmvzlY21WAOfQnq/I= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.0 h1:ci6Yd6nysBRLEodoziB6ah1+YOzZbZk+NYneoA6q+6E= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.0/go.mod h1:QyVsSSN64v5TGltphKLQ2sQxe4OBQg0J1eKRcVBnfgE= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.11.0 h1:MhRfI58HblXzCtWEZCO0feHs8LweePB3s90r7WaR1KU= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.11.0/go.mod h1:okZ+ZURbArNdlJ+ptXoyHNuOETzOl1Oww19rm8I2WLA= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 h1:9iefClla7iYpfYWdzPCRDozdmndjTm8DXdpCzPajMgA= | ||||
|  | @ -56,8 +56,8 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1. | |||
| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0/go.mod h1:5kakwfW5CjC9KK+Q4wjXAg+ShuIm2mBMua0ZFj2C8PE= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.8.1 h1:/Zt+cDPnpC3OVDm/JKLOs7M2DKmLRIIp3XIx9pHHiig= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.8.1/go.mod h1:Ng3urmn6dYe8gnbCMoHHVl5APYz2txho3koEkV2o2HA= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.4.0 h1:E4MgwLBGeVB5f2MdcIVD3ELVAWpr+WD6MUe1i+tM/PA= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.4.0/go.mod h1:Y2b/1clN4zsAoUd/pgNAQHjLDnTis/6ROkUfyob6psM= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.3.1 h1:Wgf5rZba3YZqeTNJPtvqZoBu1sBN/L4sry+u2U3Y75w= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.3.1/go.mod h1:xxCBG/f/4Vbmh2XQJBsOmNdxWUY5j/s27jujKPbQf14= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.4.0 h1:/g8S6wk65vfC6m3FIxJ+i5QDyN9JWwXI8Hb0Img10hU= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.4.0/go.mod h1:gpl+q95AzZlKVI3xSoseF9QPrypk0hQqBiJYeB/cR/I= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.2.0 h1:nCYfgcSyHZXJI8J0IWE5MsCGlb2xp9fJiXyxWgmOFg4= | ||||
|  | @ -84,15 +84,15 @@ github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUM | |||
| github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= | ||||
| github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM= | ||||
| github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE= | ||||
| github.com/AzureAD/microsoft-authentication-library-for-go v1.5.0 h1:XkkQbfMyuH2jTSjQjSoihryI8GINRcs4xp8lNawg0FI= | ||||
| github.com/AzureAD/microsoft-authentication-library-for-go v1.5.0/go.mod h1:HKpQxkWaGLJ+D/5H8QRpyQXA1eKjxkFlOMwck5+33Jk= | ||||
| github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= | ||||
| github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 h1:oygO0locgZJe7PpYPXT5A29ZkwJaPqcva7BVeemZOZs= | ||||
| github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= | ||||
| github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= | ||||
| github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= | ||||
| github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= | ||||
| github.com/DopplerHQ/cli v0.5.11-0.20230908185655-7aef4713e1a4 h1:s7/zwMi5w+KnlumDVbX1+P6mNAk5o7Wvx0VmvrQ7Bm0= | ||||
| github.com/DopplerHQ/cli v0.5.11-0.20230908185655-7aef4713e1a4/go.mod h1:ipnA9Lpn5YM+FDSQZ7VWNjcuVurchInoGKm+v7O0sGs= | ||||
| github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0 h1:UQUsRi8WTzhZntp5313l+CHIAT95ojUI2lpP/ExlZa4= | ||||
| github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw= | ||||
| github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 h1:ErKg/3iS1AKcTkf3yixlZ54f9U1rljCkQyEXWUnIUxc= | ||||
| github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0/go.mod h1:yAZHSGnqScoU556rBOVkwLze6WP5N+U11RHuWaGVxwY= | ||||
| github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0 h1:owcC2UnmsZycprQ5RfRgjydWhuoxg71LUfyiQdijZuM= | ||||
| github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0/go.mod h1:ZPpqegjbE99EPKsu3iUWV22A04wzGPcAY/ziSIQEEgs= | ||||
| github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.53.0 h1:4LP6hvB4I5ouTbGgWtixJhgED6xdf67twf9PoY96Tbg= | ||||
|  | @ -117,8 +117,8 @@ github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63n | |||
| github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= | ||||
| github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= | ||||
| github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= | ||||
| github.com/ProtonMail/go-crypto v1.3.0 h1:ILq8+Sf5If5DCpHQp4PbZdS1J7HDFRXz/+xKBiRGFrw= | ||||
| github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE= | ||||
| github.com/ProtonMail/go-crypto v1.2.0 h1:+PhXXn4SPGd+qk76TlEePBfOfivE0zkWFenhGhFLzWs= | ||||
| github.com/ProtonMail/go-crypto v1.2.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE= | ||||
| github.com/a8m/envsubst v1.4.3 h1:kDF7paGK8QACWYaQo6KtyYBozY2jhQrTuNNuUxQkhJY= | ||||
| github.com/a8m/envsubst v1.4.3/go.mod h1:4jjHWQlZoaXPoLQUb7H2qT4iLkZDdmEQiOUogdUmqVU= | ||||
| github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= | ||||
|  | @ -138,52 +138,52 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3d | |||
| github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= | ||||
| github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= | ||||
| 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.39.4 h1:qTsQKcdQPHnfGYBBs+Btl8QwxJeoWcOcPcixK90mRhg= | ||||
| github.com/aws/aws-sdk-go-v2 v1.39.4/go.mod h1:yWSxrnioGUZ4WVv9TgMrNUeLV3PFESn/v+6T/Su8gnM= | ||||
| github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.2 h1:t9yYsydLYNBk9cJ73rgPhPWqOh/52fcWDQB5b1JsKSY= | ||||
| github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.2/go.mod h1:IusfVNTmiSN3t4rhxWFaBAqn+mcNdwKtPcV16eYdgko= | ||||
| github.com/aws/aws-sdk-go-v2/config v1.31.15 h1:gE3M4xuNXfC/9bG4hyowGm/35uQTi7bUKeYs5e/6uvU= | ||||
| github.com/aws/aws-sdk-go-v2/config v1.31.15/go.mod h1:HvnvGJoE2I95KAIW8kkWVPJ4XhdrlvwJpV6pEzFQa8o= | ||||
| github.com/aws/aws-sdk-go-v2/credentials v1.18.19 h1:Jc1zzwkSY1QbkEcLujwqRTXOdvW8ppND3jRBb/VhBQc= | ||||
| github.com/aws/aws-sdk-go-v2/credentials v1.18.19/go.mod h1:DIfQ9fAk5H0pGtnqfqkbSIzky82qYnGvh06ASQXXg6A= | ||||
| github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.11 h1:X7X4YKb+c0rkI6d4uJ5tEMxXgCZ+jZ/D6mvkno8c8Uw= | ||||
| github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.11/go.mod h1:EqM6vPZQsZHYvC4Cai35UDg/f5NCEU+vp0WfbVqVcZc= | ||||
| 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.11 h1:7AANQZkF3ihM8fbdftpjhken0TP9sBzFbV/Ze/Y4HXA= | ||||
| github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.11/go.mod h1:NTF4QCGkm6fzVwncpkFQqoquQyOolcyXfbpC98urj+c= | ||||
| github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.11 h1:ShdtWUZT37LCAA4Mw2kJAJtzaszfSHFb5n25sdcv4YE= | ||||
| github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.11/go.mod h1:7bUb2sSr2MZ3M/N+VyETLTQtInemHXb/Fl3s8CLzm0Y= | ||||
| 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.11 h1:bKgSxk1TW//00PGQqYmrq83c+2myGidEclp+t9pPqVI= | ||||
| github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.11/go.mod h1:vrPYCQ6rFHL8jzQA8ppu3gWX18zxjLIDGTeqDxkBmSI= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2 h1:xtuxji5CS0JknaXoACOunXOYOQzgfTvGAc9s2QdCJA4= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2/go.mod h1:zxwi0DIR0rcRcgdbl7E2MSOvxDyyXGBlScvBkARFaLQ= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.2 h1:DGFpGybmutVsCuF6vSuLZ25Vh55E3VmsnJmFfjeBx4M= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.2/go.mod h1:hm/wU1HDvXCFEDzOLorQnZZ/CVvPXvWEmHMSmqgQRuA= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.11 h1:GpMf3z2KJa4RnJ0ew3Hac+hRFYLZ9DDjfgXjuW+pB54= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.11/go.mod h1:6MZP3ZI4QQsgUCFTwMZA2V0sEriNQ8k2hmoHF3qjimQ= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.11 h1:weapBOuuFIBEQ9OX/NVW3tFQCvSutyjZYk/ga5jDLPo= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.11/go.mod h1:3C1gN4FmIVLwYSh8etngUS+f1viY6nLCDVtZmrFbDy0= | ||||
| github.com/aws/aws-sdk-go-v2/service/kms v1.45.6 h1:Br3kil4j7RPW+7LoLVkYt8SuhIWlg6ylmbmzXJ7PgXY= | ||||
| github.com/aws/aws-sdk-go-v2/service/kms v1.45.6/go.mod h1:FKXkHzw1fJZtg1P1qoAIiwen5thz/cDRTTDCIu8ljxc= | ||||
| github.com/aws/aws-sdk-go-v2/service/s3 v1.89.0 h1:JbCUlVDEjmhpvpIgXP9QN+/jW61WWWj99cGmxMC49hM= | ||||
| github.com/aws/aws-sdk-go-v2/service/s3 v1.89.0/go.mod h1:UHKgcRSx8PVtvsc1Poxb/Co3PD3wL7P+f49P0+cWtuY= | ||||
| github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.39.6 h1:9PWl450XOG+m5lKv+qg5BXso1eLxpsZLqq7VPug5km0= | ||||
| github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.39.6/go.mod h1:hwt7auGsDcaNQ8pzLgE2kCNyIWouYlAKSjuUu5Dqr7I= | ||||
| github.com/aws/aws-sdk-go-v2/service/ssm v1.65.1 h1:TFg6XiS7EsHN0/jpV3eVNczZi/sPIVP5jxIs+euIESQ= | ||||
| github.com/aws/aws-sdk-go-v2/service/ssm v1.65.1/go.mod h1:OIezd9K0sM/64DDP4kXx/i0NdgXu6R5KE6SCsIPJsjc= | ||||
| github.com/aws/aws-sdk-go-v2/service/sso v1.29.8 h1:M5nimZmugcZUO9wG7iVtROxPhiqyZX6ejS1lxlDPbTU= | ||||
| github.com/aws/aws-sdk-go-v2/service/sso v1.29.8/go.mod h1:mbef/pgKhtKRwrigPPs7SSSKZgytzP8PQ6P6JAAdqyM= | ||||
| github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.3 h1:S5GuJZpYxE0lKeMHKn+BRTz6PTFpgThyJ+5mYfux7BM= | ||||
| github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.3/go.mod h1:X4OF+BTd7HIb3L+tc4UlWHVrpgwZZIVENU15pRDVTI0= | ||||
| github.com/aws/aws-sdk-go-v2/service/sts v1.38.9 h1:Ekml5vGg6sHSZLZJQJagefnVe6PmqC2oiRkBq4F7fU0= | ||||
| github.com/aws/aws-sdk-go-v2/service/sts v1.38.9/go.mod h1:/e15V+o1zFHWdH3u7lpI3rVBcxszktIKuHKCY2/py+k= | ||||
| github.com/aws/smithy-go v1.23.1 h1:sLvcH6dfAFwGkHLZ7dGiYF7aK6mg4CgKA/iDKjLDt9M= | ||||
| github.com/aws/smithy-go v1.23.1/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0= | ||||
| github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE= | ||||
| github.com/aws/aws-sdk-go v1.55.7/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= | ||||
| github.com/aws/aws-sdk-go-v2 v1.38.3 h1:B6cV4oxnMs45fql4yRH+/Po/YU+597zgWqvDpYMturk= | ||||
| github.com/aws/aws-sdk-go-v2 v1.38.3/go.mod h1:sDioUELIUO9Znk23YVmIk86/9DOpkbyyVb1i/gUNFXY= | ||||
| github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 h1:zAybnyUQXIZ5mok5Jqwlf58/TFE7uvd3IAsa1aF9cXs= | ||||
| github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10/go.mod h1:qqvMj6gHLR/EXWZw4ZbqlPbQUyenf4h82UQUlKc+l14= | ||||
| github.com/aws/aws-sdk-go-v2/config v1.29.15 h1:I5XjesVMpDZXZEZonVfjI12VNMrYa38LtLnw4NtY5Ss= | ||||
| github.com/aws/aws-sdk-go-v2/config v1.29.15/go.mod h1:tNIp4JIPonlsgaO5hxO372a6gjhN63aSWl2GVl5QoBQ= | ||||
| github.com/aws/aws-sdk-go-v2/credentials v1.17.68 h1:cFb9yjI02/sWHBSYXAtkamjzCuRymvmeFmt0TC0MbYY= | ||||
| github.com/aws/aws-sdk-go-v2/credentials v1.17.68/go.mod h1:H6E+jBzyqUu8u0vGaU6POkK3P0NylYEeRZ6ynBpMqIk= | ||||
| github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw= | ||||
| github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M= | ||||
| github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.72 h1:PcKMOZfp+kNtJTw2HF2op6SjDvwPBYRvz0Y24PQLUR4= | ||||
| github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.72/go.mod h1:vq7/m7dahFXcdzWVOvvjasDI9RcsD3RsTfHmDundJYg= | ||||
| github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.6 h1:uF68eJA6+S9iVr9WgX1NaRGyQ/6MdIyc4JNUo6TN1FA= | ||||
| github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.6/go.mod h1:qlPeVZCGPiobx8wb1ft0GHT5l+dc6ldnwInDFaMvC7Y= | ||||
| github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.6 h1:pa1DEC6JoI0zduhZePp3zmhWvk/xxm4NB8Hy/Tlsgos= | ||||
| github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.6/go.mod h1:gxEjPebnhWGJoaDdtDkA0JX46VRg1wcTHYe63OfX5pE= | ||||
| github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo= | ||||
| github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= | ||||
| github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcuz+RjeziUtNJackkM= | ||||
| github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2 h1:BCG7DCXEXpNCcpwCxg1oi9pkJWH2+eZzTn9MY56MbVw= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 h1:moLQUoVq91LiqT1nbvzDukyqAlCv89ZmwaHw/ZFlFZg= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15/go.mod h1:ZH34PJUc8ApjBIfgQCFvkWcUDBtl/WTD+uiYHjd8igA= | ||||
| github.com/aws/aws-sdk-go-v2/service/kms v1.38.3 h1:RivOtUH3eEu6SWnUMFHKAW4MqDOzWn1vGQ3S38Y5QMg= | ||||
| github.com/aws/aws-sdk-go-v2/service/kms v1.38.3/go.mod h1:cQn6tAF77Di6m4huxovNM7NVAozWTZLsDRp9t8Z/WYk= | ||||
| github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1 h1:xYEAf/6QHiTZDccKnPMbsMwlau13GsDsTgdue3wmHGw= | ||||
| github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1/go.mod h1:qbn305Je/IofWBJ4bJz/Q7pDEtnnoInw/dGt71v6rHE= | ||||
| github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.39.2 h1:QMayWWWmfWyQwP4nZf3qdIVS39Pm65Yi5waYj1euCzo= | ||||
| github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.39.2/go.mod h1:4eAXC8WdO1rRt01ZKKq57z8oTzzLkkIo5IReQ+b8hEU= | ||||
| github.com/aws/aws-sdk-go-v2/service/ssm v1.64.2 h1:6P4W42RUTZixRG6TgfRB8KlsqNzHtvBhs6sTbkVPZvk= | ||||
| github.com/aws/aws-sdk-go-v2/service/ssm v1.64.2/go.mod h1:wtxdacy3oO5sHO03uOtk8HMGfgo1gBHKwuJdYM220i0= | ||||
| github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 h1:1Gw+9ajCV1jogloEv1RRnvfRFia2cL6c9cuKV2Ps+G8= | ||||
| github.com/aws/aws-sdk-go-v2/service/sso v1.25.3/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= | ||||
| github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 h1:hXmVKytPfTy5axZ+fYbR5d0cFmC3JvwLm5kM83luako= | ||||
| github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs= | ||||
| github.com/aws/aws-sdk-go-v2/service/sts v1.33.20 h1:oIaQ1e17CSKaWmUTu62MtraRWVIosn/iONMuZt0gbqc= | ||||
| github.com/aws/aws-sdk-go-v2/service/sts v1.33.20/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= | ||||
| github.com/aws/smithy-go v1.23.0 h1:8n6I3gXzWJB2DxBDnfxgBaSX6oe0d/t10qGz7OKqMCE= | ||||
| github.com/aws/smithy-go v1.23.0/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= | ||||
| 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= | ||||
|  | @ -218,14 +218,14 @@ github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpS | |||
| github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= | ||||
| github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= | ||||
| github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= | ||||
| github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= | ||||
| github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0= | ||||
| github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= | ||||
| github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= | ||||
| github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= | ||||
| github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= | ||||
| github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= | ||||
| github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= | ||||
| github.com/cyberark/conjur-api-go v0.13.7 h1:pyjdGKYLuMEdtFklin6c+TY8AvLKePw77rbQFwATMTI= | ||||
| github.com/cyberark/conjur-api-go v0.13.7/go.mod h1:xGi4RCulvsc+x/jYRrxUoEShznhlKP/4hJC/4+lueFg= | ||||
| github.com/cyberark/conjur-api-go v0.13.3 h1:XJ7q1TOWJxi+zZZWB6aouOh6Ucie2hGsEUUoOmuTCbU= | ||||
| github.com/cyberark/conjur-api-go v0.13.3/go.mod h1:puGQ9GN98LepLTlRt7CaLm3DkQVmsGrih/TBA3bw2J0= | ||||
| 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= | ||||
|  | @ -282,79 +282,55 @@ github.com/foxcpp/go-mockdns v1.1.0 h1:jI0rD8M0wuYAxL7r/ynTrCQQq0BVqfB99Vgk7Dlme | |||
| github.com/foxcpp/go-mockdns v1.1.0/go.mod h1:IhLeSFGed3mJIAXPH2aiRQB+kqz7oqu8ld2qVbOu7Wk= | ||||
| github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= | ||||
| github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= | ||||
| github.com/fujiwara/tfstate-lookup v1.7.1 h1:zuZj5tSHIkD5HJG2ZyPL1H3bmlb6sgj5M46YBhwnevw= | ||||
| github.com/fujiwara/tfstate-lookup v1.7.1/go.mod h1:D1/ehHmOvN06Hdpob66BUg6851257fxzNrpRilhnwxQ= | ||||
| github.com/fujiwara/tfstate-lookup v1.7.0 h1:LLGy0A+TCeyHy8U5CtchGfEwD/94pJvSyd3oa4I/oAU= | ||||
| github.com/fujiwara/tfstate-lookup v1.7.0/go.mod h1:D1/ehHmOvN06Hdpob66BUg6851257fxzNrpRilhnwxQ= | ||||
| github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= | ||||
| github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= | ||||
| github.com/getsops/gopgagent v0.0.0-20241224165529-7044f28e491e h1:y/1nzrdF+RPds4lfoEpNhjfmzlgZtPqyO3jMzrqDQws= | ||||
| github.com/getsops/gopgagent v0.0.0-20241224165529-7044f28e491e/go.mod h1:awFzISqLJoZLm+i9QQ4SgMNHDqljH6jWV0B36V5MrUM= | ||||
| github.com/getsops/sops/v3 v3.11.0 h1:HsJhfZDcLMBZSphnTXIcsS9oR5jJgzSivo0j9zf8KVY= | ||||
| github.com/getsops/sops/v3 v3.11.0/go.mod h1:KiyVXNRMIEPCSAiapB8e8u+AaQGFgLlWo4Sk9PNTso0= | ||||
| github.com/getsops/sops/v3 v3.10.2 h1:7t7lBXFcXJPsDMrpYoI36r8xIhjWUmEc8Qdjuwyo+WY= | ||||
| github.com/getsops/sops/v3 v3.10.2/go.mod h1:Dmtg1qKzFsAl+yqvMgjtnLGTC0l7RnSM6DDtFG7TEsk= | ||||
| github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= | ||||
| github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= | ||||
| github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= | ||||
| github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= | ||||
| github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs= | ||||
| github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw= | ||||
| github.com/go-jose/go-jose/v4 v4.1.1 h1:JYhSgy4mXXzAdF3nUx3ygx347LRXJRrpgyU3adRmkAI= | ||||
| github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA= | ||||
| github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= | ||||
| github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= | ||||
| github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | ||||
| github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= | ||||
| github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | ||||
| github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= | ||||
| github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= | ||||
| github.com/go-openapi/analysis v0.24.0 h1:vE/VFFkICKyYuTWYnplQ+aVr45vlG6NcZKC7BdIXhsA= | ||||
| github.com/go-openapi/analysis v0.24.0/go.mod h1:GLyoJA+bvmGGaHgpfeDh8ldpGo69fAJg7eeMDMRCIrw= | ||||
| github.com/go-openapi/errors v0.22.3 h1:k6Hxa5Jg1TUyZnOwV2Lh81j8ayNw5VVYLvKrp4zFKFs= | ||||
| github.com/go-openapi/errors v0.22.3/go.mod h1:+WvbaBBULWCOna//9B9TbLNGSFOfF8lY9dw4hGiEiKQ= | ||||
| github.com/go-openapi/jsonpointer v0.22.1 h1:sHYI1He3b9NqJ4wXLoJDKmUmHkWy/L7rtEo92JUxBNk= | ||||
| github.com/go-openapi/jsonpointer v0.22.1/go.mod h1:pQT9OsLkfz1yWoMgYFy4x3U5GY5nUlsOn1qSBH5MkCM= | ||||
| github.com/go-openapi/jsonreference v0.21.2 h1:Wxjda4M/BBQllegefXrY/9aq1fxBA8sI5M/lFU6tSWU= | ||||
| github.com/go-openapi/jsonreference v0.21.2/go.mod h1:pp3PEjIsJ9CZDGCNOyXIQxsNuroxm8FAJ/+quA0yKzQ= | ||||
| github.com/go-openapi/loads v0.23.1 h1:H8A0dX2KDHxDzc797h0+uiCZ5kwE2+VojaQVaTlXvS0= | ||||
| github.com/go-openapi/loads v0.23.1/go.mod h1:hZSXkyACCWzWPQqizAv/Ye0yhi2zzHwMmoXQ6YQml44= | ||||
| github.com/go-openapi/runtime v0.29.0 h1:Y7iDTFarS9XaFQ+fA+lBLngMwH6nYfqig1G+pHxMRO0= | ||||
| github.com/go-openapi/runtime v0.29.0/go.mod h1:52HOkEmLL/fE4Pg3Kf9nxc9fYQn0UsIWyGjGIJE9dkg= | ||||
| github.com/go-openapi/spec v0.22.0 h1:xT/EsX4frL3U09QviRIZXvkh80yibxQmtoEvyqug0Tw= | ||||
| github.com/go-openapi/spec v0.22.0/go.mod h1:K0FhKxkez8YNS94XzF8YKEMULbFrRw4m15i2YUht4L0= | ||||
| github.com/go-openapi/strfmt v0.24.0 h1:dDsopqbI3wrrlIzeXRbqMihRNnjzGC+ez4NQaAAJLuc= | ||||
| github.com/go-openapi/strfmt v0.24.0/go.mod h1:Lnn1Bk9rZjXxU9VMADbEEOo7D7CDyKGLsSKekhFr7s4= | ||||
| github.com/go-openapi/swag v0.24.1 h1:DPdYTZKo6AQCRqzwr/kGkxJzHhpKxZ9i/oX0zag+MF8= | ||||
| github.com/go-openapi/swag v0.24.1/go.mod h1:sm8I3lCPlspsBBwUm1t5oZeWZS0s7m/A+Psg0ooRU0A= | ||||
| github.com/go-openapi/swag/cmdutils v0.24.0 h1:KlRCffHwXFI6E5MV9n8o8zBRElpY4uK4yWyAMWETo9I= | ||||
| github.com/go-openapi/swag/cmdutils v0.24.0/go.mod h1:uxib2FAeQMByyHomTlsP8h1TtPd54Msu2ZDU/H5Vuf8= | ||||
| github.com/go-openapi/swag/conv v0.25.1 h1:+9o8YUg6QuqqBM5X6rYL/p1dpWeZRhoIt9x7CCP+he0= | ||||
| github.com/go-openapi/swag/conv v0.25.1/go.mod h1:Z1mFEGPfyIKPu0806khI3zF+/EUXde+fdeksUl2NiDs= | ||||
| github.com/go-openapi/swag/fileutils v0.25.1 h1:rSRXapjQequt7kqalKXdcpIegIShhTPXx7yw0kek2uU= | ||||
| github.com/go-openapi/swag/fileutils v0.25.1/go.mod h1:+NXtt5xNZZqmpIpjqcujqojGFek9/w55b3ecmOdtg8M= | ||||
| github.com/go-openapi/swag/jsonname v0.25.1 h1:Sgx+qbwa4ej6AomWC6pEfXrA6uP2RkaNjA9BR8a1RJU= | ||||
| github.com/go-openapi/swag/jsonname v0.25.1/go.mod h1:71Tekow6UOLBD3wS7XhdT98g5J5GR13NOTQ9/6Q11Zo= | ||||
| github.com/go-openapi/swag/jsonutils v0.25.1 h1:AihLHaD0brrkJoMqEZOBNzTLnk81Kg9cWr+SPtxtgl8= | ||||
| github.com/go-openapi/swag/jsonutils v0.25.1/go.mod h1:JpEkAjxQXpiaHmRO04N1zE4qbUEg3b7Udll7AMGTNOo= | ||||
| github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.1 h1:DSQGcdB6G0N9c/KhtpYc71PzzGEIc/fZ1no35x4/XBY= | ||||
| github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.1/go.mod h1:kjmweouyPwRUEYMSrbAidoLMGeJ5p6zdHi9BgZiqmsg= | ||||
| github.com/go-openapi/swag/loading v0.25.1 h1:6OruqzjWoJyanZOim58iG2vj934TysYVptyaoXS24kw= | ||||
| github.com/go-openapi/swag/loading v0.25.1/go.mod h1:xoIe2EG32NOYYbqxvXgPzne989bWvSNoWoyQVWEZicc= | ||||
| github.com/go-openapi/swag/mangling v0.25.1 h1:XzILnLzhZPZNtmxKaz/2xIGPQsBsvmCjrJOWGNz/ync= | ||||
| github.com/go-openapi/swag/mangling v0.25.1/go.mod h1:CdiMQ6pnfAgyQGSOIYnZkXvqhnnwOn997uXZMAd/7mQ= | ||||
| github.com/go-openapi/swag/netutils v0.24.0 h1:Bz02HRjYv8046Ycg/w80q3g9QCWeIqTvlyOjQPDjD8w= | ||||
| github.com/go-openapi/swag/netutils v0.24.0/go.mod h1:WRgiHcYTnx+IqfMCtu0hy9oOaPR0HnPbmArSRN1SkZM= | ||||
| github.com/go-openapi/swag/stringutils v0.25.1 h1:Xasqgjvk30eUe8VKdmyzKtjkVjeiXx1Iz0zDfMNpPbw= | ||||
| github.com/go-openapi/swag/stringutils v0.25.1/go.mod h1:JLdSAq5169HaiDUbTvArA2yQxmgn4D6h4A+4HqVvAYg= | ||||
| github.com/go-openapi/swag/typeutils v0.25.1 h1:rD/9HsEQieewNt6/k+JBwkxuAHktFtH3I3ysiFZqukA= | ||||
| github.com/go-openapi/swag/typeutils v0.25.1/go.mod h1:9McMC/oCdS4BKwk2shEB7x17P6HmMmA6dQRtAkSnNb8= | ||||
| github.com/go-openapi/swag/yamlutils v0.25.1 h1:mry5ez8joJwzvMbaTGLhw8pXUnhDK91oSJLDPF1bmGk= | ||||
| github.com/go-openapi/swag/yamlutils v0.25.1/go.mod h1:cm9ywbzncy3y6uPm/97ysW8+wZ09qsks+9RS8fLWKqg= | ||||
| github.com/go-openapi/validate v0.25.0 h1:JD9eGX81hDTjoY3WOzh6WqxVBVl7xjsLnvDo1GL5WPU= | ||||
| github.com/go-openapi/validate v0.25.0/go.mod h1:SUY7vKrN5FiwK6LyvSwKjDfLNirSfWwHNgxd2l29Mmw= | ||||
| github.com/go-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC03zFCU= | ||||
| github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo= | ||||
| github.com/go-openapi/errors v0.22.2 h1:rdxhzcBUazEcGccKqbY1Y7NS8FDcMyIRr0934jrYnZg= | ||||
| github.com/go-openapi/errors v0.22.2/go.mod h1:+n/5UdIqdVnLIJ6Q9Se8HNGUXYaY6CN8ImWzfi/Gzp0= | ||||
| github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= | ||||
| github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= | ||||
| github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= | ||||
| github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= | ||||
| github.com/go-openapi/loads v0.22.0 h1:ECPGd4jX1U6NApCGG1We+uEozOAvXvJSF4nnwHZ8Aco= | ||||
| github.com/go-openapi/loads v0.22.0/go.mod h1:yLsaTCS92mnSAZX5WWoxszLj0u+Ojl+Zs5Stn1oF+rs= | ||||
| github.com/go-openapi/runtime v0.28.0 h1:gpPPmWSNGo214l6n8hzdXYhPuJcGtziTOgUpvsFWGIQ= | ||||
| github.com/go-openapi/runtime v0.28.0/go.mod h1:QN7OzcS+XuYmkQLw05akXk0jRH/eZ3kb18+1KwW9gyc= | ||||
| github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= | ||||
| github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= | ||||
| github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c= | ||||
| github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4= | ||||
| github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU= | ||||
| github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0= | ||||
| github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3BumrGD58= | ||||
| github.com/go-openapi/validate v0.24.0/go.mod h1:iyeX1sEufmv3nPbBdX3ieNviWnOZaJ1+zquzJEf2BAQ= | ||||
| github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= | ||||
| github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= | ||||
| github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= | ||||
| github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= | ||||
| github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U= | ||||
| github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= | ||||
| github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= | ||||
| github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= | ||||
| github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= | ||||
| github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= | ||||
| github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= | ||||
| github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= | ||||
| github.com/goccy/go-yaml v1.17.1 h1:LI34wktB2xEE3ONG/2Ar54+/HJVBriAGJ55PHls4YuY= | ||||
|  | @ -423,16 +399,18 @@ github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY | |||
| github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= | ||||
| github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= | ||||
| github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= | ||||
| github.com/hashicorp/go-getter v1.8.2 h1:CGCK+bZQLl44PYiwJweVzfpjg7bBwtuXu3AGcLiod2o= | ||||
| github.com/hashicorp/go-getter v1.8.2/go.mod h1:CUTt9x2bCtJ/sV8ihgrITL3IUE+0BE1j/e4n5P/GIM4= | ||||
| github.com/hashicorp/go-getter v1.8.0 h1:GMRdoMBDz12Mim366pWsRVIrrkugJ19rrmykkv0Nhzo= | ||||
| github.com/hashicorp/go-getter v1.8.0/go.mod h1:/K0O5zR6R72O3r2x3z2UHadiC0XHMbbzHO9pS8ZeJPA= | ||||
| github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= | ||||
| github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= | ||||
| github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= | ||||
| github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= | ||||
| github.com/hashicorp/go-retryablehttp v0.7.8 h1:ylXZWnqa7Lhqpk0L1P1LzDtGcCR0rPVUrx/c8Unxc48= | ||||
| github.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw= | ||||
| github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= | ||||
| github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= | ||||
| github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= | ||||
| github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= | ||||
| github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= | ||||
| github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= | ||||
| github.com/hashicorp/go-secure-stdlib/parseutil v0.2.0 h1:U+kC2dOhMFQctRfhK0gRctKAPTloZdMU5ZJxaesJ/VM= | ||||
| github.com/hashicorp/go-secure-stdlib/parseutil v0.2.0/go.mod h1:Ll013mhdmsVDuoIXVfBtvgGJsXDYkTw1kooNcoCXuE0= | ||||
| github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts= | ||||
|  | @ -457,16 +435,16 @@ github.com/hashicorp/hcl v1.0.1-vault-7 h1:ag5OxFVy3QYTFTJODRzTKVZ6xvdfLLCA1cy/Y | |||
| github.com/hashicorp/hcl v1.0.1-vault-7/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= | ||||
| github.com/hashicorp/hcl/v2 v2.24.0 h1:2QJdZ454DSsYGoaE6QheQZjtKZSUs9Nh2izTWiwQxvE= | ||||
| github.com/hashicorp/hcl/v2 v2.24.0/go.mod h1:oGoO1FIQYfn/AgyOhlg9qLC6/nOJPX3qGbkZpYAcqfM= | ||||
| github.com/hashicorp/hcp-sdk-go v0.162.0 h1:1agUnqQKSiig3Wcz1ht4Hko/ikfpxZ7+uy/2uX0QHaE= | ||||
| github.com/hashicorp/hcp-sdk-go v0.162.0/go.mod h1:v2vbpNIrmgUTelW4Z+ur+aQuSPxeaVK3xytFdpEXvSg= | ||||
| github.com/hashicorp/hcp-sdk-go v0.155.0 h1:6lN3nbGfY8Wsm851EGklEbaWpPVrJ1wPB/7MCkbkkZs= | ||||
| github.com/hashicorp/hcp-sdk-go v0.155.0/go.mod h1:K8clI5eI+fPCauEEdcXgnbpkIwtk5BayzYcTyJz/sss= | ||||
| github.com/hashicorp/jsonapi v1.4.3-0.20250220162346-81a76b606f3e h1:xwy/1T0cxHWaLx2MM0g4BlaQc1BXn/9835mPrBqwSPU= | ||||
| github.com/hashicorp/jsonapi v1.4.3-0.20250220162346-81a76b606f3e/go.mod h1:kWfdn49yCjQvbpnvY1dxxAuAFzISwrrMDQOcu6NsFoM= | ||||
| github.com/hashicorp/vault/api v1.22.0 h1:+HYFquE35/B74fHoIeXlZIP2YADVboaPjaSicHEZiH0= | ||||
| github.com/hashicorp/vault/api v1.22.0/go.mod h1:IUZA2cDvr4Ok3+NtK2Oq/r+lJeXkeCrHRmqdyWfpmGM= | ||||
| github.com/hashicorp/vault/api v1.20.0 h1:KQMHElgudOsr+IbJgmbjHnCTxEpKs9LnozA1D3nozU4= | ||||
| github.com/hashicorp/vault/api v1.20.0/go.mod h1:GZ4pcjfzoOWpkJ3ijHNpEoAxKEsBJnVljyTe3jM2Sms= | ||||
| github.com/helmfile/chartify v0.25.0 h1:+stKeRpDRo2LVJkCc2G/HqYmYdGJ214f2pMTdIafW3w= | ||||
| github.com/helmfile/chartify v0.25.0/go.mod h1:8b44e/7P0nceSodE9C5e5F6DoyCkiqKf3PeVprcIkQ4= | ||||
| github.com/helmfile/vals v0.42.4 h1:K5rDqhyN7EG5BeU+MyY8u8yWVdBCzRXUtGu4JcZVqKk= | ||||
| github.com/helmfile/vals v0.42.4/go.mod h1:Dj1nuqfJ2whuZTe6sGrz1405vVpn16YNBxd6DdAaTc0= | ||||
| github.com/helmfile/vals v0.42.1 h1:1zVpD1ZMzsWWuVGPW7GF4WL5FG+uhfvrs29Hn66457E= | ||||
| github.com/helmfile/vals v0.42.1/go.mod h1:ZfpWRwADojouGToPbP8MyX4qAyEzuNh0TB02LOQA+/o= | ||||
| github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= | ||||
| github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68= | ||||
| github.com/hokaccha/go-prettyjson v0.0.0-20211117102719-0474bc63780f h1:7LYC+Yfkj3CTRcShK0KOL/w6iTiKyqqBA9a41Wnggw8= | ||||
|  | @ -483,8 +461,12 @@ github.com/itchyny/timefmt-go v0.1.6 h1:ia3s54iciXDdzWzwaVKXZPbiXzxxnv1SPGFfM/my | |||
| github.com/itchyny/timefmt-go v0.1.6/go.mod h1:RRDZYC5s9ErkjQvTvvU7keJjxUYzIISJGxm9/mAERQg= | ||||
| github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= | ||||
| github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= | ||||
| github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= | ||||
| github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= | ||||
| github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o= | ||||
| github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY= | ||||
| github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= | ||||
| github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= | ||||
| github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= | ||||
| github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= | ||||
| github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= | ||||
|  | @ -511,6 +493,8 @@ github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhn | |||
| github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= | ||||
| github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= | ||||
| github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= | ||||
| github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= | ||||
| github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= | ||||
| github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= | ||||
| github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= | ||||
| github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= | ||||
|  | @ -616,16 +600,14 @@ github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ | |||
| github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= | ||||
| github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= | ||||
| github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= | ||||
| github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= | ||||
| github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= | ||||
| github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= | ||||
| github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= | ||||
| github.com/rubenv/sql-migrate v1.8.0 h1:dXnYiJk9k3wetp7GfQbKJcPHjVJL6YK19tKj8t2Ns0o= | ||||
| github.com/rubenv/sql-migrate v1.8.0/go.mod h1:F2bGFBwCU+pnmbtNYDeKvSuvL6lBVtXDXUUv5t+u1qw= | ||||
| github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= | ||||
| github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= | ||||
| github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= | ||||
| github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= | ||||
| github.com/scaleway/scaleway-sdk-go v1.0.0-beta.33 h1:KhF0WejiUTDbL5X55nXowP7zNopwpowa6qaMAWyIE+0= | ||||
| github.com/scaleway/scaleway-sdk-go v1.0.0-beta.33/go.mod h1:792k1RTU+5JeMXm35/e2Wgp71qPH/DmDoZrRc+EFZDk= | ||||
| github.com/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg= | ||||
| github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= | ||||
| github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= | ||||
|  | @ -657,7 +639,7 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ | |||
| github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= | ||||
| github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= | ||||
| github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= | ||||
| github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= | ||||
| github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= | ||||
| github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= | ||||
| github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= | ||||
| github.com/tatsushid/go-prettytable v0.0.0-20141013043238-ed2d14c29939 h1:BhIUXV2ySTLrKgh/Hnts+QTQlIbWtomXt3LMdzME0A0= | ||||
|  | @ -680,8 +662,8 @@ github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVK | |||
| github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= | ||||
| github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= | ||||
| github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= | ||||
| github.com/urfave/cli v1.22.17 h1:SYzXoiPfQjHBbkYxbew5prZHS1TOLT3ierW8SYLqtVQ= | ||||
| github.com/urfave/cli v1.22.17/go.mod h1:b0ht0aqgH/6pBYzzxURyrM4xXNgsoT/n2ZzwQiEhNVo= | ||||
| github.com/urfave/cli v1.22.16 h1:MH0k6uJxdwdeWQTwhSO42Pwr4YLrNLwBtg1MRgTqPdQ= | ||||
| github.com/urfave/cli v1.22.16/go.mod h1:EeJR6BKodywf4zciqrdw6hpCPk68JO9z5LazXZMn5Po= | ||||
| github.com/variantdev/dag v1.1.0 h1:xodYlSng33KWGvIGMpKUyLcIZRXKiNUx612mZJqYrDg= | ||||
| github.com/variantdev/dag v1.1.0/go.mod h1:pH1TQsNSLj2uxMo9NNl9zdGy01Wtn+/2MT96BrKmVyE= | ||||
| github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= | ||||
|  | @ -694,10 +676,10 @@ github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17 | |||
| github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= | ||||
| github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= | ||||
| github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= | ||||
| github.com/yandex-cloud/go-genproto v0.29.0 h1:iCVJ8YKvC9XMcxbPQkV2pp60iNtNVnU4UMv1JIBmPuI= | ||||
| github.com/yandex-cloud/go-genproto v0.29.0/go.mod h1:0LDD/IZLIUIV4iPH+YcF+jysO3jkSvADFGm4dCAuwQo= | ||||
| github.com/yandex-cloud/go-sdk v0.22.0 h1:COUDkpFouZ1d6NfZyG4tPgFNAPZh2Oyje77efUrErQs= | ||||
| github.com/yandex-cloud/go-sdk v0.22.0/go.mod h1:9CPEoMSje/vw0LJKcJ950szZoX4W4IfLDm2Ah/xI6Bo= | ||||
| github.com/yandex-cloud/go-genproto v0.19.0 h1:68GGNTzzb36b5jjSYYzgckr2BZqKQl9IjHPOvR1u5yo= | ||||
| github.com/yandex-cloud/go-genproto v0.19.0/go.mod h1:0LDD/IZLIUIV4iPH+YcF+jysO3jkSvADFGm4dCAuwQo= | ||||
| github.com/yandex-cloud/go-sdk v0.15.0 h1:qw4DIjB9R5kFxAM41oRX6fR6Peu3+NJJ+8Hq0HweAUk= | ||||
| github.com/yandex-cloud/go-sdk v0.15.0/go.mod h1:FrGFoK1NSOGjW5k/ga811r3UPACWPiDhMLL5B5GKeNA= | ||||
| github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||||
| github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||||
| github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= | ||||
|  | @ -712,10 +694,10 @@ github.com/zclconf/go-cty-yaml v1.1.0 h1:nP+jp0qPHv2IhUVqmQSzjvqAWcObN0KBkUl2rWB | |||
| github.com/zclconf/go-cty-yaml v1.1.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= | ||||
| go.mongodb.org/mongo-driver v1.17.4/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= | ||||
| go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= | ||||
| go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= | ||||
| go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= | ||||
| go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= | ||||
| go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= | ||||
| go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= | ||||
| go.opentelemetry.io/contrib/bridges/prometheus v0.57.0 h1:UW0+QyeyBVhn+COBec3nGhfnFe5lwB0ic1JBVjzhk0w= | ||||
| go.opentelemetry.io/contrib/bridges/prometheus v0.57.0/go.mod h1:ppciCHRLsyCio54qbzQv0E4Jyth/fLWDTJYfvWpcSVk= | ||||
| go.opentelemetry.io/contrib/detectors/gcp v1.36.0 h1:F7q2tNlCaHY9nMKHR6XH9/qkp8FktLnIcy6jJNyOCQw= | ||||
|  | @ -726,8 +708,8 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 | |||
| go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= | ||||
| go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= | ||||
| go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= | ||||
| go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= | ||||
| go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= | ||||
| go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg= | ||||
| go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E= | ||||
| go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0 h1:WzNab7hOOLzdDF/EoWCt4glhrbMPVMOO5JYTmpz36Ls= | ||||
| go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0/go.mod h1:hKvJwTzJdp90Vh7p6q/9PAOd55dI6WA6sWj62a/JvSs= | ||||
| go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0 h1:S+LdBGiQXtJdowoJoQPEtI52syEP/JYBUpjO49EQhV8= | ||||
|  | @ -752,16 +734,16 @@ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.32.0 h1:cC2yDI3IQd0Udsu | |||
| go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.32.0/go.mod h1:2PD5Ex6z8CFzDbTdOlwyNIUywRr1DN0ospafJM1wJ+s= | ||||
| go.opentelemetry.io/otel/log v0.8.0 h1:egZ8vV5atrUWUbnSsHn6vB8R21G2wrKqNiDt3iWertk= | ||||
| go.opentelemetry.io/otel/log v0.8.0/go.mod h1:M9qvDdUTRCopJcGRKg57+JSQ9LgLBrwwfC32epk5NX8= | ||||
| go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= | ||||
| go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= | ||||
| go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= | ||||
| go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= | ||||
| go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE= | ||||
| go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs= | ||||
| go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs= | ||||
| go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY= | ||||
| go.opentelemetry.io/otel/sdk/log v0.8.0 h1:zg7GUYXqxk1jnGF/dTdLPrK06xJdrXgqgFLnI4Crxvs= | ||||
| go.opentelemetry.io/otel/sdk/log v0.8.0/go.mod h1:50iXr0UVwQrYS45KbruFrEt4LvAdCaWWgIrsN3ZQggo= | ||||
| go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= | ||||
| go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= | ||||
| go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= | ||||
| go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= | ||||
| go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis= | ||||
| go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4= | ||||
| go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w= | ||||
| go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA= | ||||
| go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4= | ||||
| go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4= | ||||
| go.szostok.io/version v1.2.0 h1:8eMMdfsonjbibwZRLJ8TnrErY8bThFTQsZYV16mcXms= | ||||
|  | @ -784,14 +766,14 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh | |||
| golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= | ||||
| golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | ||||
| golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= | ||||
| golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= | ||||
| golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= | ||||
| golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= | ||||
| golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= | ||||
| golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
| golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
| golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
| golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= | ||||
| golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= | ||||
| golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= | ||||
| golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= | ||||
| golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= | ||||
| golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||
| golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
|  | @ -801,10 +783,10 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b | |||
| golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
| golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= | ||||
| golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= | ||||
| golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= | ||||
| golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= | ||||
| golang.org/x/oauth2 v0.31.0 h1:8Fq0yVZLh4j4YA47vHKFTa9Ew5XIrCP8LC6UeNZnLxo= | ||||
| golang.org/x/oauth2 v0.31.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= | ||||
| golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= | ||||
| golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= | ||||
| golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= | ||||
| golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= | ||||
| golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
|  | @ -829,49 +811,47 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc | |||
| golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= | ||||
| golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= | ||||
| golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= | ||||
| golang.org/x/sys v0.36.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= | ||||
| golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= | ||||
| golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= | ||||
| golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= | ||||
| golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ= | ||||
| golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA= | ||||
| 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= | ||||
| golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= | ||||
| golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= | ||||
| golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= | ||||
| golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= | ||||
| golang.org/x/time v0.13.0 h1:eUlYslOIt32DgYD6utsuUeHs4d7AsEYLuIAdg7FlYgI= | ||||
| golang.org/x/time v0.13.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= | ||||
| golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= | ||||
| golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= | ||||
| golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= | ||||
| golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= | ||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||
| golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
| golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||
| golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= | ||||
| golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= | ||||
| golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= | ||||
| golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= | ||||
| golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= | ||||
| golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= | ||||
| gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= | ||||
| google.golang.org/api v0.252.0 h1:xfKJeAJaMwb8OC9fesr369rjciQ704AjU/psjkKURSI= | ||||
| google.golang.org/api v0.252.0/go.mod h1:dnHOv81x5RAmumZ7BWLShB/u7JZNeyalImxHmtTHxqw= | ||||
| google.golang.org/api v0.248.0 h1:hUotakSkcwGdYUqzCRc5yGYsg4wXxpkKlW5ryVqvC1Y= | ||||
| google.golang.org/api v0.248.0/go.mod h1:yAFUAF56Li7IuIQbTFoLwXTCI6XCFKueOlS7S9e4F9k= | ||||
| google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= | ||||
| google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 h1:CirRxTOwnRWVLKzDNrs0CXAaVozJoR4G9xvdRecrdpk= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= | ||||
| google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= | ||||
| google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= | ||||
| google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= | ||||
| google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c h1:qXWI/sQtv5UKboZ/zUk7h+mrf/lXORyI+n9DKDAusdg= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c/go.mod h1:gw1tLEfykwDz2ET4a12jcXt4couGAm7IwsVaTy0Sflo= | ||||
| google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4= | ||||
| google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM= | ||||
| google.golang.org/protobuf v1.36.7 h1:IgrO7UwFQGJdRNXH/sQux4R1Dj1WAKcLElzeeRaXV2A= | ||||
| google.golang.org/protobuf v1.36.7/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= | ||||
| 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= | ||||
|  | @ -883,6 +863,7 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= | |||
| gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= | ||||
| gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= | ||||
| gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | ||||
| gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||
| gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= | ||||
| gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= | ||||
| gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||
|  | @ -891,16 +872,16 @@ 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.0 h1:krVyCGa8fa/wzTZgqw0DUiXuRT5BPdeqE/sQXujQ22k= | ||||
| helm.sh/helm/v3 v3.19.0/go.mod h1:Lk/SfzN0w3a3C3o+TdAKrLwJ0wcZ//t1/SDXAvfgDdc= | ||||
| k8s.io/api v0.34.1 h1:jC+153630BMdlFukegoEL8E/yT7aLyQkIVuwhmwDgJM= | ||||
| k8s.io/api v0.34.1/go.mod h1:SB80FxFtXn5/gwzCoN6QCtPD7Vbu5w2n1S0J5gFfTYk= | ||||
| k8s.io/api v0.34.0 h1:L+JtP2wDbEYPUeNGbeSa/5GwFtIA662EmT2YSLOkAVE= | ||||
| k8s.io/api v0.34.0/go.mod h1:YzgkIzOOlhl9uwWCZNqpw6RJy9L2FK4dlJeayUoydug= | ||||
| k8s.io/apiextensions-apiserver v0.34.0 h1:B3hiB32jV7BcyKcMU5fDaDxk882YrJ1KU+ZSkA9Qxoc= | ||||
| k8s.io/apiextensions-apiserver v0.34.0/go.mod h1:hLI4GxE1BDBy9adJKxUxCEHBGZtGfIg98Q+JmTD7+g0= | ||||
| k8s.io/apimachinery v0.34.1 h1:dTlxFls/eikpJxmAC7MVE8oOeP1zryV7iRyIjB0gky4= | ||||
| k8s.io/apimachinery v0.34.1/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= | ||||
| k8s.io/cli-runtime v0.34.0 h1:N2/rUlJg6TMEBgtQ3SDRJwa8XyKUizwjlOknT1mB2Cw= | ||||
| k8s.io/cli-runtime v0.34.0/go.mod h1:t/skRecS73Piv+J+FmWIQA2N2/rDjdYSQzEE67LUUs8= | ||||
| k8s.io/client-go v0.34.1 h1:ZUPJKgXsnKwVwmKKdPfw4tB58+7/Ik3CrjOEhsiZ7mY= | ||||
| k8s.io/client-go v0.34.1/go.mod h1:kA8v0FP+tk6sZA0yKLRG67LWjqufAoSHA2xVGKw9Of8= | ||||
| k8s.io/client-go v0.34.0 h1:YoWv5r7bsBfb0Hs2jh8SOvFbKzzxyNo0nSb0zC19KZo= | ||||
| k8s.io/client-go v0.34.0/go.mod h1:ozgMnEKXkRjeMvBZdV1AijMHLTh3pbACPvK7zFR+QQY= | ||||
| k8s.io/component-base v0.34.0 h1:bS8Ua3zlJzapklsB1dZgjEJuJEeHjj8yTu1gxE2zQX8= | ||||
| k8s.io/component-base v0.34.0/go.mod h1:RSCqUdvIjjrEm81epPcjQ/DS+49fADvGSCkIP3IC6vg= | ||||
| k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= | ||||
|  |  | |||
|  | @ -199,7 +199,7 @@ func (a *App) Diff(c DiffConfigProvider) error { | |||
| 	} | ||||
| 
 | ||||
| 	if c.DetailedExitcode() && (len(allDiffDetectedErrs) > 0 || affectedAny) { | ||||
| 		// We take the first release error w/ exit status 2 (although all the deferred errs should have exit status 2)
 | ||||
| 		// We take the first release error w/ exit status 2 (although all the defered errs should have exit status 2)
 | ||||
| 		// to just let helmfile itself to exit with 2
 | ||||
| 		// See https://github.com/roboll/helmfile/issues/749
 | ||||
| 		code := 2 | ||||
|  | @ -680,7 +680,7 @@ func (a *App) within(dir string, do func() error) error { | |||
| 
 | ||||
| 	prev, err := a.fs.Getwd() | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("failed getting current working directory: %v", err) | ||||
| 		return fmt.Errorf("failed getting current working direcotyr: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	absDir, err := a.fs.Abs(dir) | ||||
|  | @ -793,9 +793,6 @@ func (a *App) getHelm(st *state.HelmState) (helmexec.Interface, error) { | |||
| 	} | ||||
| 
 | ||||
| 	bin := st.DefaultHelmBinary | ||||
| 	if bin == "" { | ||||
| 		bin = state.DefaultHelmBinary | ||||
| 	} | ||||
| 	kubeconfig := a.Kubeconfig | ||||
| 	kubectx := st.HelmDefaults.KubeContext | ||||
| 
 | ||||
|  |  | |||
|  | @ -415,28 +415,4 @@ releases: | |||
| 			}, | ||||
| 		}) | ||||
| 	}) | ||||
| 
 | ||||
| 	t.Run("show diff on changed selected release with reinstall", func(t *testing.T) { | ||||
| 		check(t, testcase{ | ||||
| 			helmfile: ` | ||||
| releases: | ||||
| - name: a | ||||
|   chart: incubator/raw | ||||
|   namespace: default | ||||
|   updateStrategy: reinstallIfForbidden | ||||
| - name: b | ||||
|   chart: incubator/raw | ||||
|   namespace: default | ||||
| `, | ||||
| 			selectors: []string{"name=a"}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^a$", Flags: listFlags("default", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
| foo 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	raw-3.1.0	3.1.0      	default | ||||
| `, | ||||
| 			}, | ||||
| 			diffed: []exectest.Release{ | ||||
| 				{Name: "a", Flags: []string{"--kube-context", "default", "--namespace", "default", "--reset-values"}}, | ||||
| 			}, | ||||
| 		}) | ||||
| 	}) | ||||
| } | ||||
|  |  | |||
|  | @ -1,51 +0,0 @@ | |||
| package app | ||||
| 
 | ||||
| import ( | ||||
| 	goContext "context" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 
 | ||||
| 	"github.com/helmfile/helmfile/pkg/state" | ||||
| ) | ||||
| 
 | ||||
| // TestGetHelmWithEmptyDefaultHelmBinary tests that getHelm properly defaults to "helm"
 | ||||
| // when st.DefaultHelmBinary is empty. This addresses the issue where base files with
 | ||||
| // environment secrets would fail with "exec: no command" error.
 | ||||
| //
 | ||||
| // Background: When a base file has environment secrets but doesn't specify helmBinary,
 | ||||
| // the state.DefaultHelmBinary would be empty, causing helmexec.New to be called with
 | ||||
| // an empty string, which results in "error determining helm version: exec: no command".
 | ||||
| //
 | ||||
| // The fix in app.getHelm() ensures that when st.DefaultHelmBinary is empty, it defaults
 | ||||
| // to state.DefaultHelmBinary ("helm").
 | ||||
| func TestGetHelmWithEmptyDefaultHelmBinary(t *testing.T) { | ||||
| 	// Test that app.getHelm() handles empty DefaultHelmBinary correctly by applying a default
 | ||||
| 	st := &state.HelmState{ | ||||
| 		ReleaseSetSpec: state.ReleaseSetSpec{ | ||||
| 			DefaultHelmBinary: "", // Empty, as would be the case for base files
 | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	logger := newAppTestLogger() | ||||
| 	app := &App{ | ||||
| 		OverrideHelmBinary:  "", | ||||
| 		OverrideKubeContext: "", | ||||
| 		Logger:              logger, | ||||
| 		Env:                 "default", | ||||
| 		ctx:                 goContext.Background(), | ||||
| 	} | ||||
| 
 | ||||
| 	// This should NOT fail because app.getHelm() defaults empty DefaultHelmBinary to "helm"
 | ||||
| 	helm, err := app.getHelm(st) | ||||
| 
 | ||||
| 	// Verify that no error occurred - the fix in app.getHelm() prevents the "exec: no command" error
 | ||||
| 	require.NoError(t, err, "getHelm should not fail when DefaultHelmBinary is empty (fix should apply default)") | ||||
| 
 | ||||
| 	// Verify that a valid helm execer was returned
 | ||||
| 	require.NotNil(t, helm, "getHelm should return a valid helm execer") | ||||
| 
 | ||||
| 	// Verify that the helm version is accessible (confirms the helm binary is valid)
 | ||||
| 	version := helm.GetVersion() | ||||
| 	require.NotNil(t, version, "helm version should be accessible") | ||||
| } | ||||
|  | @ -220,97 +220,6 @@ releases: | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestUpdateStrategyParamValidation(t *testing.T) { | ||||
| 	cases := []struct { | ||||
| 		files          map[string]string | ||||
| 		updateStrategy string | ||||
| 		isValid        bool | ||||
| 	}{ | ||||
| 		{map[string]string{ | ||||
| 			"/path/to/helmfile.yaml": `releases: | ||||
| - name: zipkin | ||||
|   chart: stable/zipkin | ||||
|   updateStrategy: reinstallIfForbidden | ||||
| `}, | ||||
| 			"reinstallIfForbidden", | ||||
| 			true}, | ||||
| 		{map[string]string{ | ||||
| 			"/path/to/helmfile.yaml": `releases: | ||||
| - name: zipkin | ||||
|   chart: stable/zipkin | ||||
|   updateStrategy: reinstallIfForbidden | ||||
| `}, | ||||
| 			"reinstallIfForbidden", | ||||
| 			true}, | ||||
| 		{map[string]string{ | ||||
| 			"/path/to/helmfile.yaml": `releases: | ||||
| - name: zipkin | ||||
|   chart: stable/zipkin | ||||
|   updateStrategy: | ||||
| `}, | ||||
| 			"", | ||||
| 			true}, | ||||
| 		{map[string]string{ | ||||
| 			"/path/to/helmfile.yaml": `releases: | ||||
| - name: zipkin | ||||
|   chart: stable/zipkin | ||||
|   updateStrategy: foo | ||||
| `}, | ||||
| 			"foo", | ||||
| 			false}, | ||||
| 		{map[string]string{ | ||||
| 			"/path/to/helmfile.yaml": `releases: | ||||
| - name: zipkin | ||||
|   chart: stable/zipkin | ||||
|   updateStrategy: reinstal | ||||
| `}, | ||||
| 			"reinstal", | ||||
| 			false}, | ||||
| 		{map[string]string{ | ||||
| 			"/path/to/helmfile.yaml": `releases: | ||||
| - name: zipkin | ||||
|   chart: stable/zipkin | ||||
|   updateStrategy: reinstall1 | ||||
| `}, | ||||
| 			"reinstall1", | ||||
| 			false}, | ||||
| 	} | ||||
| 
 | ||||
| 	for idx, c := range cases { | ||||
| 		fs := testhelper.NewTestFs(c.files) | ||||
| 		app := &App{ | ||||
| 			OverrideHelmBinary:  DefaultHelmBinary, | ||||
| 			OverrideKubeContext: "default", | ||||
| 			Logger:              newAppTestLogger(), | ||||
| 			Namespace:           "", | ||||
| 			Env:                 "default", | ||||
| 			FileOrDir:           "helmfile.yaml", | ||||
| 		} | ||||
| 
 | ||||
| 		expectNoCallsToHelm(app) | ||||
| 
 | ||||
| 		app = injectFs(app, fs) | ||||
| 
 | ||||
| 		err := app.ForEachState( | ||||
| 			Noop, | ||||
| 			false, | ||||
| 			SetFilter(true), | ||||
| 		) | ||||
| 
 | ||||
| 		if c.isValid && err != nil { | ||||
| 			t.Errorf("[case: %d] Unexpected error for valid case: %v", idx, err) | ||||
| 		} else if !c.isValid { | ||||
| 			var invalidUpdateStrategy state.InvalidUpdateStrategyError | ||||
| 			invalidUpdateStrategy.UpdateStrategy = c.updateStrategy | ||||
| 			if err == nil { | ||||
| 				t.Errorf("[case: %d] Expected error for invalid case", idx) | ||||
| 			} else if !strings.Contains(err.Error(), invalidUpdateStrategy.Error()) { | ||||
| 				t.Errorf("[case: %d] Unexpected error returned for invalid case\ngot: %v\nexpected underlying error: %s", idx, err, invalidUpdateStrategy.Error()) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestVisitDesiredStatesWithReleasesFiltered_Issue1008_MissingNonDefaultEnvInBase(t *testing.T) { | ||||
| 	files := map[string]string{ | ||||
| 		"/path/to/base.yaml": ` | ||||
|  | @ -3167,97 +3076,6 @@ baz 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	mychart3-3.1.0	3.1.0      	defau | |||
| 			concurrency: 1, | ||||
| 		}, | ||||
| 		//
 | ||||
| 		// install with upgrade with reinstallIfForbidden
 | ||||
| 		//
 | ||||
| 		{ | ||||
| 			name: "install-with-upgrade-with-reinstallIfForbidden", | ||||
| 			loc:  location(), | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| releases: | ||||
| - name: baz | ||||
|   chart: stable/mychart3 | ||||
|   disableValidationOnInstall: true | ||||
|   updateStrategy: reinstallIfForbidden | ||||
| - name: foo | ||||
|   chart: stable/mychart1 | ||||
|   disableValidationOnInstall: true | ||||
|   needs: | ||||
|   - bar | ||||
| - name: bar | ||||
|   chart: stable/mychart2 | ||||
|   disableValidation: true | ||||
|   updateStrategy: reinstallIfForbidden | ||||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "baz", Chart: "stable/mychart3", Flags: "--kube-context default --reset-values --detailed-exitcode"}:                      helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "foo", Chart: "stable/mychart1", Flags: "--disable-validation --kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--disable-validation --kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: ``, | ||||
| 				{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
| bar 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	mychart2-3.1.0	3.1.0      	default | ||||
| `, | ||||
| 				{Filter: "^baz$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
| baz 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	mychart3-3.1.0	3.1.0      	default | ||||
| `, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{ | ||||
| 				{Name: "baz", Flags: []string{"--kube-context", "default"}}, | ||||
| 				{Name: "bar", Flags: []string{"--kube-context", "default"}}, | ||||
| 				{Name: "foo", Flags: []string{"--kube-context", "default"}}, | ||||
| 			}, | ||||
| 			deleted:     []exectest.Release{}, | ||||
| 			concurrency: 1, | ||||
| 		}, | ||||
| 		//
 | ||||
| 		// install with upgrade and --skip-diff-on-install with reinstallIfForbidden
 | ||||
| 		//
 | ||||
| 		{ | ||||
| 			name:              "install-with-upgrade-with-skip-diff-on-install-with-reinstallIfForbidden", | ||||
| 			loc:               location(), | ||||
| 			skipDiffOnInstall: true, | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": ` | ||||
| releases: | ||||
| - name: baz | ||||
|   chart: stable/mychart3 | ||||
|   disableValidationOnInstall: true | ||||
|   updateStrategy: reinstallIfForbidden | ||||
| - name: foo | ||||
|   chart: stable/mychart1 | ||||
|   disableValidationOnInstall: true | ||||
|   needs: | ||||
|   - bar | ||||
| - name: bar | ||||
|   chart: stable/mychart2 | ||||
|   disableValidation: true | ||||
|   updateStrategy: reinstallIfForbidden | ||||
| `, | ||||
| 			}, | ||||
| 			diffs: map[exectest.DiffKey]error{ | ||||
| 				{Name: "baz", Chart: "stable/mychart3", Flags: "--kube-context default --reset-values --detailed-exitcode"}:                      helmexec.ExitError{Code: 2}, | ||||
| 				{Name: "bar", Chart: "stable/mychart2", Flags: "--disable-validation --kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2}, | ||||
| 			}, | ||||
| 			lists: map[exectest.ListKey]string{ | ||||
| 				{Filter: "^foo$", Flags: listFlags("", "default")}: ``, | ||||
| 				{Filter: "^bar$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
| bar 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	mychart2-3.1.0	3.1.0      	default | ||||
| `, | ||||
| 				{Filter: "^baz$", Flags: listFlags("", "default")}: `NAME	REVISION	UPDATED                 	STATUS  	CHART        	APP VERSION	NAMESPACE | ||||
| baz 	4       	Fri Nov  1 08:40:07 2019	DEPLOYED	mychart3-3.1.0	3.1.0      	default | ||||
| `, | ||||
| 			}, | ||||
| 			upgraded: []exectest.Release{ | ||||
| 				{Name: "baz", Flags: []string{"--kube-context", "default"}}, | ||||
| 				{Name: "bar", Flags: []string{"--kube-context", "default"}}, | ||||
| 				{Name: "foo", Flags: []string{"--kube-context", "default"}}, | ||||
| 			}, | ||||
| 			concurrency: 1, | ||||
| 		}, | ||||
| 		//
 | ||||
| 		// upgrades
 | ||||
| 		//
 | ||||
| 		{ | ||||
|  | @ -3954,7 +3772,7 @@ releases: | |||
| 					} | ||||
| 					for flagIdx := range wantDeletes[relIdx].Flags { | ||||
| 						if wantDeletes[relIdx].Flags[flagIdx] != helm.Deleted[relIdx].Flags[flagIdx] { | ||||
| 							t.Errorf("releases[%d].flags[%d]: got %v, want %v", relIdx, flagIdx, helm.Deleted[relIdx].Flags[flagIdx], wantDeletes[relIdx].Flags[flagIdx]) | ||||
| 							t.Errorf("releaes[%d].flags[%d]: got %v, want %v", relIdx, flagIdx, helm.Deleted[relIdx].Flags[flagIdx], wantDeletes[relIdx].Flags[flagIdx]) | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
|  |  | |||
|  | @ -5,7 +5,6 @@ import ( | |||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"path/filepath" | ||||
| 	"slices" | ||||
| 
 | ||||
| 	"dario.cat/mergo" | ||||
| 	"github.com/helmfile/vals" | ||||
|  | @ -286,18 +285,6 @@ func (ld *desiredStateLoader) load(env, overrodeEnv *environment.Environment, ba | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// Validate updateStrategy value if set in the releases
 | ||||
| 	for i := range finalState.Releases { | ||||
| 		if finalState.Releases[i].UpdateStrategy != "" { | ||||
| 			if !slices.Contains(state.ValidUpdateStrategyValues, finalState.Releases[i].UpdateStrategy) { | ||||
| 				return nil, &state.StateLoadError{ | ||||
| 					Msg:   fmt.Sprintf("failed to read %s", finalState.FilePath), | ||||
| 					Cause: &state.InvalidUpdateStrategyError{UpdateStrategy: finalState.Releases[i].UpdateStrategy}, | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	finalState.OrginReleases = finalState.Releases | ||||
| 	return finalState, nil | ||||
| } | ||||
|  |  | |||
|  | @ -18,7 +18,7 @@ import ( | |||
| 
 | ||||
| const ( | ||||
| 	HelmRequiredVersion           = "v3.18.6" | ||||
| 	HelmDiffRecommendedVersion    = "v3.13.1" | ||||
| 	HelmDiffRecommendedVersion    = "v3.13.0" | ||||
| 	HelmRecommendedVersion        = "v3.19.0" | ||||
| 	HelmSecretsRecommendedVersion = "v4.6.5" | ||||
| 	HelmGitRecommendedVersion     = "v1.3.0" | ||||
|  |  | |||
|  | @ -1,11 +0,0 @@ | |||
| processing file "helmfile.yaml" in directory "." | ||||
| changing working directory to "/path/to" | ||||
| merged environment: &{default  map[] map[]} | ||||
| 1 release(s) matching name=a found in helmfile.yaml | ||||
| 
 | ||||
| processing 1 groups of releases in this order: | ||||
| GROUP RELEASES | ||||
| 1     default/default/a | ||||
| 
 | ||||
| processing releases in group 1/1: default/default/a | ||||
| changing working directory back to "/path/to" | ||||
|  | @ -1,35 +0,0 @@ | |||
| processing file "helmfile.yaml" in directory "." | ||||
| changing working directory to "/path/to" | ||||
| merged environment: &{default  map[] map[]} | ||||
| 3 release(s) found in helmfile.yaml | ||||
| 
 | ||||
| Affected releases are: | ||||
|   bar (stable/mychart2) UPDATED | ||||
|   baz (stable/mychart3) UPDATED | ||||
|   foo (stable/mychart1) UPDATED | ||||
| 
 | ||||
| invoking preapply hooks for 2 groups of releases in this order: | ||||
| GROUP RELEASES | ||||
| 1     default//foo | ||||
| 2     default//baz, default//bar | ||||
| 
 | ||||
| invoking preapply hooks for releases in group 1/2: default//foo | ||||
| invoking preapply hooks for releases in group 2/2: default//baz, default//bar | ||||
| processing 2 groups of releases in this order: | ||||
| GROUP RELEASES | ||||
| 1     default//baz, default//bar | ||||
| 2     default//foo | ||||
| 
 | ||||
| processing releases in group 1/2: default//baz, default//bar | ||||
| update strategy - sync success | ||||
| update strategy - sync success | ||||
| processing releases in group 2/2: default//foo | ||||
| getting deployed release version failed: Failed to get the version for: mychart1 | ||||
| 
 | ||||
| UPDATED RELEASES: | ||||
| NAME   NAMESPACE   CHART             VERSION   DURATION | ||||
| baz                stable/mychart3   3.1.0           0s | ||||
| bar                stable/mychart2   3.1.0           0s | ||||
| foo                stable/mychart1                   0s | ||||
| 
 | ||||
| changing working directory back to "/path/to" | ||||
|  | @ -1,35 +0,0 @@ | |||
| processing file "helmfile.yaml" in directory "." | ||||
| changing working directory to "/path/to" | ||||
| merged environment: &{default  map[] map[]} | ||||
| 3 release(s) found in helmfile.yaml | ||||
| 
 | ||||
| Affected releases are: | ||||
|   bar (stable/mychart2) UPDATED | ||||
|   baz (stable/mychart3) UPDATED | ||||
|   foo (stable/mychart1) UPDATED | ||||
| 
 | ||||
| invoking preapply hooks for 2 groups of releases in this order: | ||||
| GROUP RELEASES | ||||
| 1     default//foo | ||||
| 2     default//baz, default//bar | ||||
| 
 | ||||
| invoking preapply hooks for releases in group 1/2: default//foo | ||||
| invoking preapply hooks for releases in group 2/2: default//baz, default//bar | ||||
| processing 2 groups of releases in this order: | ||||
| GROUP RELEASES | ||||
| 1     default//baz, default//bar | ||||
| 2     default//foo | ||||
| 
 | ||||
| processing releases in group 1/2: default//baz, default//bar | ||||
| update strategy - sync success | ||||
| update strategy - sync success | ||||
| processing releases in group 2/2: default//foo | ||||
| getting deployed release version failed: Failed to get the version for: mychart1 | ||||
| 
 | ||||
| UPDATED RELEASES: | ||||
| NAME   NAMESPACE   CHART             VERSION   DURATION | ||||
| baz                stable/mychart3   3.1.0           0s | ||||
| bar                stable/mychart2   3.1.0           0s | ||||
| foo                stable/mychart1                   0s | ||||
| 
 | ||||
| changing working directory back to "/path/to" | ||||
|  | @ -57,7 +57,6 @@ type Release struct { | |||
| 
 | ||||
| type Affected struct { | ||||
| 	Upgraded []*Release | ||||
| 	Reinstalled []*Release | ||||
| 	Deleted  []*Release | ||||
| 	Failed   []*Release | ||||
| } | ||||
|  | @ -108,24 +107,7 @@ func (helm *Helm) RegistryLogin(name, username, password, caFile, certFile, keyF | |||
| 	return nil | ||||
| } | ||||
| func (helm *Helm) SyncRelease(context helmexec.HelmContext, name, chart, namespace string, flags ...string) error { | ||||
| 	if strings.Contains(name, "forbidden") { | ||||
| 		releaseExists := false | ||||
| 		for _, release := range helm.Releases { | ||||
| 			if release.Name == name { | ||||
| 				releaseExists = true | ||||
| 			} | ||||
| 		} | ||||
| 		releaseDeleted := false | ||||
| 		for _, release := range helm.Deleted { | ||||
| 			if release.Name == name { | ||||
| 				releaseDeleted = true | ||||
| 			} | ||||
| 		} | ||||
| 		// Only fail if the release is present in the helm.Releases to simulate a forbidden update if it exists
 | ||||
| 		if releaseExists && !releaseDeleted { | ||||
| 			return fmt.Errorf("cannot patch %q with kind StatefulSet: StatefulSet.apps %q is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'ordinals', 'template', 'updateStrategy', 'persistentVolumeClaimRetentionPolicy' and 'minReadySeconds' are forbidden", name, name) | ||||
| 		} | ||||
| 	} else if strings.Contains(name, "error") { | ||||
| 	if strings.Contains(name, "error") { | ||||
| 		return errors.New("error") | ||||
| 	} | ||||
| 	helm.sync(helm.ReleasesMutex, func() { | ||||
|  |  | |||
|  | @ -15,8 +15,9 @@ import ( | |||
| 	"strconv" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"github.com/aws/aws-sdk-go-v2/config" | ||||
| 	"github.com/aws/aws-sdk-go-v2/service/s3" | ||||
| 	"github.com/aws/aws-sdk-go/aws" | ||||
| 	"github.com/aws/aws-sdk-go/aws/session" | ||||
| 	"github.com/aws/aws-sdk-go/service/s3" | ||||
| 	"github.com/hashicorp/go-getter" | ||||
| 	"github.com/hashicorp/go-getter/helper/url" | ||||
| 	"go.uber.org/zap" | ||||
|  | @ -367,22 +368,22 @@ func (g *S3Getter) Get(wd, src, dst string) error { | |||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	// Create a new AWS config and S3 client using AWS SDK v2
 | ||||
| 	cfg, err := config.LoadDefaultConfig(context.TODO(), | ||||
| 		config.WithRegion(region), | ||||
| 	) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	// Create a new AWS session using the default AWS configuration
 | ||||
| 	sess := session.Must(session.NewSessionWithOptions(session.Options{ | ||||
| 		SharedConfigState: session.SharedConfigEnable, | ||||
| 		Config: aws.Config{ | ||||
| 			Region: aws.String(region), | ||||
| 		}, | ||||
| 	})) | ||||
| 
 | ||||
| 	// Create an S3 client using the config
 | ||||
| 	s3Client := s3.NewFromConfig(cfg) | ||||
| 	// Create an S3 client using the session
 | ||||
| 	s3Client := s3.New(sess) | ||||
| 
 | ||||
| 	getObjectInput := &s3.GetObjectInput{ | ||||
| 		Bucket: &bucket, | ||||
| 		Key:    &key, | ||||
| 	} | ||||
| 	resp, err := s3Client.GetObject(context.TODO(), getObjectInput) | ||||
| 	resp, err := s3Client.GetObject(getObjectInput) | ||||
| 	defer func(Body io.ReadCloser) { | ||||
| 		err := Body.Close() | ||||
| 		if err != nil { | ||||
|  | @ -466,47 +467,48 @@ func (g *S3Getter) S3FileExists(path string) (string, error) { | |||
| 	} | ||||
| 
 | ||||
| 	// Region
 | ||||
| 	g.Logger.Debugf("Creating config for determining S3 region %s", path) | ||||
| 	cfg, err := config.LoadDefaultConfig(context.TODO()) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 	g.Logger.Debugf("Creating session for determining S3 region %s", path) | ||||
| 	sess := session.Must(session.NewSessionWithOptions(session.Options{ | ||||
| 		SharedConfigState: session.SharedConfigEnable, | ||||
| 	})) | ||||
| 
 | ||||
| 	g.Logger.Debugf("Getting bucket %s location %s", bucket, path) | ||||
| 	s3Client := s3.NewFromConfig(cfg) | ||||
| 	s3Client := s3.New(sess) | ||||
| 	bucketRegion := "us-east-1" | ||||
| 	getBucketLocationInput := &s3.GetBucketLocationInput{ | ||||
| 		Bucket: &bucket, | ||||
| 		Bucket: aws.String(bucket), | ||||
| 	} | ||||
| 	resp, err := s3Client.GetBucketLocation(context.TODO(), getBucketLocationInput) | ||||
| 	resp, err := s3Client.GetBucketLocation(getBucketLocationInput) | ||||
| 	if err != nil { | ||||
| 		return "", fmt.Errorf("failed to retrieve bucket location: %v", err) | ||||
| 		return "", fmt.Errorf("Error: Failed to retrieve bucket location: %v\n", err) | ||||
| 	} | ||||
| 	if resp == nil || string(resp.LocationConstraint) == "" { | ||||
| 	if resp == nil || resp.LocationConstraint == nil { | ||||
| 		g.Logger.Debugf("Bucket has no location Assuming us-east-1") | ||||
| 	} else { | ||||
| 		bucketRegion = string(resp.LocationConstraint) | ||||
| 		bucketRegion = *resp.LocationConstraint | ||||
| 	} | ||||
| 	g.Logger.Debugf("Got bucket location %s", bucketRegion) | ||||
| 
 | ||||
| 	// File existence
 | ||||
| 	g.Logger.Debugf("Creating new config with region to see if file exists") | ||||
| 	regionCfg, err := config.LoadDefaultConfig(context.TODO(), | ||||
| 		config.WithRegion(bucketRegion), | ||||
| 	) | ||||
| 	g.Logger.Debugf("Creating new session with region to see if file exists") | ||||
| 	regionSession, err := session.NewSessionWithOptions(session.Options{ | ||||
| 		SharedConfigState: session.SharedConfigEnable, | ||||
| 		Config: aws.Config{ | ||||
| 			Region: aws.String(bucketRegion), | ||||
| 		}, | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		g.Logger.Error(err) | ||||
| 		return bucketRegion, err | ||||
| 	} | ||||
| 	g.Logger.Debugf("Creating new s3 client to check if object exists") | ||||
| 	s3Client = s3.NewFromConfig(regionCfg) | ||||
| 	s3Client = s3.New(regionSession) | ||||
| 	headObjectInput := &s3.HeadObjectInput{ | ||||
| 		Bucket: &bucket, | ||||
| 		Key:    &key, | ||||
| 	} | ||||
| 
 | ||||
| 	g.Logger.Debugf("Fethcing head %s", path) | ||||
| 	_, err = s3Client.HeadObject(context.TODO(), headObjectInput) | ||||
| 	_, err = s3Client.HeadObject(headObjectInput) | ||||
| 	return bucketRegion, err | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -26,8 +26,6 @@ const ( | |||
| 	DefaultHCLFileExtension = ".hcl" | ||||
| ) | ||||
| 
 | ||||
| var ValidUpdateStrategyValues = []string{UpdateStrategyReinstallIfForbidden} | ||||
| 
 | ||||
| type StateLoadError struct { | ||||
| 	Msg   string | ||||
| 	Cause error | ||||
|  | @ -45,14 +43,6 @@ func (e *UndefinedEnvError) Error() string { | |||
| 	return fmt.Sprintf("environment \"%s\" is not defined", e.Env) | ||||
| } | ||||
| 
 | ||||
| type InvalidUpdateStrategyError struct { | ||||
| 	UpdateStrategy string | ||||
| } | ||||
| 
 | ||||
| func (e *InvalidUpdateStrategyError) Error() string { | ||||
| 	return fmt.Sprintf("updateStrategy %q is invalid, valid values are: %s or not set", e.UpdateStrategy, strings.Join(ValidUpdateStrategyValues, ", ")) | ||||
| } | ||||
| 
 | ||||
| type StateCreator struct { | ||||
| 	logger *zap.SugaredLogger | ||||
| 
 | ||||
|  | @ -126,19 +116,11 @@ func (c *StateCreator) Parse(content []byte, baseDir, file string) (*HelmState, | |||
| 			return nil, &StateLoadError{fmt.Sprintf("failed to read %s: reading document at index %d", file, i), err} | ||||
| 		} | ||||
| 
 | ||||
| 		if err := mergo.Merge(&state, &intermediate, mergo.WithAppendSlice, mergo.WithOverride); err != nil { | ||||
| 		if err := mergo.Merge(&state, &intermediate, mergo.WithAppendSlice); err != nil { | ||||
| 			return nil, &StateLoadError{fmt.Sprintf("failed to read %s: merging document at index %d", file, i), err} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	state.logger = c.logger | ||||
| 	state.valsRuntime = c.valsRuntime | ||||
| 
 | ||||
| 	return &state, nil | ||||
| } | ||||
| 
 | ||||
| // applyDefaultsAndOverrides applies default binary paths and command-line overrides
 | ||||
| func (c *StateCreator) applyDefaultsAndOverrides(state *HelmState) { | ||||
| 	if c.overrideHelmBinary != "" && c.overrideHelmBinary != DefaultHelmBinary { | ||||
| 		state.DefaultHelmBinary = c.overrideHelmBinary | ||||
| 	} else if state.DefaultHelmBinary == "" { | ||||
|  | @ -152,6 +134,11 @@ func (c *StateCreator) applyDefaultsAndOverrides(state *HelmState) { | |||
| 		// Let `helmfile --kustomize-binary ""` not break this helmfile run
 | ||||
| 		state.DefaultKustomizeBinary = DefaultKustomizeBinary | ||||
| 	} | ||||
| 
 | ||||
| 	state.logger = c.logger | ||||
| 	state.valsRuntime = c.valsRuntime | ||||
| 
 | ||||
| 	return &state, nil | ||||
| } | ||||
| 
 | ||||
| // LoadEnvValues loads environment values files relative to the `baseDir`
 | ||||
|  | @ -194,11 +181,6 @@ func (c *StateCreator) ParseAndLoad(content []byte, baseDir, file string, envNam | |||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 
 | ||||
| 		// Apply default binaries and command-line overrides only for the main helmfile
 | ||||
| 		// after loading and merging all bases. This ensures that values from bases are
 | ||||
| 		// properly respected and that later bases/documents can override earlier ones.
 | ||||
| 		c.applyDefaultsAndOverrides(state) | ||||
| 	} | ||||
| 
 | ||||
| 	state, err = c.LoadEnvValues(state, envName, failOnMissingEnv, envValues, overrode) | ||||
|  | @ -234,7 +216,7 @@ func (c *StateCreator) loadBases(envValues, overrodeEnv *environment.Environment | |||
| 	layers = append(layers, st) | ||||
| 
 | ||||
| 	for i := 1; i < len(layers); i++ { | ||||
| 		if err := mergo.Merge(layers[0], layers[i], mergo.WithAppendSlice, mergo.WithOverride); err != nil { | ||||
| 		if err := mergo.Merge(layers[0], layers[i], mergo.WithAppendSlice); err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -1,7 +1,6 @@ | |||
| package state | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"path/filepath" | ||||
| 	"reflect" | ||||
| 	"testing" | ||||
|  | @ -526,205 +525,3 @@ releaseContext: | |||
| 		t.Errorf("unexpected values: expected=%v, actual=%v", expectedValues, actualValues) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // TestHelmBinaryInBases tests that helmBinary and kustomizeBinary settings
 | ||||
| // from bases are properly merged with later values overriding earlier ones
 | ||||
| func TestHelmBinaryInBases(t *testing.T) { | ||||
| 	tests := []struct { | ||||
| 		name                    string | ||||
| 		files                   map[string]string | ||||
| 		mainFile                string | ||||
| 		expectedHelmBinary      string | ||||
| 		expectedKustomizeBinary string | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name: "helmBinary in second base should be used", | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": `bases: | ||||
|   - ./bases/env.yaml | ||||
| --- | ||||
| bases: | ||||
|   - ./bases/repos.yaml | ||||
| --- | ||||
| bases: | ||||
|   - ./bases/releases.yaml | ||||
| `, | ||||
| 				"/path/to/bases/env.yaml": `environments: | ||||
|   default: | ||||
|     values: | ||||
|     - key: value1 | ||||
| `, | ||||
| 				"/path/to/bases/repos.yaml": `repositories: | ||||
|   - name: stable | ||||
|     url: https://charts.helm.sh/stable
 | ||||
| helmBinary: /path/to/custom/helm | ||||
| `, | ||||
| 				"/path/to/bases/releases.yaml": `releases: | ||||
|   - name: myapp | ||||
|     chart: stable/nginx | ||||
| `, | ||||
| 			}, | ||||
| 			mainFile:                "/path/to/helmfile.yaml", | ||||
| 			expectedHelmBinary:      "/path/to/custom/helm", | ||||
| 			expectedKustomizeBinary: DefaultKustomizeBinary, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "helmBinary in main file after bases should override", | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": `bases: | ||||
|   - ./bases/env.yaml | ||||
| --- | ||||
| bases: | ||||
|   - ./bases/repos.yaml | ||||
| --- | ||||
| bases: | ||||
|   - ./bases/releases.yaml | ||||
| helmBinary: /path/to/main/helm | ||||
| `, | ||||
| 				"/path/to/bases/env.yaml": `environments: | ||||
|   default: | ||||
|     values: | ||||
|     - key: value1 | ||||
| `, | ||||
| 				"/path/to/bases/repos.yaml": `repositories: | ||||
|   - name: stable | ||||
|     url: https://charts.helm.sh/stable
 | ||||
| helmBinary: /path/to/base/helm | ||||
| `, | ||||
| 				"/path/to/bases/releases.yaml": `releases: | ||||
|   - name: myapp | ||||
|     chart: stable/nginx | ||||
| `, | ||||
| 			}, | ||||
| 			mainFile:                "/path/to/helmfile.yaml", | ||||
| 			expectedHelmBinary:      "/path/to/main/helm", | ||||
| 			expectedKustomizeBinary: DefaultKustomizeBinary, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "helmBinary in main file between bases should override earlier bases", | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": `bases: | ||||
|   - ./bases/env.yaml | ||||
| --- | ||||
| bases: | ||||
|   - ./bases/repos.yaml | ||||
| helmBinary: /path/to/middle/helm | ||||
| --- | ||||
| bases: | ||||
|   - ./bases/releases.yaml | ||||
| `, | ||||
| 				"/path/to/bases/env.yaml": `environments: | ||||
|   default: | ||||
|     values: | ||||
|     - key: value1 | ||||
| `, | ||||
| 				"/path/to/bases/repos.yaml": `repositories: | ||||
|   - name: stable | ||||
|     url: https://charts.helm.sh/stable
 | ||||
| helmBinary: /path/to/base/helm | ||||
| `, | ||||
| 				"/path/to/bases/releases.yaml": `releases: | ||||
|   - name: myapp | ||||
|     chart: stable/nginx | ||||
| `, | ||||
| 			}, | ||||
| 			mainFile:                "/path/to/helmfile.yaml", | ||||
| 			expectedHelmBinary:      "/path/to/middle/helm", | ||||
| 			expectedKustomizeBinary: DefaultKustomizeBinary, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "kustomizeBinary in base should be used", | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": `bases: | ||||
|   - ./bases/base.yaml | ||||
| `, | ||||
| 				"/path/to/bases/base.yaml": `kustomizeBinary: /path/to/custom/kustomize | ||||
| releases: | ||||
|   - name: myapp | ||||
|     chart: mychart | ||||
| `, | ||||
| 			}, | ||||
| 			mainFile:                "/path/to/helmfile.yaml", | ||||
| 			expectedHelmBinary:      DefaultHelmBinary, | ||||
| 			expectedKustomizeBinary: "/path/to/custom/kustomize", | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "both helmBinary and kustomizeBinary in different bases", | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": `bases: | ||||
|   - ./bases/helm.yaml | ||||
| --- | ||||
| bases: | ||||
|   - ./bases/kustomize.yaml | ||||
| `, | ||||
| 				"/path/to/bases/helm.yaml": `helmBinary: /path/to/custom/helm | ||||
| `, | ||||
| 				"/path/to/bases/kustomize.yaml": `kustomizeBinary: /path/to/custom/kustomize | ||||
| `, | ||||
| 			}, | ||||
| 			mainFile:                "/path/to/helmfile.yaml", | ||||
| 			expectedHelmBinary:      "/path/to/custom/helm", | ||||
| 			expectedKustomizeBinary: "/path/to/custom/kustomize", | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "later base overrides earlier base for helmBinary", | ||||
| 			files: map[string]string{ | ||||
| 				"/path/to/helmfile.yaml": `bases: | ||||
|   - ./bases/first.yaml | ||||
| --- | ||||
| bases: | ||||
|   - ./bases/second.yaml | ||||
| `, | ||||
| 				"/path/to/bases/first.yaml": `helmBinary: /path/to/first/helm | ||||
| `, | ||||
| 				"/path/to/bases/second.yaml": `helmBinary: /path/to/second/helm | ||||
| `, | ||||
| 			}, | ||||
| 			mainFile:                "/path/to/helmfile.yaml", | ||||
| 			expectedHelmBinary:      "/path/to/second/helm", | ||||
| 			expectedKustomizeBinary: DefaultKustomizeBinary, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	for _, tt := range tests { | ||||
| 		t.Run(tt.name, func(t *testing.T) { | ||||
| 			testFs := testhelper.NewTestFs(tt.files) | ||||
| 			if testFs.Cwd == "" { | ||||
| 				testFs.Cwd = "/" | ||||
| 			} | ||||
| 
 | ||||
| 			r := remote.NewRemote(logger, testFs.Cwd, testFs.ToFileSystem()) | ||||
| 			creator := NewCreator(logger, testFs.ToFileSystem(), nil, nil, "", "", r, false, "") | ||||
| 
 | ||||
| 			// Set up LoadFile for recursive base loading
 | ||||
| 			creator.LoadFile = func(inheritedEnv, overrodeEnv *environment.Environment, baseDir, file string, evaluateBases bool) (*HelmState, error) { | ||||
| 				path := filepath.Join(baseDir, file) | ||||
| 				content, ok := tt.files[path] | ||||
| 				if !ok { | ||||
| 					return nil, fmt.Errorf("file not found: %s", path) | ||||
| 				} | ||||
| 				return creator.ParseAndLoad([]byte(content), filepath.Dir(path), path, DefaultEnv, true, evaluateBases, inheritedEnv, overrodeEnv) | ||||
| 			} | ||||
| 
 | ||||
| 			yamlContent, ok := tt.files[tt.mainFile] | ||||
| 			if !ok { | ||||
| 				t.Fatalf("no file named %q registered", tt.mainFile) | ||||
| 			} | ||||
| 
 | ||||
| 			state, err := creator.ParseAndLoad([]byte(yamlContent), filepath.Dir(tt.mainFile), tt.mainFile, DefaultEnv, true, true, nil, nil) | ||||
| 			if err != nil { | ||||
| 				t.Fatalf("unexpected error: %v", err) | ||||
| 			} | ||||
| 
 | ||||
| 			if state.DefaultHelmBinary != tt.expectedHelmBinary { | ||||
| 				t.Errorf("helmBinary mismatch: expected=%s, actual=%s", | ||||
| 					tt.expectedHelmBinary, state.DefaultHelmBinary) | ||||
| 			} | ||||
| 
 | ||||
| 			if state.DefaultKustomizeBinary != tt.expectedKustomizeBinary { | ||||
| 				t.Errorf("kustomizeBinary mismatch: expected=%s, actual=%s", | ||||
| 					tt.expectedKustomizeBinary, state.DefaultKustomizeBinary) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -43,9 +43,6 @@ const ( | |||
| 	// This is used by an interim solution to make the urfave/cli command report to the helmfile internal about that the
 | ||||
| 	// --timeout flag is missingl
 | ||||
| 	EmptyTimeout = -1 | ||||
| 
 | ||||
| 	// Valid enum for updateStrategy values
 | ||||
| 	UpdateStrategyReinstallIfForbidden = "reinstallIfForbidden" | ||||
| ) | ||||
| 
 | ||||
| // ReleaseSetSpec is release set spec
 | ||||
|  | @ -280,8 +277,6 @@ type ReleaseSpec struct { | |||
| 	Force *bool `yaml:"force,omitempty"` | ||||
| 	// Installed, when set to true, `delete --purge` the release
 | ||||
| 	Installed *bool `yaml:"installed,omitempty"` | ||||
| 	// UpdateStrategy, when set, indicate the strategy to use to update the release
 | ||||
| 	UpdateStrategy string `yaml:"updateStrategy,omitempty"` | ||||
| 	// Atomic, when set to true, restore previous state in case of a failed install/upgrade attempt
 | ||||
| 	Atomic *bool `yaml:"atomic,omitempty"` | ||||
| 	// CleanupOnFail, when set to true, the --cleanup-on-fail helm flag is passed to the upgrade command
 | ||||
|  | @ -472,7 +467,6 @@ type SetValue struct { | |||
| // AffectedReleases hold the list of released that where updated, deleted, or in error
 | ||||
| type AffectedReleases struct { | ||||
| 	Upgraded     []*ReleaseSpec | ||||
| 	Reinstalled  []*ReleaseSpec | ||||
| 	Deleted      []*ReleaseSpec | ||||
| 	Failed       []*ReleaseSpec | ||||
| 	DeleteFailed []*ReleaseSpec | ||||
|  | @ -1043,10 +1037,7 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme | |||
| 						} | ||||
| 						m.Unlock() | ||||
| 					} | ||||
| 				} else if release.UpdateStrategy == UpdateStrategyReinstallIfForbidden { | ||||
| 					relErr = st.performSyncOrReinstallOfRelease(affectedReleases, helm, context, release, chart, m, flags...) | ||||
| 				} else { | ||||
| 					if err := helm.SyncRelease(context, release.Name, chart, release.Namespace, flags...); err != nil { | ||||
| 				} else if err := helm.SyncRelease(context, release.Name, chart, release.Namespace, flags...); err != nil { | ||||
| 					m.Lock() | ||||
| 					affectedReleases.Failed = append(affectedReleases.Failed, release) | ||||
| 					m.Unlock() | ||||
|  | @ -1062,7 +1053,6 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme | |||
| 						release.installedVersion = installedVersion | ||||
| 					} | ||||
| 				} | ||||
| 				} | ||||
| 
 | ||||
| 				if _, err := st.triggerPostsyncEvent(release, relErr, "sync"); err != nil { | ||||
| 					if relErr == nil { | ||||
|  | @ -1106,77 +1096,6 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme | |||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (st *HelmState) performSyncOrReinstallOfRelease(affectedReleases *AffectedReleases, helm helmexec.Interface, context helmexec.HelmContext, release *ReleaseSpec, chart string, m *sync.Mutex, flags ...string) *ReleaseError { | ||||
| 	if err := helm.SyncRelease(context, release.Name, chart, release.Namespace, flags...); err != nil { | ||||
| 		st.logger.Debugf("update strategy - sync failed: %s", err.Error()) | ||||
| 		// Only fail if a different error than forbidden updates
 | ||||
| 		if !strings.Contains(err.Error(), "Forbidden: updates") { | ||||
| 			st.logger.Debugf("update strategy - sync failed not due to Forbidden updates") | ||||
| 			m.Lock() | ||||
| 			affectedReleases.Failed = append(affectedReleases.Failed, release) | ||||
| 			m.Unlock() | ||||
| 			return newReleaseFailedError(release, err) | ||||
| 		} | ||||
| 	} else { | ||||
| 		st.logger.Debugf("update strategy - sync success") | ||||
| 		m.Lock() | ||||
| 		affectedReleases.Upgraded = append(affectedReleases.Upgraded, release) | ||||
| 		m.Unlock() | ||||
| 		installedVersion, err := st.getDeployedVersion(context, helm, release) | ||||
| 		if err != nil { // err is not really impacting so just log it
 | ||||
| 			st.logger.Debugf("update strategy - getting deployed release version failed: %v", err) | ||||
| 		} else { | ||||
| 			release.installedVersion = installedVersion | ||||
| 		} | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	st.logger.Infof("Failed to sync due to forbidden updates, attempting to reinstall %q allowed by update strategy", release.Name) | ||||
| 	installed, err := st.isReleaseInstalled(context, helm, *release) | ||||
| 	if err != nil { | ||||
| 		return newReleaseFailedError(release, err) | ||||
| 	} | ||||
| 	if installed { | ||||
| 		var args []string | ||||
| 		if release.Namespace != "" { | ||||
| 			args = append(args, "--namespace", release.Namespace) | ||||
| 		} | ||||
| 		deleteWaitFlag := true | ||||
| 		release.DeleteWait = &deleteWaitFlag | ||||
| 		args = st.appendDeleteWaitFlags(args, release) | ||||
| 		deletionFlags := st.appendConnectionFlags(args, release) | ||||
| 		m.Lock() | ||||
| 		if _, err := st.triggerReleaseEvent("preuninstall", nil, release, "sync"); err != nil { | ||||
| 			affectedReleases.Failed = append(affectedReleases.Failed, release) | ||||
| 			return newReleaseFailedError(release, err) | ||||
| 		} else if err := helm.DeleteRelease(context, release.Name, deletionFlags...); err != nil { | ||||
| 			affectedReleases.Failed = append(affectedReleases.Failed, release) | ||||
| 			return newReleaseFailedError(release, err) | ||||
| 		} else if _, err := st.triggerReleaseEvent("postuninstall", nil, release, "sync"); err != nil { | ||||
| 			affectedReleases.Failed = append(affectedReleases.Failed, release) | ||||
| 			return newReleaseFailedError(release, err) | ||||
| 		} | ||||
| 		m.Unlock() | ||||
| 	} | ||||
| 	if err := helm.SyncRelease(context, release.Name, chart, release.Namespace, flags...); err != nil { | ||||
| 		m.Lock() | ||||
| 		affectedReleases.Failed = append(affectedReleases.Failed, release) | ||||
| 		m.Unlock() | ||||
| 		return newReleaseFailedError(release, err) | ||||
| 	} else { | ||||
| 		m.Lock() | ||||
| 		affectedReleases.Reinstalled = append(affectedReleases.Reinstalled, release) | ||||
| 		m.Unlock() | ||||
| 		installedVersion, err := st.getDeployedVersion(context, helm, release) | ||||
| 		if err != nil { // err is not really impacting so just log it
 | ||||
| 			st.logger.Debugf("update strategy - getting deployed release version failed: %v", err) | ||||
| 		} else { | ||||
| 			release.installedVersion = installedVersion | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (st *HelmState) listReleases(context helmexec.HelmContext, helm helmexec.Interface, release *ReleaseSpec) (string, error) { | ||||
| 	flags := st.kubeConnectionFlags(release) | ||||
| 	if release.Namespace != "" { | ||||
|  | @ -1220,16 +1139,6 @@ func releasesNeedCharts(releases []ReleaseSpec) []ReleaseSpec { | |||
| 	return result | ||||
| } | ||||
| 
 | ||||
| func filterReleasesForBuild(releases []ReleaseSpec) []ReleaseSpec { | ||||
| 	var filteredReleases []ReleaseSpec | ||||
| 	for _, r := range releases { | ||||
| 		if len(r.JSONPatches) == 0 && len(r.StrategicMergePatches) == 0 && len(r.Transformers) == 0 { | ||||
| 			filteredReleases = append(filteredReleases, r) | ||||
| 		} | ||||
| 	} | ||||
| 	return filteredReleases | ||||
| } | ||||
| 
 | ||||
| type ChartPrepareOptions struct { | ||||
| 	ForceDownload bool | ||||
| 	SkipRepos     bool | ||||
|  | @ -1313,8 +1222,100 @@ type PrepareChartKey struct { | |||
| // Otheriwse, 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) (string, bool, error) { | ||||
| func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurrency int, helmfileCommand string, opts ChartPrepareOptions) (map[PrepareChartKey]string, []error) { | ||||
| 	if !opts.SkipResolve { | ||||
| 		updated, err := st.ResolveDeps() | ||||
| 		if err != nil { | ||||
| 			return nil, []error{err} | ||||
| 		} | ||||
| 		*st = *updated | ||||
| 	} | ||||
| 	selected, err := st.GetSelectedReleases(opts.IncludeTransitiveNeeds) | ||||
| 	if err != nil { | ||||
| 		return nil, []error{err} | ||||
| 	} | ||||
| 
 | ||||
| 	releases := releasesNeedCharts(selected) | ||||
| 
 | ||||
| 	var prepareChartInfoMutex sync.Mutex | ||||
| 
 | ||||
| 	prepareChartInfo := make(map[PrepareChartKey]string, len(releases)) | ||||
| 
 | ||||
| 	errs := []error{} | ||||
| 
 | ||||
| 	jobQueue := make(chan *ReleaseSpec, len(releases)) | ||||
| 	results := make(chan *chartPrepareResult, len(releases)) | ||||
| 
 | ||||
| 	var builds []*chartPrepareResult | ||||
| 
 | ||||
| 	st.scatterGather( | ||||
| 		concurrency, | ||||
| 		len(releases), | ||||
| 		func() { | ||||
| 			for i := 0; i < len(releases); i++ { | ||||
| 				jobQueue <- &releases[i] | ||||
| 			} | ||||
| 			close(jobQueue) | ||||
| 		}, | ||||
| 		func(workerIndex int) { | ||||
| 			for release := range jobQueue { | ||||
| 				if st.OverrideChart != "" { | ||||
| 					release.Chart = st.OverrideChart | ||||
| 				} | ||||
| 				// Call user-defined `prepare` hooks to create/modify local charts to be used by
 | ||||
| 				// the later process.
 | ||||
| 				//
 | ||||
| 				// If it wasn't called here, Helmfile can end up an issue like
 | ||||
| 				// https://github.com/roboll/helmfile/issues/1328
 | ||||
| 				if _, err := st.triggerPrepareEvent(release, helmfileCommand); err != nil { | ||||
| 					results <- &chartPrepareResult{err: err} | ||||
| 					return | ||||
| 				} | ||||
| 
 | ||||
| 				chartName := release.Chart | ||||
| 
 | ||||
| 				chartPath, err := st.downloadChartWithGoGetter(release) | ||||
| 				if err != nil { | ||||
| 					results <- &chartPrepareResult{err: fmt.Errorf("release %q: %w", release.Name, err)} | ||||
| 					return | ||||
| 				} | ||||
| 				chartFetchedByGoGetter := chartPath != chartName | ||||
| 
 | ||||
| 				if !chartFetchedByGoGetter { | ||||
| 					ociChartPath, err := st.getOCIChart(release, dir, helm, opts) | ||||
| 					if err != nil { | ||||
| 						results <- &chartPrepareResult{err: fmt.Errorf("release %q: %w", release.Name, err)} | ||||
| 
 | ||||
| 						return | ||||
| 					} | ||||
| 
 | ||||
| 					if ociChartPath != nil { | ||||
| 						chartPath = *ociChartPath | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
| 				isLocal := st.fs.DirectoryExistsAt(normalizeChart(st.basePath, chartName)) | ||||
| 
 | ||||
| 				chartification, clean, err := st.PrepareChartify(helm, release, chartPath, workerIndex) | ||||
| 
 | ||||
| 				if !opts.SkipCleanup { | ||||
| 					// nolint: staticcheck
 | ||||
| 					defer clean() | ||||
| 				} | ||||
| 
 | ||||
| 				if err != nil { | ||||
| 					results <- &chartPrepareResult{err: err} | ||||
| 					return | ||||
| 				} | ||||
| 
 | ||||
| 				var buildDeps bool | ||||
| 
 | ||||
| 				skipDepsGlobal := opts.SkipDeps | ||||
| 				skipDepsRelease := release.SkipDeps != nil && *release.SkipDeps | ||||
| 				skipDepsDefault := release.SkipDeps == nil && st.HelmDefaults.SkipDeps | ||||
| 				skipDeps := (!isLocal && !chartFetchedByGoGetter) || skipDepsGlobal || skipDepsRelease || skipDepsDefault | ||||
| 
 | ||||
| 				if chartification != nil && helmfileCommand != "pull" { | ||||
| 					c := chartify.New( | ||||
| 						chartify.HelmBin(st.DefaultHelmBinary), | ||||
| 						chartify.KustomizeBin(st.DefaultKustomizeBinary), | ||||
|  | @ -1353,135 +1354,53 @@ func (st *HelmState) processChartification(chartification *Chartify, release *Re | |||
| 
 | ||||
| 					out, err := c.Chartify(release.Name, chartPath, chartify.WithChartifyOpts(chartifyOpts)) | ||||
| 					if err != nil { | ||||
| 		return "", false, err | ||||
| 						results <- &chartPrepareResult{err: err} | ||||
| 						return | ||||
| 					} else { | ||||
| 						chartPath = out | ||||
| 					} | ||||
| 
 | ||||
| 	chartPath = out | ||||
| 					// Skip `helm dep build` and `helm dep up` altogether when the chart is from remote or the dep is
 | ||||
| 					// explicitly skipped.
 | ||||
| 	buildDeps := !skipDeps | ||||
| 	return chartPath, buildDeps, nil | ||||
| } | ||||
| 
 | ||||
| // processLocalChart handles local chart processing
 | ||||
| func (st *HelmState) processLocalChart(normalizedChart, dir string, release *ReleaseSpec, helmfileCommand string, opts ChartPrepareOptions, isLocal bool) (string, error) { | ||||
| 	chartPath := normalizedChart | ||||
| 					buildDeps = !skipDeps | ||||
| 				} else if normalizedChart := normalizeChart(st.basePath, chartPath); st.fs.DirectoryExistsAt(normalizedChart) { | ||||
| 					// At this point, we are sure that chartPath is a local directory containing either:
 | ||||
| 					// - A remote chart fetched by go-getter or
 | ||||
| 					// - A local chart
 | ||||
| 					//
 | ||||
| 					// The chart may have Chart.yaml(and requirements.yaml for Helm 2), and optionally Chart.lock/requirements.lock,
 | ||||
| 					// but no `charts/` directory populated at all, or a subet of chart dependencies are missing in the directory.
 | ||||
| 					//
 | ||||
| 					// In such situation, Helm fails with an error like:
 | ||||
| 					//   Error: found in Chart.yaml, but missing in charts/ directory: cert-manager, prometheus, postgresql, gitlab-runner, grafana, redis
 | ||||
| 					//
 | ||||
| 					// (See also https://github.com/roboll/helmfile/issues/1401#issuecomment-670854495)
 | ||||
| 					//
 | ||||
| 					// To avoid it, we need to call a `helm dep build` command on the chart.
 | ||||
| 					// But the command may consistently fail when an outdated Chart.lock exists.
 | ||||
| 					//
 | ||||
| 					// (I've mentioned about such case in https://github.com/roboll/helmfile/pull/1400.)
 | ||||
| 					//
 | ||||
| 					// Trying to run `helm dep build` on the chart regardless of if it's from local or remote is
 | ||||
| 					// problematic, as usually the user would have no way to fix the remote chart on their own.
 | ||||
| 					//
 | ||||
| 					// Given that, we always run `helm dep build` on the chart here, but tolerate any error caused by it
 | ||||
| 					// for a remote chart, so that the user can notice/fix the issue in a local chart while
 | ||||
| 					// a broken remote chart won't completely block their job.
 | ||||
| 					chartPath = normalizedChart | ||||
| 					if helmfileCommand == "pull" && isLocal { | ||||
| 						chartAbsPath := strings.TrimSuffix(filepath.Clean(normalizedChart), "/") | ||||
| 		var err error | ||||
| 						chartPath, err = generateChartPath(filepath.Base(chartAbsPath), dir, release, opts.OutputDirTemplate) | ||||
| 						if err != nil { | ||||
| 			return "", err | ||||
| 							results <- &chartPrepareResult{err: err} | ||||
| 							return | ||||
| 						} | ||||
| 						if err := st.fs.CopyDir(normalizedChart, filepath.Clean(chartPath)); err != nil { | ||||
| 			return "", err | ||||
| 		} | ||||
| 	} | ||||
| 	return chartPath, nil | ||||
| } | ||||
| 
 | ||||
| // forcedDownloadChart handles forced chart downloads
 | ||||
| func (st *HelmState) forcedDownloadChart(chartName, dir string, release *ReleaseSpec, helm helmexec.Interface, opts ChartPrepareOptions) (string, error) { | ||||
| 	// Check global chart cache first for non-OCI charts
 | ||||
| 	cacheKey := st.getChartCacheKey(release) | ||||
| 	if cachedPath, exists := st.checkChartCache(cacheKey); exists && st.fs.DirectoryExistsAt(cachedPath) { | ||||
| 		st.logger.Debugf("Chart %s:%s already downloaded, using cached version at %s", chartName, release.Version, cachedPath) | ||||
| 		return cachedPath, nil | ||||
| 	} | ||||
| 
 | ||||
| 	chartPath, err := generateChartPath(chartName, dir, release, opts.OutputDirTemplate) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	// only fetch chart if it is not already fetched
 | ||||
| 	if _, err := os.Stat(chartPath); os.IsNotExist(err) { | ||||
| 		var fetchFlags []string | ||||
| 		fetchFlags = st.appendChartVersionFlags(fetchFlags, release) | ||||
| 		fetchFlags = append(fetchFlags, "--untar", "--untardir", chartPath) | ||||
| 		if err := helm.Fetch(chartName, fetchFlags...); err != nil { | ||||
| 			return "", err | ||||
| 		} | ||||
| 	} else { | ||||
| 		st.logger.Infof("\"%s\" has not been downloaded because the output directory \"%s\" already exists", chartName, chartPath) | ||||
| 	} | ||||
| 
 | ||||
| 	// Set chartPath to be the path containing Chart.yaml, if found
 | ||||
| 	fullChartPath, err := findChartDirectory(chartPath) | ||||
| 	if err == nil { | ||||
| 		chartPath = filepath.Dir(fullChartPath) | ||||
| 	} | ||||
| 
 | ||||
| 	// Add to global chart cache
 | ||||
| 	st.addToChartCache(cacheKey, chartPath) | ||||
| 
 | ||||
| 	return chartPath, nil | ||||
| } | ||||
| 
 | ||||
| // prepareChartForRelease processes a single release and prepares its chart
 | ||||
| func (st *HelmState) prepareChartForRelease(release *ReleaseSpec, helm helmexec.Interface, dir string, helmfileCommand string, opts ChartPrepareOptions, workerIndex int) *chartPrepareResult { | ||||
| 	if st.OverrideChart != "" { | ||||
| 		release.Chart = st.OverrideChart | ||||
| 	} | ||||
| 
 | ||||
| 	// Call user-defined `prepare` hooks to create/modify local charts to be used by
 | ||||
| 	// the later process.
 | ||||
| 	//
 | ||||
| 	// If it wasn't called here, Helmfile can end up an issue like
 | ||||
| 	// https://github.com/roboll/helmfile/issues/1328
 | ||||
| 	if _, err := st.triggerPrepareEvent(release, helmfileCommand); err != nil { | ||||
| 		return &chartPrepareResult{err: err} | ||||
| 	} | ||||
| 
 | ||||
| 	chartName := release.Chart | ||||
| 
 | ||||
| 	chartPath, err := st.downloadChartWithGoGetter(release) | ||||
| 	if err != nil { | ||||
| 		return &chartPrepareResult{err: fmt.Errorf("release %q: %w", release.Name, err)} | ||||
| 	} | ||||
| 	chartFetchedByGoGetter := chartPath != chartName | ||||
| 
 | ||||
| 	if !chartFetchedByGoGetter { | ||||
| 		ociChartPath, err := st.getOCIChart(release, dir, helm, opts) | ||||
| 		if err != nil { | ||||
| 			return &chartPrepareResult{err: fmt.Errorf("release %q: %w", release.Name, err)} | ||||
| 		} | ||||
| 
 | ||||
| 		if ociChartPath != nil { | ||||
| 			chartPath = *ociChartPath | ||||
| 							results <- &chartPrepareResult{err: err} | ||||
| 							return | ||||
| 						} | ||||
| 					} | ||||
| 
 | ||||
| 	isLocal := st.fs.DirectoryExistsAt(normalizeChart(st.basePath, chartName)) | ||||
| 
 | ||||
| 	chartification, clean, err := st.PrepareChartify(helm, release, chartPath, workerIndex) | ||||
| 
 | ||||
| 	if !opts.SkipCleanup { | ||||
| 		// nolint: staticcheck
 | ||||
| 		defer clean() | ||||
| 	} | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		return &chartPrepareResult{err: err} | ||||
| 	} | ||||
| 
 | ||||
| 	var buildDeps bool | ||||
| 
 | ||||
| 	skipDepsGlobal := opts.SkipDeps | ||||
| 	skipDepsRelease := release.SkipDeps != nil && *release.SkipDeps | ||||
| 	skipDepsDefault := release.SkipDeps == nil && st.HelmDefaults.SkipDeps | ||||
| 	skipDeps := (!isLocal && !chartFetchedByGoGetter) || skipDepsGlobal || skipDepsRelease || skipDepsDefault | ||||
| 
 | ||||
| 	if chartification != nil && helmfileCommand != "pull" { | ||||
| 		chartPath, buildDeps, err = st.processChartification(chartification, release, chartPath, opts, skipDeps) | ||||
| 		if err != nil { | ||||
| 			return &chartPrepareResult{err: err} | ||||
| 		} | ||||
| 	} else if normalizedChart := normalizeChart(st.basePath, chartPath); st.fs.DirectoryExistsAt(normalizedChart) { | ||||
| 		chartPath, err = st.processLocalChart(normalizedChart, dir, release, helmfileCommand, opts, isLocal) | ||||
| 		if err != nil { | ||||
| 			return &chartPrepareResult{err: err} | ||||
| 		} | ||||
| 					buildDeps = !skipDeps | ||||
| 				} else if !opts.ForceDownload { | ||||
| 					// At this point, we are sure that either:
 | ||||
|  | @ -1496,13 +1415,33 @@ func (st *HelmState) prepareChartForRelease(release *ReleaseSpec, helm helmexec. | |||
| 					//    For helm 2, we `helm fetch` with the version flags and call `helm template`
 | ||||
| 					//    WITHOUT the version flags.
 | ||||
| 				} else { | ||||
| 		chartPath, err = st.forcedDownloadChart(chartName, dir, release, helm, opts) | ||||
| 					chartPath, err = generateChartPath(chartName, dir, release, opts.OutputDirTemplate) | ||||
| 					if err != nil { | ||||
| 			return &chartPrepareResult{err: err} | ||||
| 						results <- &chartPrepareResult{err: err} | ||||
| 						return | ||||
| 					} | ||||
| 
 | ||||
| 					// only fetch chart if it is not already fetched
 | ||||
| 					if _, err := os.Stat(chartPath); os.IsNotExist(err) { | ||||
| 						var fetchFlags []string | ||||
| 						fetchFlags = st.appendChartVersionFlags(fetchFlags, release) | ||||
| 						fetchFlags = append(fetchFlags, "--untar", "--untardir", chartPath) | ||||
| 						if err := helm.Fetch(chartName, fetchFlags...); err != nil { | ||||
| 							results <- &chartPrepareResult{err: err} | ||||
| 							return | ||||
| 						} | ||||
| 					} else { | ||||
| 						st.logger.Infof("\"%s\" has not been downloaded because the output directory \"%s\" already exists", chartName, chartPath) | ||||
| 					} | ||||
| 
 | ||||
| 					// Set chartPath to be the path containing Chart.yaml, if found
 | ||||
| 					fullChartPath, err := findChartDirectory(chartPath) | ||||
| 					if err == nil { | ||||
| 						chartPath = filepath.Dir(fullChartPath) | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
| 	return &chartPrepareResult{ | ||||
| 				results <- &chartPrepareResult{ | ||||
| 					releaseName:            release.Name, | ||||
| 					chartName:              chartName, | ||||
| 					releaseNamespace:       release.Namespace, | ||||
|  | @ -1513,53 +1452,6 @@ func (st *HelmState) prepareChartForRelease(release *ReleaseSpec, helm helmexec. | |||
| 					chartFetchedByGoGetter: chartFetchedByGoGetter, | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurrency int, helmfileCommand string, opts ChartPrepareOptions) (map[PrepareChartKey]string, []error) { | ||||
| 	if !opts.SkipResolve { | ||||
| 		updated, err := st.ResolveDeps() | ||||
| 		if err != nil { | ||||
| 			return nil, []error{err} | ||||
| 		} | ||||
| 		*st = *updated | ||||
| 	} | ||||
| 	selected, err := st.GetSelectedReleases(opts.IncludeTransitiveNeeds) | ||||
| 	if err != nil { | ||||
| 		return nil, []error{err} | ||||
| 	} | ||||
| 
 | ||||
| 	releases := releasesNeedCharts(selected) | ||||
| 
 | ||||
| 	// For build command, skip releases that require chartify (jsonPatches, etc.)
 | ||||
| 	// as we only need to output state, not actually template the charts
 | ||||
| 	if helmfileCommand == "build" { | ||||
| 		releases = filterReleasesForBuild(releases) | ||||
| 	} | ||||
| 
 | ||||
| 	var prepareChartInfoMutex sync.Mutex | ||||
| 
 | ||||
| 	prepareChartInfo := make(map[PrepareChartKey]string, len(releases)) | ||||
| 
 | ||||
| 	errs := []error{} | ||||
| 
 | ||||
| 	jobQueue := make(chan *ReleaseSpec, len(releases)) | ||||
| 	results := make(chan *chartPrepareResult, len(releases)) | ||||
| 
 | ||||
| 	var builds []*chartPrepareResult | ||||
| 
 | ||||
| 	st.scatterGather( | ||||
| 		concurrency, | ||||
| 		len(releases), | ||||
| 		func() { | ||||
| 			for i := 0; i < len(releases); i++ { | ||||
| 				jobQueue <- &releases[i] | ||||
| 			} | ||||
| 			close(jobQueue) | ||||
| 		}, | ||||
| 		func(workerIndex int) { | ||||
| 			for release := range jobQueue { | ||||
| 				result := st.prepareChartForRelease(release, helm, dir, helmfileCommand, opts, workerIndex) | ||||
| 				results <- result | ||||
| 			} | ||||
| 		}, | ||||
| 		func() { | ||||
| 			for i := 0; i < len(releases); i++ { | ||||
|  | @ -3816,28 +3708,6 @@ func (ar *AffectedReleases) DisplayAffectedReleases(logger *zap.SugaredLogger) { | |||
| 		} | ||||
| 		logger.Info(tbl.String()) | ||||
| 	} | ||||
| 	if len(ar.Reinstalled) > 0 { | ||||
| 		logger.Info("\nREINSTALLED RELEASES:") | ||||
| 		tbl, _ := prettytable.NewTable(prettytable.Column{Header: "NAME"}, | ||||
| 			prettytable.Column{Header: "NAMESPACE", MinWidth: 6}, | ||||
| 			prettytable.Column{Header: "CHART", MinWidth: 6}, | ||||
| 			prettytable.Column{Header: "VERSION", MinWidth: 6}, | ||||
| 			prettytable.Column{Header: "DURATION", AlignRight: true}, | ||||
| 		) | ||||
| 		tbl.Separator = "   " | ||||
| 		for _, release := range ar.Reinstalled { | ||||
| 			modifiedChart, modErr := hideChartCredentials(release.Chart) | ||||
| 			if modErr != nil { | ||||
| 				logger.Warn("Could not modify chart credentials, %v", modErr) | ||||
| 				continue | ||||
| 			} | ||||
| 			err := tbl.AddRow(release.Name, release.Namespace, modifiedChart, release.installedVersion, release.duration.Round(time.Second)) | ||||
| 			if err != nil { | ||||
| 				logger.Warn("Could not add row, %v", err) | ||||
| 			} | ||||
| 		} | ||||
| 		logger.Info(tbl.String()) | ||||
| 	} | ||||
| 	if len(ar.Deleted) > 0 { | ||||
| 		logger.Info("\nDELETED RELEASES:") | ||||
| 		tbl, _ := prettytable.NewTable(prettytable.Column{Header: "NAME"}, | ||||
|  | @ -4170,47 +4040,9 @@ func (st *HelmState) Reverse() { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Chart cache for both OCI and non-OCI charts to avoid duplicate downloads
 | ||||
| type ChartCacheKey struct { | ||||
| 	Chart   string | ||||
| 	Version string | ||||
| } | ||||
| 
 | ||||
| var downloadedCharts = make(map[ChartCacheKey]string) // key -> chart path
 | ||||
| var downloadedChartsMutex sync.RWMutex | ||||
| 
 | ||||
| // Legacy OCI-specific cache (kept for backward compatibility)
 | ||||
| var downloadedOCICharts = make(map[string]bool) | ||||
| var downloadedOCIMutex sync.RWMutex | ||||
| 
 | ||||
| // getChartCacheKey creates a cache key for a chart and version
 | ||||
| func (st *HelmState) getChartCacheKey(release *ReleaseSpec) ChartCacheKey { | ||||
| 	version := release.Version | ||||
| 	if version == "" { | ||||
| 		// Use empty string for latest version
 | ||||
| 		version = "" | ||||
| 	} | ||||
| 	return ChartCacheKey{ | ||||
| 		Chart:   release.Chart, | ||||
| 		Version: version, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // checkChartCache checks if a chart is already downloaded and returns its path
 | ||||
| func (st *HelmState) checkChartCache(key ChartCacheKey) (string, bool) { | ||||
| 	downloadedChartsMutex.RLock() | ||||
| 	defer downloadedChartsMutex.RUnlock() | ||||
| 	path, exists := downloadedCharts[key] | ||||
| 	return path, exists | ||||
| } | ||||
| 
 | ||||
| // addToChartCache adds a chart to the cache
 | ||||
| func (st *HelmState) addToChartCache(key ChartCacheKey, path string) { | ||||
| 	downloadedChartsMutex.Lock() | ||||
| 	defer downloadedChartsMutex.Unlock() | ||||
| 	downloadedCharts[key] = path | ||||
| } | ||||
| 
 | ||||
| func (st *HelmState) getOCIChart(release *ReleaseSpec, tempDir string, helm helmexec.Interface, opts ChartPrepareOptions) (*string, error) { | ||||
| 	qualifiedChartName, chartName, chartVersion, err := st.getOCIQualifiedChartName(release, helm) | ||||
| 	if err != nil { | ||||
|  | @ -4221,13 +4053,6 @@ func (st *HelmState) getOCIChart(release *ReleaseSpec, tempDir string, helm helm | |||
| 		return nil, nil | ||||
| 	} | ||||
| 
 | ||||
| 	// Check global chart cache first
 | ||||
| 	cacheKey := st.getChartCacheKey(release) | ||||
| 	if cachedPath, exists := st.checkChartCache(cacheKey); exists && st.fs.DirectoryExistsAt(cachedPath) { | ||||
| 		st.logger.Debugf("OCI chart %s:%s already downloaded, using cached version at %s", chartName, chartVersion, cachedPath) | ||||
| 		return &cachedPath, nil | ||||
| 	} | ||||
| 
 | ||||
| 	if opts.OutputDirTemplate == "" { | ||||
| 		tempDir = remote.CacheDir() | ||||
| 	} | ||||
|  | @ -4288,9 +4113,6 @@ func (st *HelmState) getOCIChart(release *ReleaseSpec, tempDir string, helm helm | |||
| 
 | ||||
| 	chartPath = filepath.Dir(fullChartPath) | ||||
| 
 | ||||
| 	// Add to global chart cache
 | ||||
| 	st.addToChartCache(cacheKey, chartPath) | ||||
| 
 | ||||
| 	return &chartPath, nil | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -1640,112 +1640,6 @@ func TestHelmState_SyncReleasesAffectedRealeases(t *testing.T) { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestHelmState_SyncReleasesAffectedReleasesWithReinstallIfForbidden(t *testing.T) { | ||||
| 	no := false | ||||
| 	tests := []struct { | ||||
| 		name         string | ||||
| 		releases     []ReleaseSpec | ||||
| 		installed    []bool | ||||
| 		wantAffected exectest.Affected | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name: "2 new", | ||||
| 			releases: []ReleaseSpec{ | ||||
| 				{ | ||||
| 					Name:           "releaseNameFoo-forbidden", | ||||
| 					Chart:          "foo", | ||||
| 					UpdateStrategy: "reinstallIfForbidden", | ||||
| 				}, | ||||
| 				{ | ||||
| 					Name:           "releaseNameBar-forbidden", | ||||
| 					Chart:          "foo", | ||||
| 					UpdateStrategy: "reinstallIfForbidden", | ||||
| 				}, | ||||
| 			}, | ||||
| 			wantAffected: exectest.Affected{ | ||||
| 				Upgraded: []*exectest.Release{ | ||||
| 					{Name: "releaseNameFoo-forbidden", Flags: []string{}}, | ||||
| 					{Name: "releaseNameBar-forbidden", Flags: []string{}}, | ||||
| 				}, | ||||
| 				Reinstalled: nil, | ||||
| 				Deleted:     nil, | ||||
| 				Failed:      nil, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "1 removed, 1 new, 1 reinstalled first new", | ||||
| 			releases: []ReleaseSpec{ | ||||
| 				{ | ||||
| 					Name:           "releaseNameFoo-forbidden", | ||||
| 					Chart:          "foo", | ||||
| 					UpdateStrategy: "reinstallIfForbidden", | ||||
| 				}, | ||||
| 				{ | ||||
| 					Name:           "releaseNameBar", | ||||
| 					Chart:          "foo", | ||||
| 					UpdateStrategy: "reinstallIfForbidden", | ||||
| 					Installed:      &no, | ||||
| 				}, | ||||
| 				{ | ||||
| 					Name:           "releaseNameFoo-forbidden", | ||||
| 					Chart:          "foo", | ||||
| 					UpdateStrategy: "reinstallIfForbidden", | ||||
| 				}, | ||||
| 			}, | ||||
| 			installed: []bool{true, true, true}, | ||||
| 			wantAffected: exectest.Affected{ | ||||
| 				Upgraded: []*exectest.Release{ | ||||
| 					{Name: "releaseNameFoo-forbidden", Flags: []string{}}, | ||||
| 				}, | ||||
| 				Reinstalled: []*exectest.Release{ | ||||
| 					{Name: "releaseNameFoo-forbidden", Flags: []string{}}, | ||||
| 				}, | ||||
| 				Deleted: []*exectest.Release{ | ||||
| 					{Name: "releaseNameBar", Flags: []string{}}, | ||||
| 				}, | ||||
| 				Failed: nil, | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
| 	for _, tt := range tests { | ||||
| 		t.Run(tt.name, func(t *testing.T) { | ||||
| 			state := &HelmState{ | ||||
| 				ReleaseSetSpec: ReleaseSetSpec{ | ||||
| 					Releases: tt.releases, | ||||
| 				}, | ||||
| 				logger:         logger, | ||||
| 				valsRuntime:    valsRuntime, | ||||
| 				RenderedValues: map[string]any{}, | ||||
| 			} | ||||
| 			helm := &exectest.Helm{ | ||||
| 				Lists: map[exectest.ListKey]string{}, | ||||
| 			} | ||||
| 			//simulate the release is already installed
 | ||||
| 			for i, release := range tt.releases { | ||||
| 				if tt.installed != nil && tt.installed[i] { | ||||
| 					helm.Lists[exectest.ListKey{Filter: "^" + release.Name + "$", Flags: "--uninstalling --deployed --failed --pending"}] = release.Name | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			affectedReleases := AffectedReleases{} | ||||
| 			if err := state.SyncReleases(&affectedReleases, helm, []string{}, 1); err != nil { | ||||
| 				if !testEq(affectedReleases.Failed, tt.wantAffected.Failed) { | ||||
| 					t.Errorf("HelmState.SyncReleases() error failed for [%s] = %v, want %v", tt.name, affectedReleases.Failed, tt.wantAffected.Failed) | ||||
| 				} //else expected error
 | ||||
| 			} | ||||
| 			if !testEq(affectedReleases.Upgraded, tt.wantAffected.Upgraded) { | ||||
| 				t.Errorf("HelmState.SyncReleases() upgrade failed for [%s] = %v, want %v", tt.name, affectedReleases.Upgraded, tt.wantAffected.Upgraded) | ||||
| 			} | ||||
| 			if !testEq(affectedReleases.Reinstalled, tt.wantAffected.Reinstalled) { | ||||
| 				t.Errorf("HelmState.SyncReleases() reinstalled failed for [%s] = %v, want %v", tt.name, affectedReleases.Reinstalled, tt.wantAffected.Reinstalled) | ||||
| 			} | ||||
| 			if !testEq(affectedReleases.Deleted, tt.wantAffected.Deleted) { | ||||
| 				t.Errorf("HelmState.SyncReleases() deleted failed for [%s] = %v, want %v", tt.name, affectedReleases.Deleted, tt.wantAffected.Deleted) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func testEq(a []*ReleaseSpec, b []*exectest.Release) bool { | ||||
| 	// If one is nil, the other must also be nil.
 | ||||
| 	if (a == nil) != (b == nil) { | ||||
|  | @ -4744,58 +4638,3 @@ func TestPrepareSyncReleases_ValueControlReleaseOverride(t *testing.T) { | |||
| 		require.Equal(t, tt.flags, r.flags, "Wrong value control flag for release %s", r.release.Name) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestChartCacheKey(t *testing.T) { | ||||
| 	st := &HelmState{} | ||||
| 
 | ||||
| 	// Test case 1: release with version
 | ||||
| 	release1 := &ReleaseSpec{ | ||||
| 		Chart:   "stable/nginx", | ||||
| 		Version: "1.2.3", | ||||
| 	} | ||||
| 
 | ||||
| 	key1 := st.getChartCacheKey(release1) | ||||
| 	expected1 := ChartCacheKey{Chart: "stable/nginx", Version: "1.2.3"} | ||||
| 
 | ||||
| 	if key1 != expected1 { | ||||
| 		t.Errorf("Expected %+v, got %+v", expected1, key1) | ||||
| 	} | ||||
| 
 | ||||
| 	// Test case 2: release without version
 | ||||
| 	release2 := &ReleaseSpec{ | ||||
| 		Chart: "stable/nginx", | ||||
| 	} | ||||
| 
 | ||||
| 	key2 := st.getChartCacheKey(release2) | ||||
| 	expected2 := ChartCacheKey{Chart: "stable/nginx", Version: ""} | ||||
| 
 | ||||
| 	if key2 != expected2 { | ||||
| 		t.Errorf("Expected %+v, got %+v", expected2, key2) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestChartCache(t *testing.T) { | ||||
| 	st := &HelmState{} | ||||
| 
 | ||||
| 	// Create a test key
 | ||||
| 	key := ChartCacheKey{Chart: "stable/test", Version: "1.0.0"} | ||||
| 	path := "/tmp/test-chart" | ||||
| 
 | ||||
| 	// Initially, chart should not be in cache
 | ||||
| 	_, exists := st.checkChartCache(key) | ||||
| 	if exists { | ||||
| 		t.Error("Chart should not be in cache initially") | ||||
| 	} | ||||
| 
 | ||||
| 	// Add to cache
 | ||||
| 	st.addToChartCache(key, path) | ||||
| 
 | ||||
| 	// Now chart should be in cache
 | ||||
| 	cachedPath, exists := st.checkChartCache(key) | ||||
| 	if !exists { | ||||
| 		t.Error("Chart should be in cache after adding") | ||||
| 	} | ||||
| 	if cachedPath != path { | ||||
| 		t.Errorf("Expected path %s, got %s", path, cachedPath) | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -38,39 +38,39 @@ func TestGenerateID(t *testing.T) { | |||
| 	run(testcase{ | ||||
| 		subject: "baseline", | ||||
| 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, | ||||
| 		want:    "foo-values-67dc97cbcb", | ||||
| 		want:    "foo-values-7d454b9558", | ||||
| 	}) | ||||
| 
 | ||||
| 	run(testcase{ | ||||
| 		subject: "different bytes content", | ||||
| 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, | ||||
| 		data:    []byte(`{"k":"v"}`), | ||||
| 		want:    "foo-values-75d7c4758c", | ||||
| 		want:    "foo-values-59c86d55bf", | ||||
| 	}) | ||||
| 
 | ||||
| 	run(testcase{ | ||||
| 		subject: "different map content", | ||||
| 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, | ||||
| 		data:    map[string]any{"k": "v"}, | ||||
| 		want:    "foo-values-685f8cf685", | ||||
| 		want:    "foo-values-6f87c5cd79", | ||||
| 	}) | ||||
| 
 | ||||
| 	run(testcase{ | ||||
| 		subject: "different chart", | ||||
| 		release: ReleaseSpec{Name: "foo", Chart: "stable/envoy"}, | ||||
| 		want:    "foo-values-75597d9c57", | ||||
| 		want:    "foo-values-5dfd748475", | ||||
| 	}) | ||||
| 
 | ||||
| 	run(testcase{ | ||||
| 		subject: "different name", | ||||
| 		release: ReleaseSpec{Name: "bar", Chart: "incubator/raw"}, | ||||
| 		want:    "bar-values-7b77df65ff", | ||||
| 		want:    "bar-values-858b9c55cc", | ||||
| 	}) | ||||
| 
 | ||||
| 	run(testcase{ | ||||
| 		subject: "specific ns", | ||||
| 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw", Namespace: "myns"}, | ||||
| 		want:    "myns-foo-values-85f979545c", | ||||
| 		want:    "myns-foo-values-58dc9c6667", | ||||
| 	}) | ||||
| 
 | ||||
| 	for id, n := range ids { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue