Compare commits
	
		
			No commits in common. "main" and "v1.1.7" have entirely different histories.
		
	
	
		|  | @ -37,7 +37,7 @@ jobs: | ||||||
|         run: make check test |         run: make check test | ||||||
|       - name: Archive built binaries |       - name: Archive built binaries | ||||||
|         run: tar -cvf built-binaries.tar helmfile diff-yamls dyff |         run: tar -cvf built-binaries.tar helmfile diff-yamls dyff | ||||||
|       - uses: actions/upload-artifact@v5 |       - uses: actions/upload-artifact@v4 | ||||||
|         with: |         with: | ||||||
|           name: built-binaries-${{ github.run_id }} |           name: built-binaries-${{ github.run_id }} | ||||||
|           path: built-binaries.tar |           path: built-binaries.tar | ||||||
|  | @ -92,7 +92,7 @@ jobs: | ||||||
|         with: |         with: | ||||||
|           go-version-file: go.mod |           go-version-file: go.mod | ||||||
| 
 | 
 | ||||||
|       - uses: actions/download-artifact@v6 |       - uses: actions/download-artifact@v5 | ||||||
|         with: |         with: | ||||||
|           name: built-binaries-${{ github.run_id }} |           name: built-binaries-${{ github.run_id }} | ||||||
|       - name: install semver |       - name: install semver | ||||||
|  | @ -127,7 +127,7 @@ jobs: | ||||||
|       - uses: actions/checkout@v5 |       - uses: actions/checkout@v5 | ||||||
|         with: |         with: | ||||||
|           fetch-depth: 0 |           fetch-depth: 0 | ||||||
|       - uses: actions/download-artifact@v6 |       - uses: actions/download-artifact@v5 | ||||||
|         with: |         with: | ||||||
|           name: built-binaries-${{ github.run_id }} |           name: built-binaries-${{ github.run_id }} | ||||||
|       - name: Extract tar to get built binaries |       - name: Extract tar to get built binaries | ||||||
|  |  | ||||||
|  | @ -30,17 +30,6 @@ jobs: | ||||||
|           go-version-file: go.mod |           go-version-file: go.mod | ||||||
|       - name: check disk usage |       - name: check disk usage | ||||||
|         run: df -h |         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 |       - uses: goreleaser/goreleaser-action@v6 | ||||||
|         with: |         with: | ||||||
|           version: latest |           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 | 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 | ARG TARGETARCH TARGETOS TARGETPLATFORM | ||||||
| 
 | 
 | ||||||
|  | @ -93,7 +93,7 @@ RUN set -x && \ | ||||||
|     [ "$(age --version)" = "${AGE_VERSION}" ] && \ |     [ "$(age --version)" = "${AGE_VERSION}" ] && \ | ||||||
|     [ "$(age-keygen --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/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/hypnoglow/helm-s3.git --version v0.16.3 && \ | ||||||
|     helm plugin install https://github.com/aslafy-z/helm-git.git --version v1.3.0 && \ |     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 | 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. | # Set Helm home variables so that also non-root users can use plugins etc. | ||||||
| ARG HOME="/helm" | ARG HOME="/helm" | ||||||
| ENV HOME="${HOME}" | ENV HOME="${HOME}" | ||||||
|  | @ -102,7 +99,7 @@ RUN set -x && \ | ||||||
|     [ "$(age --version)" = "${AGE_VERSION}" ] && \ |     [ "$(age --version)" = "${AGE_VERSION}" ] && \ | ||||||
|     [ "$(age-keygen --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/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/hypnoglow/helm-s3.git --version v0.16.3 && \ | ||||||
|     helm plugin install https://github.com/aslafy-z/helm-git.git --version v1.3.0 && \ |     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 | 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. | # Set Helm home variables so that also non-root users can use plugins etc. | ||||||
| ARG HOME="/helm" | ARG HOME="/helm" | ||||||
| ENV HOME="${HOME}" | ENV HOME="${HOME}" | ||||||
|  | @ -102,7 +99,7 @@ RUN set -x && \ | ||||||
|     [ "$(age --version)" = "${AGE_VERSION}" ] && \ |     [ "$(age --version)" = "${AGE_VERSION}" ] && \ | ||||||
|     [ "$(age-keygen --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/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/hypnoglow/helm-s3.git --version v0.16.3 && \ | ||||||
|     helm plugin install https://github.com/aslafy-z/helm-git.git --version v1.3.0 && \ |     helm plugin install https://github.com/aslafy-z/helm-git.git --version v1.3.0 && \ | ||||||
|  |  | ||||||
|  | @ -17,7 +17,6 @@ | ||||||
| [](https://slack.sweetops.com) | [](https://slack.sweetops.com) | ||||||
| [](https://helmfile.readthedocs.io/en/latest/) | [](https://helmfile.readthedocs.io/en/latest/) | ||||||
| [](https://gurubase.io/g/helmfile) | [](https://gurubase.io/g/helmfile) | ||||||
| [](https://zread.ai/helmfile/helmfile) |  | ||||||
| 
 | 
 | ||||||
| 声明式Helm Chart管理工具 | 声明式Helm Chart管理工具 | ||||||
| <br /> | <br /> | ||||||
|  |  | ||||||
|  | @ -17,7 +17,6 @@ | ||||||
| [](https://slack.sweetops.com) | [](https://slack.sweetops.com) | ||||||
| [](https://helmfile.readthedocs.io/en/latest/) | [](https://helmfile.readthedocs.io/en/latest/) | ||||||
| [](https://gurubase.io/g/helmfile) | [](https://gurubase.io/g/helmfile) | ||||||
| [](https://zread.ai/helmfile/helmfile) |  | ||||||
| 
 | 
 | ||||||
| Deploy Kubernetes Helm Charts | Deploy Kubernetes Helm Charts | ||||||
| <br /> | <br /> | ||||||
|  |  | ||||||
|  | @ -328,9 +328,6 @@ releases: | ||||||
|     reuseValues: false |     reuseValues: false | ||||||
|     # set `false` to uninstall this release on sync.  (default true) |     # set `false` to uninstall this release on sync.  (default true) | ||||||
|     installed: 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) |     # restores previous state in case of failed release (default false) | ||||||
|     atomic: true |     atomic: true | ||||||
|     # when true, cleans up any new resources created during a failed release (default false) |     # 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 | 	dario.cat/mergo v1.0.2 | ||||||
| 	github.com/Masterminds/semver/v3 v3.4.0 | 	github.com/Masterminds/semver/v3 v3.4.0 | ||||||
| 	github.com/Masterminds/sprig/v3 v3.3.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/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc | ||||||
| 	github.com/go-test/deep v1.1.1 | 	github.com/go-test/deep v1.1.1 | ||||||
| 	github.com/golang/mock v1.6.0 | 	github.com/golang/mock v1.6.0 | ||||||
| 	github.com/google/go-cmp v0.7.0 | 	github.com/google/go-cmp v0.7.0 | ||||||
| 	github.com/gosuri/uitable v0.0.4 | 	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/hashicorp/hcl/v2 v2.24.0 | ||||||
| 	github.com/helmfile/chartify v0.25.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/cobra v1.10.1 | ||||||
| 	github.com/spf13/pflag v1.0.10 | 	github.com/spf13/pflag v1.0.10 | ||||||
| 	github.com/stretchr/testify v1.11.1 | 	github.com/stretchr/testify v1.11.1 | ||||||
|  | @ -30,7 +28,7 @@ require ( | ||||||
| 	go.yaml.in/yaml/v2 v2.4.3 | 	go.yaml.in/yaml/v2 v2.4.3 | ||||||
| 	go.yaml.in/yaml/v3 v3.0.4 | 	go.yaml.in/yaml/v3 v3.0.4 | ||||||
| 	golang.org/x/sync v0.17.0 | 	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 | 	helm.sh/helm/v3 v3.19.0 | ||||||
| 	k8s.io/apimachinery v0.34.1 | 	k8s.io/apimachinery v0.34.1 | ||||||
| ) | ) | ||||||
|  | @ -38,7 +36,7 @@ require ( | ||||||
| require ( | require ( | ||||||
| 	cloud.google.com/go v0.121.6 // indirect | 	cloud.google.com/go v0.121.6 // indirect | ||||||
| 	cloud.google.com/go/iam v1.5.2 // 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 | 	filippo.io/age v1.2.1 // indirect | ||||||
| 	github.com/Azure/go-autorest v14.2.0+incompatible // indirect | 	github.com/Azure/go-autorest v14.2.0+incompatible // indirect | ||||||
| 	github.com/Azure/go-autorest/autorest/adal v0.9.23 // 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/Azure/go-autorest/tracing v0.6.0 // indirect | ||||||
| 	github.com/Masterminds/goutils v1.1.1 // indirect | 	github.com/Masterminds/goutils v1.1.1 // indirect | ||||||
| 	github.com/a8m/envsubst v1.4.3 // 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/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect | ||||||
| 	github.com/blang/semver v3.5.1+incompatible // indirect | 	github.com/blang/semver v3.5.1+incompatible // indirect | ||||||
| 	github.com/dimchansky/utfbom v1.1.1 // indirect | 	github.com/dimchansky/utfbom v1.1.1 // indirect | ||||||
| 	github.com/fatih/color v1.18.0 | 	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-jwt/jwt/v4 v4.5.2 // indirect | ||||||
| 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect | 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect | ||||||
| 	github.com/google/go-querystring v1.1.0 // 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-cleanhttp v0.5.2 // indirect | ||||||
| 	github.com/hashicorp/go-multierror v1.1.1 // indirect | 	github.com/hashicorp/go-multierror v1.1.1 // indirect | ||||||
| 	github.com/hashicorp/go-rootcerts v1.0.2 // 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-slug v0.16.4 // indirect | ||||||
| 	github.com/hashicorp/go-sockaddr v1.0.7 // indirect | 	github.com/hashicorp/go-sockaddr v1.0.7 // indirect | ||||||
| 	github.com/hashicorp/go-tfe v1.84.0 // indirect | 	github.com/hashicorp/go-tfe v1.84.0 // indirect | ||||||
| 	github.com/hashicorp/golang-lru v1.0.2 // indirect | 	github.com/hashicorp/golang-lru v1.0.2 // indirect | ||||||
| 	github.com/hashicorp/hcl v1.0.1-vault-7 // 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/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/huandu/xstrings v1.5.0 // indirect | ||||||
| 	github.com/inconshreveable/mousetrap v1.1.0 // indirect | 	github.com/inconshreveable/mousetrap v1.1.0 // indirect | ||||||
| 	github.com/itchyny/gojq v0.12.16 // 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/klauspost/compress v1.18.0 // indirect | ||||||
| 	github.com/lib/pq v1.10.9 // indirect | 	github.com/lib/pq v1.10.9 // indirect | ||||||
| 	github.com/mattn/go-colorable v0.1.14 // 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/spf13/cast v1.7.0 // indirect | ||||||
| 	github.com/ulikunitz/xz v0.5.15 // indirect | 	github.com/ulikunitz/xz v0.5.15 // indirect | ||||||
| 	go.uber.org/atomic v1.9.0 // indirect | 	go.uber.org/atomic v1.9.0 // indirect | ||||||
| 	golang.org/x/net v0.44.0 // indirect | 	golang.org/x/net v0.43.0 // indirect | ||||||
| 	golang.org/x/oauth2 v0.31.0 // indirect | 	golang.org/x/oauth2 v0.30.0 // indirect | ||||||
| 	golang.org/x/sys v0.37.0 // indirect | 	golang.org/x/sys v0.36.0 // indirect | ||||||
| 	golang.org/x/text v0.29.0 // indirect | 	golang.org/x/text v0.28.0 // indirect | ||||||
| 	golang.org/x/time v0.13.0 // indirect | 	golang.org/x/time v0.12.0 // indirect | ||||||
| 	google.golang.org/api v0.252.0 // indirect | 	google.golang.org/api v0.248.0 // indirect | ||||||
| 	google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect | 	google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect | ||||||
| 	google.golang.org/grpc v1.75.1 // indirect | 	google.golang.org/grpc v1.74.2 // indirect | ||||||
| 	google.golang.org/protobuf v1.36.10 // indirect | 	google.golang.org/protobuf v1.36.7 // indirect | ||||||
| 	gopkg.in/ini.v1 v1.67.0 // indirect | 	gopkg.in/ini.v1 v1.67.0 // indirect | ||||||
| 	sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect | 	sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect | ||||||
| 	sigs.k8s.io/yaml v1.6.0 // indirect | 	sigs.k8s.io/yaml v1.6.0 // indirect | ||||||
|  | @ -108,10 +109,10 @@ require ( | ||||||
| require ( | require ( | ||||||
| 	al.essio.dev/pkg/shellescape v1.6.0 // indirect | 	al.essio.dev/pkg/shellescape v1.6.0 // indirect | ||||||
| 	cel.dev/expr v0.24.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/auth/oauth2adapt v0.2.8 // indirect | ||||||
| 	cloud.google.com/go/compute/metadata v0.9.0 // indirect | 	cloud.google.com/go/compute/metadata v0.8.0 // indirect | ||||||
| 	cloud.google.com/go/kms v1.23.0 // indirect | 	cloud.google.com/go/kms v1.22.0 // indirect | ||||||
| 	cloud.google.com/go/longrunning v0.6.7 // indirect | 	cloud.google.com/go/longrunning v0.6.7 // indirect | ||||||
| 	cloud.google.com/go/monitoring v1.24.2 // indirect | 	cloud.google.com/go/monitoring v1.24.2 // indirect | ||||||
| 	cloud.google.com/go/secretmanager v1.15.0 // 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/connect-sdk-go v1.5.3 // indirect | ||||||
| 	github.com/1password/onepassword-sdk-go v0.3.1 // indirect | 	github.com/1password/onepassword-sdk-go v0.3.1 // indirect | ||||||
| 	github.com/AlecAivazis/survey/v2 v2.3.6 // 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/azcore v1.19.0 // indirect | ||||||
| 	github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.12.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/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/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/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/security/keyvault/internal v1.2.0 // indirect | ||||||
| 	github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.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/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/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/exporter/metric v0.53.0 // indirect | ||||||
| 	github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping 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/MakeNowJust/heredoc v1.0.0 // indirect | ||||||
| 	github.com/Masterminds/squirrel v1.5.4 // 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/agext/levenshtein v1.2.3 // indirect | ||||||
| 	github.com/antchfx/jsonquery v1.3.6 // indirect | 	github.com/antchfx/jsonquery v1.3.6 // indirect | ||||||
| 	github.com/antchfx/xpath v1.3.5 // 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/araddon/dateparse v0.0.0-20210429162001-6b43995a97de // indirect | ||||||
| 	github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect | 	github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect | ||||||
| 	github.com/atotto/clipboard v0.1.4 // 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 v1.38.3 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.2 // indirect | 	github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/credentials v1.18.19 // indirect | 	github.com/aws/aws-sdk-go-v2/config v1.29.15 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.11 // indirect | 	github.com/aws/aws-sdk-go-v2/credentials v1.17.68 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.19.9 // indirect | 	github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.11 // indirect | 	github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.72 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.11 // indirect | 	github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.6 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect | 	github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.6 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.11 // indirect | 	github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2 // indirect | 	github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.2 // 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/presigned-url v1.13.11 // indirect | 	github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.11 // indirect | 	github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/service/kms v1.45.6 // indirect | 	github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.39.6 // indirect | 	github.com/aws/aws-sdk-go-v2/service/kms v1.38.3 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/service/ssm v1.65.1 // indirect | 	github.com/aws/aws-sdk-go-v2/service/s3 v1.80.1 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/service/sso v1.29.8 // indirect | 	github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.39.2 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.3 // indirect | 	github.com/aws/aws-sdk-go-v2/service/ssm v1.64.2 // indirect | ||||||
| 	github.com/aws/aws-sdk-go-v2/service/sts v1.38.9 // indirect | 	github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect | ||||||
| 	github.com/aws/smithy-go v1.23.1 // 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/aymanbagabas/go-osc52/v2 v2.0.1 // indirect | ||||||
| 	github.com/blang/semver/v4 v4.0.0 // indirect | 	github.com/blang/semver/v4 v4.0.0 // indirect | ||||||
| 	github.com/cenkalti/backoff/v4 v4.3.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/errdefs v0.3.0 // indirect | ||||||
| 	github.com/containerd/log v0.1.0 // indirect | 	github.com/containerd/log v0.1.0 // indirect | ||||||
| 	github.com/containerd/platforms v0.2.1 // indirect | 	github.com/containerd/platforms v0.2.1 // indirect | ||||||
| 	github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect | 	github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect | ||||||
| 	github.com/cyberark/conjur-api-go v0.13.7 // indirect | 	github.com/cyberark/conjur-api-go v0.13.3 // indirect | ||||||
| 	github.com/danieljoos/wincred v1.2.2 // indirect | 	github.com/danieljoos/wincred v1.2.2 // indirect | ||||||
| 	github.com/dustin/go-humanize v1.0.1 // indirect | 	github.com/dustin/go-humanize v1.0.1 // indirect | ||||||
| 	github.com/dylibso/observe-sdk/go v0.0.0-20240819160327-2d926c5d788a // 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/felixge/httpsnoop v1.0.4 // indirect | ||||||
| 	github.com/fxamacker/cbor/v2 v2.9.0 // indirect | 	github.com/fxamacker/cbor/v2 v2.9.0 // indirect | ||||||
| 	github.com/getsops/gopgagent v0.0.0-20241224165529-7044f28e491e // 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/ghodss/yaml v1.0.0 // indirect | ||||||
| 	github.com/go-errors/errors v1.4.2 // indirect | 	github.com/go-errors/errors v1.4.2 // indirect | ||||||
| 	github.com/go-gorp/gorp/v3 v3.1.0 // 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/logr v1.4.3 // indirect | ||||||
| 	github.com/go-logr/stdr v1.2.2 // indirect | 	github.com/go-logr/stdr v1.2.2 // indirect | ||||||
| 	github.com/go-openapi/analysis v0.24.0 // indirect | 	github.com/go-openapi/analysis v0.23.0 // indirect | ||||||
| 	github.com/go-openapi/errors v0.22.3 // indirect | 	github.com/go-openapi/errors v0.22.2 // indirect | ||||||
| 	github.com/go-openapi/jsonpointer v0.22.1 // indirect | 	github.com/go-openapi/jsonpointer v0.21.0 // indirect | ||||||
| 	github.com/go-openapi/jsonreference v0.21.2 // indirect | 	github.com/go-openapi/jsonreference v0.21.0 // indirect | ||||||
| 	github.com/go-openapi/loads v0.23.1 // indirect | 	github.com/go-openapi/loads v0.22.0 // indirect | ||||||
| 	github.com/go-openapi/runtime v0.29.0 // indirect | 	github.com/go-openapi/runtime v0.28.0 // indirect | ||||||
| 	github.com/go-openapi/spec v0.22.0 // indirect | 	github.com/go-openapi/spec v0.21.0 // indirect | ||||||
| 	github.com/go-openapi/strfmt v0.24.0 // indirect | 	github.com/go-openapi/strfmt v0.23.0 // indirect | ||||||
| 	github.com/go-openapi/swag v0.24.1 // indirect | 	github.com/go-openapi/swag v0.23.1 // indirect | ||||||
| 	github.com/go-openapi/swag/cmdutils v0.24.0 // indirect | 	github.com/go-openapi/validate 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/gobwas/glob v0.2.3 // indirect | 	github.com/gobwas/glob v0.2.3 // indirect | ||||||
| 	github.com/goccy/go-yaml v1.17.1 // indirect | 	github.com/goccy/go-yaml v1.17.1 // indirect | ||||||
| 	github.com/godbus/dbus/v5 v5.1.0 // 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/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect | ||||||
| 	github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // 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/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/parseutil v0.2.0 // indirect | ||||||
| 	github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect | 	github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect | ||||||
| 	github.com/hashicorp/go-version v1.7.0 // 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/hokaccha/go-prettyjson v0.0.0-20211117102719-0474bc63780f // indirect | ||||||
| 	github.com/ianlancetaylor/demangle v0.0.0-20240805132620-81f5be970eca // indirect | 	github.com/ianlancetaylor/demangle v0.0.0-20240805132620-81f5be970eca // indirect | ||||||
| 	github.com/itchyny/timefmt-go v0.1.6 // indirect | 	github.com/itchyny/timefmt-go v0.1.6 // indirect | ||||||
| 	github.com/jmoiron/sqlx v1.4.0 // 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/json-iterator/go v1.1.12 // indirect | ||||||
| 	github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect | 	github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect | ||||||
| 	github.com/kylelemons/godebug v1.1.0 // 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/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect | ||||||
| 	github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect | 	github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect | ||||||
| 	github.com/lucasb-eyer/go-colorful v1.2.0 // 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/mattn/go-isatty v0.0.20 // indirect | ||||||
| 	github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect | 	github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect | ||||||
| 	github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // 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/rivo/uniseg v0.4.7 // indirect | ||||||
| 	github.com/rubenv/sql-migrate v1.8.0 // indirect | 	github.com/rubenv/sql-migrate v1.8.0 // indirect | ||||||
| 	github.com/russross/blackfriday/v2 v2.1.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/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 // indirect | ||||||
| 	github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect | 	github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect | ||||||
| 	github.com/tetratelabs/wabin v0.0.0-20230304001439-f6f874872834 // 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/tidwall/pretty v1.2.0 // indirect | ||||||
| 	github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect | 	github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect | ||||||
| 	github.com/uber/jaeger-lib v2.4.1+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/x448/float16 v0.8.4 // indirect | ||||||
| 	github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect | 	github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect | ||||||
| 	github.com/xlab/treeprint v1.2.0 // indirect | 	github.com/xlab/treeprint v1.2.0 // indirect | ||||||
| 	github.com/yandex-cloud/go-genproto v0.29.0 // indirect | 	github.com/yandex-cloud/go-genproto v0.19.0 // indirect | ||||||
| 	github.com/yandex-cloud/go-sdk v0.22.0 // indirect | 	github.com/yandex-cloud/go-sdk v0.15.0 // indirect | ||||||
| 	github.com/zalando/go-keyring v0.2.6 // indirect | 	github.com/zalando/go-keyring v0.2.6 // indirect | ||||||
| 	github.com/zeebo/errs v1.4.0 // indirect | 	github.com/zeebo/errs v1.4.0 // indirect | ||||||
| 	go.mongodb.org/mongo-driver v1.17.4 // indirect | 	go.mongodb.org/mongo-driver v1.14.0 // indirect | ||||||
| 	go.opentelemetry.io/auto/sdk v1.2.1 // indirect | 	go.opentelemetry.io/auto/sdk v1.1.0 // indirect | ||||||
| 	go.opentelemetry.io/contrib/detectors/gcp v1.36.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/google.golang.org/grpc/otelgrpc v0.61.0 // indirect | ||||||
| 	go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp 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 v1.36.0 // indirect | ||||||
| 	go.opentelemetry.io/otel/metric v1.38.0 // indirect | 	go.opentelemetry.io/otel/metric v1.36.0 // indirect | ||||||
| 	go.opentelemetry.io/otel/sdk v1.38.0 // indirect | 	go.opentelemetry.io/otel/sdk v1.36.0 // indirect | ||||||
| 	go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect | 	go.opentelemetry.io/otel/sdk/metric v1.36.0 // indirect | ||||||
| 	go.opentelemetry.io/otel/trace v1.38.0 // indirect | 	go.opentelemetry.io/otel/trace v1.36.0 // indirect | ||||||
| 	go.opentelemetry.io/proto/otlp v1.5.0 // indirect | 	go.opentelemetry.io/proto/otlp v1.5.0 // indirect | ||||||
| 	go.uber.org/multierr v1.11.0 // indirect | 	go.uber.org/multierr v1.11.0 // indirect | ||||||
| 	golang.org/x/crypto v0.42.0 // indirect | 	golang.org/x/crypto v0.41.0 // indirect | ||||||
| 	golang.org/x/mod v0.27.0 // indirect | 	golang.org/x/mod v0.26.0 // indirect | ||||||
| 	golang.org/x/tools v0.36.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/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/evanphx/json-patch.v4 v4.12.0 // indirect | ||||||
| 	gopkg.in/gookit/color.v1 v1.1.6 // indirect | 	gopkg.in/gookit/color.v1 v1.1.6 // indirect | ||||||
| 	gopkg.in/inf.v0 v0.9.1 // indirect | 	gopkg.in/inf.v0 v0.9.1 // indirect | ||||||
| 	gopkg.in/yaml.v2 v2.4.0 // indirect | 	gopkg.in/yaml.v2 v2.4.0 // indirect | ||||||
| 	gopkg.in/yaml.v3 v3.0.1 // 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/apiextensions-apiserver v0.34.0 // indirect | ||||||
| 	k8s.io/cli-runtime 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/component-base v0.34.0 // indirect | ||||||
| 	k8s.io/klog/v2 v2.130.1 // indirect | 	k8s.io/klog/v2 v2.130.1 // indirect | ||||||
| 	k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // 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= | 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 h1:waZiuajrI28iAf40cWgycWNgaXPO06dupuS+sgibK6c= | ||||||
| cloud.google.com/go v0.121.6/go.mod h1:coChdst4Ea5vUpiALcYKXEpR1S9ZgXbhEzzMcMR66vI= | 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.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= | ||||||
| cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= | 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 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= | ||||||
| cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= | 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.8.0 h1:HxMRIbao8w17ZX6wBnjhcDkW6lTFpgcaobyVfZWqRLA= | ||||||
| cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= | 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 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= | ||||||
| cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= | 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.22.0 h1:dBRIj7+GDeeEvatJeTB19oYZNV0aj6wEqSIT/7gLqtk= | ||||||
| cloud.google.com/go/kms v1.23.0/go.mod h1:rZ5kK0I7Kn9W4erhYVoIRPtpizjunlrfU4fUkumUp8g= | 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 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= | ||||||
| cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= | 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= | 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/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 h1:RtkCMgTpaBMbzozcRUGfZe46jb9a3qh5EdEtVRUATF8= | ||||||
| cloud.google.com/go/secretmanager v1.15.0/go.mod h1:1hQSAhKK7FldiYw//wbR/XPfPc08eQ81oBsnRUHEvUc= | 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.56.1 h1:n6gy+yLnHn0hTwBFzNn8zJ1kqWfR91wzdM8hjRF4wP0= | ||||||
| cloud.google.com/go/storage v1.57.0/go.mod h1:329cwlpzALLgJuu8beyJ/uvQznDHpa2U5lGjWednkzg= | 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 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= | ||||||
| cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= | cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= | ||||||
| dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= | 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/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 h1:NvTuVHISgTHEHeBFqt6BHOe4Ny/NwGZr7w+F8S9ziyw= | ||||||
| github.com/AlecAivazis/survey/v2 v2.3.6/go.mod h1:4AuI9b7RjAR+G7v9+C4YSlX/YL3K3cWNXgWXOhllqvI= | 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.0 h1:ci6Yd6nysBRLEodoziB6ah1+YOzZbZk+NYneoA6q+6E= | ||||||
| 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/azcore v1.19.0/go.mod h1:QyVsSSN64v5TGltphKLQ2sQxe4OBQg0J1eKRcVBnfgE= | ||||||
| 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.11.0 h1:MhRfI58HblXzCtWEZCO0feHs8LweePB3s90r7WaR1KU= | ||||||
| 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/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 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/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= | 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/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 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/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.3.1 h1:Wgf5rZba3YZqeTNJPtvqZoBu1sBN/L4sry+u2U3Y75w= | ||||||
| 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/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 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/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= | 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/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 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM= | ||||||
| github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE= | 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.4.2 h1:oygO0locgZJe7PpYPXT5A29ZkwJaPqcva7BVeemZOZs= | ||||||
| github.com/AzureAD/microsoft-authentication-library-for-go v1.5.0/go.mod h1:HKpQxkWaGLJ+D/5H8QRpyQXA1eKjxkFlOMwck5+33Jk= | github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= | ||||||
| github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= | 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 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= | ||||||
| github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= | 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 h1:s7/zwMi5w+KnlumDVbX1+P6mNAk5o7Wvx0VmvrQ7Bm0= | ||||||
| github.com/DopplerHQ/cli v0.5.11-0.20230908185655-7aef4713e1a4/go.mod h1:ipnA9Lpn5YM+FDSQZ7VWNjcuVurchInoGKm+v7O0sGs= | 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.27.0 h1:ErKg/3iS1AKcTkf3yixlZ54f9U1rljCkQyEXWUnIUxc= | ||||||
| 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/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 h1:owcC2UnmsZycprQ5RfRgjydWhuoxg71LUfyiQdijZuM= | ||||||
| github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0/go.mod h1:ZPpqegjbE99EPKsu3iUWV22A04wzGPcAY/ziSIQEEgs= | 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= | 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/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 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= | ||||||
| github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= | 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.2.0 h1:+PhXXn4SPGd+qk76TlEePBfOfivE0zkWFenhGhFLzWs= | ||||||
| github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE= | 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 h1:kDF7paGK8QACWYaQo6KtyYBozY2jhQrTuNNuUxQkhJY= | ||||||
| github.com/a8m/envsubst v1.4.3/go.mod h1:4jjHWQlZoaXPoLQUb7H2qT4iLkZDdmEQiOUogdUmqVU= | github.com/a8m/envsubst v1.4.3/go.mod h1:4jjHWQlZoaXPoLQUb7H2qT4iLkZDdmEQiOUogdUmqVU= | ||||||
| github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= | 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/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 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= | ||||||
| github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= | 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.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE= | ||||||
| github.com/aws/aws-sdk-go v1.55.8/go.mod h1:ZkViS9AqA6otK+JBBNH2++sx1sgxrPKcSzPPvQkUtXk= | github.com/aws/aws-sdk-go v1.55.7/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= | ||||||
| github.com/aws/aws-sdk-go-v2 v1.39.4 h1:qTsQKcdQPHnfGYBBs+Btl8QwxJeoWcOcPcixK90mRhg= | github.com/aws/aws-sdk-go-v2 v1.38.3 h1:B6cV4oxnMs45fql4yRH+/Po/YU+597zgWqvDpYMturk= | ||||||
| github.com/aws/aws-sdk-go-v2 v1.39.4/go.mod h1:yWSxrnioGUZ4WVv9TgMrNUeLV3PFESn/v+6T/Su8gnM= | 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.7.2 h1:t9yYsydLYNBk9cJ73rgPhPWqOh/52fcWDQB5b1JsKSY= | 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.7.2/go.mod h1:IusfVNTmiSN3t4rhxWFaBAqn+mcNdwKtPcV16eYdgko= | 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.31.15 h1:gE3M4xuNXfC/9bG4hyowGm/35uQTi7bUKeYs5e/6uvU= | github.com/aws/aws-sdk-go-v2/config v1.29.15 h1:I5XjesVMpDZXZEZonVfjI12VNMrYa38LtLnw4NtY5Ss= | ||||||
| github.com/aws/aws-sdk-go-v2/config v1.31.15/go.mod h1:HvnvGJoE2I95KAIW8kkWVPJ4XhdrlvwJpV6pEzFQa8o= | github.com/aws/aws-sdk-go-v2/config v1.29.15/go.mod h1:tNIp4JIPonlsgaO5hxO372a6gjhN63aSWl2GVl5QoBQ= | ||||||
| github.com/aws/aws-sdk-go-v2/credentials v1.18.19 h1:Jc1zzwkSY1QbkEcLujwqRTXOdvW8ppND3jRBb/VhBQc= | github.com/aws/aws-sdk-go-v2/credentials v1.17.68 h1:cFb9yjI02/sWHBSYXAtkamjzCuRymvmeFmt0TC0MbYY= | ||||||
| github.com/aws/aws-sdk-go-v2/credentials v1.18.19/go.mod h1:DIfQ9fAk5H0pGtnqfqkbSIzky82qYnGvh06ASQXXg6A= | 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.18.11 h1:X7X4YKb+c0rkI6d4uJ5tEMxXgCZ+jZ/D6mvkno8c8Uw= | 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.18.11/go.mod h1:EqM6vPZQsZHYvC4Cai35UDg/f5NCEU+vp0WfbVqVcZc= | 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.19.9 h1:Z1897HnnfLLgbs3pcUv8xLvtbai9TEfPUZfA0BFw968= | 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.19.9/go.mod h1:8oVESJIPBYGWdZhaHcIvTm7BnI6hbsR3ggKn0uyRMhk= | 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.11 h1:7AANQZkF3ihM8fbdftpjhken0TP9sBzFbV/Ze/Y4HXA= | 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.11/go.mod h1:NTF4QCGkm6fzVwncpkFQqoquQyOolcyXfbpC98urj+c= | 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.11 h1:ShdtWUZT37LCAA4Mw2kJAJtzaszfSHFb5n25sdcv4YE= | 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.11/go.mod h1:7bUb2sSr2MZ3M/N+VyETLTQtInemHXb/Fl3s8CLzm0Y= | 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.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk= | 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.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc= | 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.4.11 h1:bKgSxk1TW//00PGQqYmrq83c+2myGidEclp+t9pPqVI= | 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.4.11/go.mod h1:vrPYCQ6rFHL8jzQA8ppu3gWX18zxjLIDGTeqDxkBmSI= | 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.13.2 h1:xtuxji5CS0JknaXoACOunXOYOQzgfTvGAc9s2QdCJA4= | 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.13.2/go.mod h1:zxwi0DIR0rcRcgdbl7E2MSOvxDyyXGBlScvBkARFaLQ= | 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.9.2 h1:DGFpGybmutVsCuF6vSuLZ25Vh55E3VmsnJmFfjeBx4M= | 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.9.2/go.mod h1:hm/wU1HDvXCFEDzOLorQnZZ/CVvPXvWEmHMSmqgQRuA= | 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.13.11 h1:GpMf3z2KJa4RnJ0ew3Hac+hRFYLZ9DDjfgXjuW+pB54= | 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.13.11/go.mod h1:6MZP3ZI4QQsgUCFTwMZA2V0sEriNQ8k2hmoHF3qjimQ= | 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.19.11 h1:weapBOuuFIBEQ9OX/NVW3tFQCvSutyjZYk/ga5jDLPo= | 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.19.11/go.mod h1:3C1gN4FmIVLwYSh8etngUS+f1viY6nLCDVtZmrFbDy0= | 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.45.6 h1:Br3kil4j7RPW+7LoLVkYt8SuhIWlg6ylmbmzXJ7PgXY= | github.com/aws/aws-sdk-go-v2/service/kms v1.38.3 h1:RivOtUH3eEu6SWnUMFHKAW4MqDOzWn1vGQ3S38Y5QMg= | ||||||
| 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/kms v1.38.3/go.mod h1:cQn6tAF77Di6m4huxovNM7NVAozWTZLsDRp9t8Z/WYk= | ||||||
| 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.80.1 h1:xYEAf/6QHiTZDccKnPMbsMwlau13GsDsTgdue3wmHGw= | ||||||
| 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/s3 v1.80.1/go.mod h1:qbn305Je/IofWBJ4bJz/Q7pDEtnnoInw/dGt71v6rHE= | ||||||
| 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.2 h1:QMayWWWmfWyQwP4nZf3qdIVS39Pm65Yi5waYj1euCzo= | ||||||
| github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.39.6/go.mod h1:hwt7auGsDcaNQ8pzLgE2kCNyIWouYlAKSjuUu5Dqr7I= | 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.65.1 h1:TFg6XiS7EsHN0/jpV3eVNczZi/sPIVP5jxIs+euIESQ= | github.com/aws/aws-sdk-go-v2/service/ssm v1.64.2 h1:6P4W42RUTZixRG6TgfRB8KlsqNzHtvBhs6sTbkVPZvk= | ||||||
| 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/ssm v1.64.2/go.mod h1:wtxdacy3oO5sHO03uOtk8HMGfgo1gBHKwuJdYM220i0= | ||||||
| github.com/aws/aws-sdk-go-v2/service/sso v1.29.8 h1:M5nimZmugcZUO9wG7iVtROxPhiqyZX6ejS1lxlDPbTU= | 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.29.8/go.mod h1:mbef/pgKhtKRwrigPPs7SSSKZgytzP8PQ6P6JAAdqyM= | 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.35.3 h1:S5GuJZpYxE0lKeMHKn+BRTz6PTFpgThyJ+5mYfux7BM= | 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.35.3/go.mod h1:X4OF+BTd7HIb3L+tc4UlWHVrpgwZZIVENU15pRDVTI0= | 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.38.9 h1:Ekml5vGg6sHSZLZJQJagefnVe6PmqC2oiRkBq4F7fU0= | 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.38.9/go.mod h1:/e15V+o1zFHWdH3u7lpI3rVBcxszktIKuHKCY2/py+k= | github.com/aws/aws-sdk-go-v2/service/sts v1.33.20/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= | ||||||
| github.com/aws/smithy-go v1.23.1 h1:sLvcH6dfAFwGkHLZ7dGiYF7aK6mg4CgKA/iDKjLDt9M= | github.com/aws/smithy-go v1.23.0 h1:8n6I3gXzWJB2DxBDnfxgBaSX6oe0d/t10qGz7OKqMCE= | ||||||
| github.com/aws/smithy-go v1.23.1/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0= | 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 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= | ||||||
| github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= | github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= | ||||||
| github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= | 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/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 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= | ||||||
| github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= | 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.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.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= | ||||||
| github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= | github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= | ||||||
| github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= | 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.3 h1:XJ7q1TOWJxi+zZZWB6aouOh6Ucie2hGsEUUoOmuTCbU= | ||||||
| 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/go.mod h1:puGQ9GN98LepLTlRt7CaLm3DkQVmsGrih/TBA3bw2J0= | ||||||
| github.com/danieljoos/wincred v1.2.2 h1:774zMFJrqaeYCK2W57BgAem/MLi6mtSE47MB6BOJ0i0= | github.com/danieljoos/wincred v1.2.2 h1:774zMFJrqaeYCK2W57BgAem/MLi6mtSE47MB6BOJ0i0= | ||||||
| github.com/danieljoos/wincred v1.2.2/go.mod h1:w7w4Utbrz8lqeMbDAK0lkNJUv5sAOkFi7nd/ogr0Uh8= | 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= | 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/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 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= | ||||||
| github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= | 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.0 h1:LLGy0A+TCeyHy8U5CtchGfEwD/94pJvSyd3oa4I/oAU= | ||||||
| github.com/fujiwara/tfstate-lookup v1.7.1/go.mod h1:D1/ehHmOvN06Hdpob66BUg6851257fxzNrpRilhnwxQ= | 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 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= | ||||||
| github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= | 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 h1:y/1nzrdF+RPds4lfoEpNhjfmzlgZtPqyO3jMzrqDQws= | ||||||
| github.com/getsops/gopgagent v0.0.0-20241224165529-7044f28e491e/go.mod h1:awFzISqLJoZLm+i9QQ4SgMNHDqljH6jWV0B36V5MrUM= | 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.10.2 h1:7t7lBXFcXJPsDMrpYoI36r8xIhjWUmEc8Qdjuwyo+WY= | ||||||
| github.com/getsops/sops/v3 v3.11.0/go.mod h1:KiyVXNRMIEPCSAiapB8e8u+AaQGFgLlWo4Sk9PNTso0= | 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 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= | ||||||
| github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= | 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 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= | ||||||
| github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= | 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 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs= | ||||||
| github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw= | 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.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= | ||||||
| github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA= | 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.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 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= | ||||||
| github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | 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 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= | ||||||
| github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= | 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.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC03zFCU= | ||||||
| github.com/go-openapi/analysis v0.24.0/go.mod h1:GLyoJA+bvmGGaHgpfeDh8ldpGo69fAJg7eeMDMRCIrw= | github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo= | ||||||
| github.com/go-openapi/errors v0.22.3 h1:k6Hxa5Jg1TUyZnOwV2Lh81j8ayNw5VVYLvKrp4zFKFs= | github.com/go-openapi/errors v0.22.2 h1:rdxhzcBUazEcGccKqbY1Y7NS8FDcMyIRr0934jrYnZg= | ||||||
| github.com/go-openapi/errors v0.22.3/go.mod h1:+WvbaBBULWCOna//9B9TbLNGSFOfF8lY9dw4hGiEiKQ= | github.com/go-openapi/errors v0.22.2/go.mod h1:+n/5UdIqdVnLIJ6Q9Se8HNGUXYaY6CN8ImWzfi/Gzp0= | ||||||
| github.com/go-openapi/jsonpointer v0.22.1 h1:sHYI1He3b9NqJ4wXLoJDKmUmHkWy/L7rtEo92JUxBNk= | github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= | ||||||
| github.com/go-openapi/jsonpointer v0.22.1/go.mod h1:pQT9OsLkfz1yWoMgYFy4x3U5GY5nUlsOn1qSBH5MkCM= | github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= | ||||||
| github.com/go-openapi/jsonreference v0.21.2 h1:Wxjda4M/BBQllegefXrY/9aq1fxBA8sI5M/lFU6tSWU= | github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= | ||||||
| github.com/go-openapi/jsonreference v0.21.2/go.mod h1:pp3PEjIsJ9CZDGCNOyXIQxsNuroxm8FAJ/+quA0yKzQ= | github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= | ||||||
| github.com/go-openapi/loads v0.23.1 h1:H8A0dX2KDHxDzc797h0+uiCZ5kwE2+VojaQVaTlXvS0= | github.com/go-openapi/loads v0.22.0 h1:ECPGd4jX1U6NApCGG1We+uEozOAvXvJSF4nnwHZ8Aco= | ||||||
| github.com/go-openapi/loads v0.23.1/go.mod h1:hZSXkyACCWzWPQqizAv/Ye0yhi2zzHwMmoXQ6YQml44= | github.com/go-openapi/loads v0.22.0/go.mod h1:yLsaTCS92mnSAZX5WWoxszLj0u+Ojl+Zs5Stn1oF+rs= | ||||||
| github.com/go-openapi/runtime v0.29.0 h1:Y7iDTFarS9XaFQ+fA+lBLngMwH6nYfqig1G+pHxMRO0= | github.com/go-openapi/runtime v0.28.0 h1:gpPPmWSNGo214l6n8hzdXYhPuJcGtziTOgUpvsFWGIQ= | ||||||
| github.com/go-openapi/runtime v0.29.0/go.mod h1:52HOkEmLL/fE4Pg3Kf9nxc9fYQn0UsIWyGjGIJE9dkg= | github.com/go-openapi/runtime v0.28.0/go.mod h1:QN7OzcS+XuYmkQLw05akXk0jRH/eZ3kb18+1KwW9gyc= | ||||||
| github.com/go-openapi/spec v0.22.0 h1:xT/EsX4frL3U09QviRIZXvkh80yibxQmtoEvyqug0Tw= | github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= | ||||||
| github.com/go-openapi/spec v0.22.0/go.mod h1:K0FhKxkez8YNS94XzF8YKEMULbFrRw4m15i2YUht4L0= | github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= | ||||||
| github.com/go-openapi/strfmt v0.24.0 h1:dDsopqbI3wrrlIzeXRbqMihRNnjzGC+ez4NQaAAJLuc= | github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c= | ||||||
| github.com/go-openapi/strfmt v0.24.0/go.mod h1:Lnn1Bk9rZjXxU9VMADbEEOo7D7CDyKGLsSKekhFr7s4= | github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4= | ||||||
| github.com/go-openapi/swag v0.24.1 h1:DPdYTZKo6AQCRqzwr/kGkxJzHhpKxZ9i/oX0zag+MF8= | github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU= | ||||||
| github.com/go-openapi/swag v0.24.1/go.mod h1:sm8I3lCPlspsBBwUm1t5oZeWZS0s7m/A+Psg0ooRU0A= | github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0= | ||||||
| github.com/go-openapi/swag/cmdutils v0.24.0 h1:KlRCffHwXFI6E5MV9n8o8zBRElpY4uK4yWyAMWETo9I= | github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3BumrGD58= | ||||||
| github.com/go-openapi/swag/cmdutils v0.24.0/go.mod h1:uxib2FAeQMByyHomTlsP8h1TtPd54Msu2ZDU/H5Vuf8= | github.com/go-openapi/validate v0.24.0/go.mod h1:iyeX1sEufmv3nPbBdX3ieNviWnOZaJ1+zquzJEf2BAQ= | ||||||
| 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-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= | 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-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 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= | ||||||
| github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= | 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 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U= | ||||||
| github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= | 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.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= | ||||||
| github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= | 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 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= | ||||||
| github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= | github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= | ||||||
| github.com/goccy/go-yaml v1.17.1 h1:LI34wktB2xEE3ONG/2Ar54+/HJVBriAGJ55PHls4YuY= | 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/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 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= | ||||||
| github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= | 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.0 h1:GMRdoMBDz12Mim366pWsRVIrrkugJ19rrmykkv0Nhzo= | ||||||
| github.com/hashicorp/go-getter v1.8.2/go.mod h1:CUTt9x2bCtJ/sV8ihgrITL3IUE+0BE1j/e4n5P/GIM4= | 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 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= | ||||||
| github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= | 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 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= | ||||||
| github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= | 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.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= | ||||||
| github.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw= | 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 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= | ||||||
| github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= | 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 h1:U+kC2dOhMFQctRfhK0gRctKAPTloZdMU5ZJxaesJ/VM= | ||||||
| github.com/hashicorp/go-secure-stdlib/parseutil v0.2.0/go.mod h1:Ll013mhdmsVDuoIXVfBtvgGJsXDYkTw1kooNcoCXuE0= | 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= | 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 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 h1:2QJdZ454DSsYGoaE6QheQZjtKZSUs9Nh2izTWiwQxvE= | ||||||
| github.com/hashicorp/hcl/v2 v2.24.0/go.mod h1:oGoO1FIQYfn/AgyOhlg9qLC6/nOJPX3qGbkZpYAcqfM= | 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.155.0 h1:6lN3nbGfY8Wsm851EGklEbaWpPVrJ1wPB/7MCkbkkZs= | ||||||
| github.com/hashicorp/hcp-sdk-go v0.162.0/go.mod h1:v2vbpNIrmgUTelW4Z+ur+aQuSPxeaVK3xytFdpEXvSg= | 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 h1:xwy/1T0cxHWaLx2MM0g4BlaQc1BXn/9835mPrBqwSPU= | ||||||
| github.com/hashicorp/jsonapi v1.4.3-0.20250220162346-81a76b606f3e/go.mod h1:kWfdn49yCjQvbpnvY1dxxAuAFzISwrrMDQOcu6NsFoM= | 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.20.0 h1:KQMHElgudOsr+IbJgmbjHnCTxEpKs9LnozA1D3nozU4= | ||||||
| github.com/hashicorp/vault/api v1.22.0/go.mod h1:IUZA2cDvr4Ok3+NtK2Oq/r+lJeXkeCrHRmqdyWfpmGM= | 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 h1:+stKeRpDRo2LVJkCc2G/HqYmYdGJ214f2pMTdIafW3w= | ||||||
| github.com/helmfile/chartify v0.25.0/go.mod h1:8b44e/7P0nceSodE9C5e5F6DoyCkiqKf3PeVprcIkQ4= | 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.1 h1:1zVpD1ZMzsWWuVGPW7GF4WL5FG+uhfvrs29Hn66457E= | ||||||
| github.com/helmfile/vals v0.42.4/go.mod h1:Dj1nuqfJ2whuZTe6sGrz1405vVpn16YNBxd6DdAaTc0= | 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 h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= | ||||||
| github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68= | 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= | 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/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 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= | ||||||
| github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= | 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 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o= | ||||||
| github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY= | 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 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= | ||||||
| github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= | 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= | 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/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 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= | ||||||
| github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= | 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.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= | ||||||
| github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= | github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= | ||||||
| github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= | 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.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= | ||||||
| github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= | github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= | ||||||
| github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= | 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.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= | ||||||
| github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= | 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 h1:dXnYiJk9k3wetp7GfQbKJcPHjVJL6YK19tKj8t2Ns0o= | ||||||
| github.com/rubenv/sql-migrate v1.8.0/go.mod h1:F2bGFBwCU+pnmbtNYDeKvSuvL6lBVtXDXUUv5t+u1qw= | 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 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= | ||||||
| github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= | 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 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= | ||||||
| github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= | 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/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 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= | ||||||
| github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= | 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.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.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= | ||||||
| github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= | 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 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= | ||||||
| github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= | 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= | 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/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 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= | ||||||
| github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= | 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.16 h1:MH0k6uJxdwdeWQTwhSO42Pwr4YLrNLwBtg1MRgTqPdQ= | ||||||
| github.com/urfave/cli v1.22.17/go.mod h1:b0ht0aqgH/6pBYzzxURyrM4xXNgsoT/n2ZzwQiEhNVo= | 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 h1:xodYlSng33KWGvIGMpKUyLcIZRXKiNUx612mZJqYrDg= | ||||||
| github.com/variantdev/dag v1.1.0/go.mod h1:pH1TQsNSLj2uxMo9NNl9zdGy01Wtn+/2MT96BrKmVyE= | github.com/variantdev/dag v1.1.0/go.mod h1:pH1TQsNSLj2uxMo9NNl9zdGy01Wtn+/2MT96BrKmVyE= | ||||||
| github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= | 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/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 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= | ||||||
| github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= | 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.19.0 h1:68GGNTzzb36b5jjSYYzgckr2BZqKQl9IjHPOvR1u5yo= | ||||||
| github.com/yandex-cloud/go-genproto v0.29.0/go.mod h1:0LDD/IZLIUIV4iPH+YcF+jysO3jkSvADFGm4dCAuwQo= | github.com/yandex-cloud/go-genproto v0.19.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.15.0 h1:qw4DIjB9R5kFxAM41oRX6fR6Peu3+NJJ+8Hq0HweAUk= | ||||||
| github.com/yandex-cloud/go-sdk v0.22.0/go.mod h1:9CPEoMSje/vw0LJKcJ950szZoX4W4IfLDm2Ah/xI6Bo= | 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.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||||||
| github.com/yuin/goldmark v1.2.1/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= | 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/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 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= | ||||||
| github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= | 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.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= | ||||||
| go.mongodb.org/mongo-driver v1.17.4/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= | go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= | ||||||
| go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= | go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= | ||||||
| go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= | 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 h1:UW0+QyeyBVhn+COBec3nGhfnFe5lwB0ic1JBVjzhk0w= | ||||||
| go.opentelemetry.io/contrib/bridges/prometheus v0.57.0/go.mod h1:ppciCHRLsyCio54qbzQv0E4Jyth/fLWDTJYfvWpcSVk= | 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= | 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/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 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus= | ||||||
| go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q= | 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.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg= | ||||||
| go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= | 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 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/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= | 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/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 h1:egZ8vV5atrUWUbnSsHn6vB8R21G2wrKqNiDt3iWertk= | ||||||
| go.opentelemetry.io/otel/log v0.8.0/go.mod h1:M9qvDdUTRCopJcGRKg57+JSQ9LgLBrwwfC32epk5NX8= | 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.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE= | ||||||
| go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= | go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs= | ||||||
| go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= | go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs= | ||||||
| go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= | 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 h1:zg7GUYXqxk1jnGF/dTdLPrK06xJdrXgqgFLnI4Crxvs= | ||||||
| go.opentelemetry.io/otel/sdk/log v0.8.0/go.mod h1:50iXr0UVwQrYS45KbruFrEt4LvAdCaWWgIrsN3ZQggo= | 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.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis= | ||||||
| go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= | go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4= | ||||||
| go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= | go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w= | ||||||
| go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= | 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 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4= | ||||||
| go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4= | go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4= | ||||||
| go.szostok.io/version v1.2.0 h1:8eMMdfsonjbibwZRLJ8TnrErY8bThFTQsZYV16mcXms= | 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-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.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.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= | ||||||
| golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= | golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= | ||||||
| golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= | 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.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||||
| golang.org/x/mod v0.3.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.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.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.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= | ||||||
| golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= | 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-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-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= | 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-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.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.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.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= | ||||||
| golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= | golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= | ||||||
| golang.org/x/oauth2 v0.31.0 h1:8Fq0yVZLh4j4YA47vHKFTa9Ew5XIrCP8LC6UeNZnLxo= | golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= | ||||||
| golang.org/x/oauth2 v0.31.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= | 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-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-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/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.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
| golang.org/x/sys v0.5.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.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
| golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= | golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= | ||||||
| golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= | 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-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-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.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.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.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ= | ||||||
| golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= | 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.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.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||||
| golang.org/x/text v0.3.6/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.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.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= | ||||||
| golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= | golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= | ||||||
| golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= | golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= | ||||||
| golang.org/x/time v0.13.0 h1:eUlYslOIt32DgYD6utsuUeHs4d7AsEYLuIAdg7FlYgI= | golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= | ||||||
| golang.org/x/time v0.13.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= | 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-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-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-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.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.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||||
| golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= | 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.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= | ||||||
| golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= | 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-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-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-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||||
| golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/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= | google.golang.org/api v0.248.0 h1:hUotakSkcwGdYUqzCRc5yGYsg4wXxpkKlW5ryVqvC1Y= | ||||||
| gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= | google.golang.org/api v0.248.0/go.mod h1:yAFUAF56Li7IuIQbTFoLwXTCI6XCFKueOlS7S9e4F9k= | ||||||
| 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/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= | 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 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 h1:AtEkQdl5b6zsybXcbz00j1LwNodDuH6hVifIaNqk7NQ= | ||||||
| google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c/go.mod h1:ea2MjsO70ssTfCjiwHgI0ZFqcw45Ksuk2ckf9G468GA= | 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-20250818200422-3122310a409c h1:qXWI/sQtv5UKboZ/zUk7h+mrf/lXORyI+n9DKDAusdg= | ||||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= | google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c/go.mod h1:gw1tLEfykwDz2ET4a12jcXt4couGAm7IwsVaTy0Sflo= | ||||||
| google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= | google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4= | ||||||
| google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= | google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM= | ||||||
| google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= | google.golang.org/protobuf v1.36.7 h1:IgrO7UwFQGJdRNXH/sQux4R1Dj1WAKcLElzeeRaXV2A= | ||||||
| google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= | 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 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 h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | 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/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 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= | ||||||
| gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | 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 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= | ||||||
| gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= | 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= | 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= | 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 h1:krVyCGa8fa/wzTZgqw0DUiXuRT5BPdeqE/sQXujQ22k= | ||||||
| helm.sh/helm/v3 v3.19.0/go.mod h1:Lk/SfzN0w3a3C3o+TdAKrLwJ0wcZ//t1/SDXAvfgDdc= | 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.0 h1:L+JtP2wDbEYPUeNGbeSa/5GwFtIA662EmT2YSLOkAVE= | ||||||
| k8s.io/api v0.34.1/go.mod h1:SB80FxFtXn5/gwzCoN6QCtPD7Vbu5w2n1S0J5gFfTYk= | 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 h1:B3hiB32jV7BcyKcMU5fDaDxk882YrJ1KU+ZSkA9Qxoc= | ||||||
| k8s.io/apiextensions-apiserver v0.34.0/go.mod h1:hLI4GxE1BDBy9adJKxUxCEHBGZtGfIg98Q+JmTD7+g0= | 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 h1:dTlxFls/eikpJxmAC7MVE8oOeP1zryV7iRyIjB0gky4= | ||||||
| k8s.io/apimachinery v0.34.1/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= | 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 h1:N2/rUlJg6TMEBgtQ3SDRJwa8XyKUizwjlOknT1mB2Cw= | ||||||
| k8s.io/cli-runtime v0.34.0/go.mod h1:t/skRecS73Piv+J+FmWIQA2N2/rDjdYSQzEE67LUUs8= | 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.0 h1:YoWv5r7bsBfb0Hs2jh8SOvFbKzzxyNo0nSb0zC19KZo= | ||||||
| k8s.io/client-go v0.34.1/go.mod h1:kA8v0FP+tk6sZA0yKLRG67LWjqufAoSHA2xVGKw9Of8= | 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 h1:bS8Ua3zlJzapklsB1dZgjEJuJEeHjj8yTu1gxE2zQX8= | ||||||
| k8s.io/component-base v0.34.0/go.mod h1:RSCqUdvIjjrEm81epPcjQ/DS+49fADvGSCkIP3IC6vg= | k8s.io/component-base v0.34.0/go.mod h1:RSCqUdvIjjrEm81epPcjQ/DS+49fADvGSCkIP3IC6vg= | ||||||
| k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= | 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) { | 	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
 | 		// to just let helmfile itself to exit with 2
 | ||||||
| 		// See https://github.com/roboll/helmfile/issues/749
 | 		// See https://github.com/roboll/helmfile/issues/749
 | ||||||
| 		code := 2 | 		code := 2 | ||||||
|  | @ -680,7 +680,7 @@ func (a *App) within(dir string, do func() error) error { | ||||||
| 
 | 
 | ||||||
| 	prev, err := a.fs.Getwd() | 	prev, err := a.fs.Getwd() | ||||||
| 	if err != nil { | 	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) | 	absDir, err := a.fs.Abs(dir) | ||||||
|  | @ -793,9 +793,6 @@ func (a *App) getHelm(st *state.HelmState) (helmexec.Interface, error) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	bin := st.DefaultHelmBinary | 	bin := st.DefaultHelmBinary | ||||||
| 	if bin == "" { |  | ||||||
| 		bin = state.DefaultHelmBinary |  | ||||||
| 	} |  | ||||||
| 	kubeconfig := a.Kubeconfig | 	kubeconfig := a.Kubeconfig | ||||||
| 	kubectx := st.HelmDefaults.KubeContext | 	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) { | func TestVisitDesiredStatesWithReleasesFiltered_Issue1008_MissingNonDefaultEnvInBase(t *testing.T) { | ||||||
| 	files := map[string]string{ | 	files := map[string]string{ | ||||||
| 		"/path/to/base.yaml": ` | 		"/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, | 			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
 | 		// upgrades
 | ||||||
| 		//
 | 		//
 | ||||||
| 		{ | 		{ | ||||||
|  | @ -3954,7 +3772,7 @@ releases: | ||||||
| 					} | 					} | ||||||
| 					for flagIdx := range wantDeletes[relIdx].Flags { | 					for flagIdx := range wantDeletes[relIdx].Flags { | ||||||
| 						if wantDeletes[relIdx].Flags[flagIdx] != helm.Deleted[relIdx].Flags[flagIdx] { | 						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" | 	"errors" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"path/filepath" | 	"path/filepath" | ||||||
| 	"slices" |  | ||||||
| 
 | 
 | ||||||
| 	"dario.cat/mergo" | 	"dario.cat/mergo" | ||||||
| 	"github.com/helmfile/vals" | 	"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 | 	finalState.OrginReleases = finalState.Releases | ||||||
| 	return finalState, nil | 	return finalState, nil | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -18,7 +18,7 @@ import ( | ||||||
| 
 | 
 | ||||||
| const ( | const ( | ||||||
| 	HelmRequiredVersion           = "v3.18.6" | 	HelmRequiredVersion           = "v3.18.6" | ||||||
| 	HelmDiffRecommendedVersion    = "v3.13.1" | 	HelmDiffRecommendedVersion    = "v3.13.0" | ||||||
| 	HelmRecommendedVersion        = "v3.19.0" | 	HelmRecommendedVersion        = "v3.19.0" | ||||||
| 	HelmSecretsRecommendedVersion = "v4.6.5" | 	HelmSecretsRecommendedVersion = "v4.6.5" | ||||||
| 	HelmGitRecommendedVersion     = "v1.3.0" | 	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" |  | ||||||
|  | @ -56,10 +56,9 @@ type Release struct { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type Affected struct { | type Affected struct { | ||||||
| 	Upgraded    []*Release | 	Upgraded []*Release | ||||||
| 	Reinstalled []*Release | 	Deleted  []*Release | ||||||
| 	Deleted     []*Release | 	Failed   []*Release | ||||||
| 	Failed      []*Release |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (helm *Helm) UpdateDeps(chart string) error { | func (helm *Helm) UpdateDeps(chart string) error { | ||||||
|  | @ -108,24 +107,7 @@ func (helm *Helm) RegistryLogin(name, username, password, caFile, certFile, keyF | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| func (helm *Helm) SyncRelease(context helmexec.HelmContext, name, chart, namespace string, flags ...string) error { | func (helm *Helm) SyncRelease(context helmexec.HelmContext, name, chart, namespace string, flags ...string) error { | ||||||
| 	if strings.Contains(name, "forbidden") { | 	if strings.Contains(name, "error") { | ||||||
| 		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") { |  | ||||||
| 		return errors.New("error") | 		return errors.New("error") | ||||||
| 	} | 	} | ||||||
| 	helm.sync(helm.ReleasesMutex, func() { | 	helm.sync(helm.ReleasesMutex, func() { | ||||||
|  |  | ||||||
|  | @ -15,8 +15,9 @@ import ( | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" | 	"strings" | ||||||
| 
 | 
 | ||||||
| 	"github.com/aws/aws-sdk-go-v2/config" | 	"github.com/aws/aws-sdk-go/aws" | ||||||
| 	"github.com/aws/aws-sdk-go-v2/service/s3" | 	"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" | ||||||
| 	"github.com/hashicorp/go-getter/helper/url" | 	"github.com/hashicorp/go-getter/helper/url" | ||||||
| 	"go.uber.org/zap" | 	"go.uber.org/zap" | ||||||
|  | @ -367,22 +368,22 @@ func (g *S3Getter) Get(wd, src, dst string) error { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Create a new AWS config and S3 client using AWS SDK v2
 | 	// Create a new AWS session using the default AWS configuration
 | ||||||
| 	cfg, err := config.LoadDefaultConfig(context.TODO(), | 	sess := session.Must(session.NewSessionWithOptions(session.Options{ | ||||||
| 		config.WithRegion(region), | 		SharedConfigState: session.SharedConfigEnable, | ||||||
| 	) | 		Config: aws.Config{ | ||||||
| 	if err != nil { | 			Region: aws.String(region), | ||||||
| 		return err | 		}, | ||||||
| 	} | 	})) | ||||||
| 
 | 
 | ||||||
| 	// Create an S3 client using the config
 | 	// Create an S3 client using the session
 | ||||||
| 	s3Client := s3.NewFromConfig(cfg) | 	s3Client := s3.New(sess) | ||||||
| 
 | 
 | ||||||
| 	getObjectInput := &s3.GetObjectInput{ | 	getObjectInput := &s3.GetObjectInput{ | ||||||
| 		Bucket: &bucket, | 		Bucket: &bucket, | ||||||
| 		Key:    &key, | 		Key:    &key, | ||||||
| 	} | 	} | ||||||
| 	resp, err := s3Client.GetObject(context.TODO(), getObjectInput) | 	resp, err := s3Client.GetObject(getObjectInput) | ||||||
| 	defer func(Body io.ReadCloser) { | 	defer func(Body io.ReadCloser) { | ||||||
| 		err := Body.Close() | 		err := Body.Close() | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  | @ -466,47 +467,48 @@ func (g *S3Getter) S3FileExists(path string) (string, error) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Region
 | 	// Region
 | ||||||
| 	g.Logger.Debugf("Creating config for determining S3 region %s", path) | 	g.Logger.Debugf("Creating session for determining S3 region %s", path) | ||||||
| 	cfg, err := config.LoadDefaultConfig(context.TODO()) | 	sess := session.Must(session.NewSessionWithOptions(session.Options{ | ||||||
| 	if err != nil { | 		SharedConfigState: session.SharedConfigEnable, | ||||||
| 		return "", err | 	})) | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	g.Logger.Debugf("Getting bucket %s location %s", bucket, path) | 	g.Logger.Debugf("Getting bucket %s location %s", bucket, path) | ||||||
| 	s3Client := s3.NewFromConfig(cfg) | 	s3Client := s3.New(sess) | ||||||
| 	bucketRegion := "us-east-1" | 	bucketRegion := "us-east-1" | ||||||
| 	getBucketLocationInput := &s3.GetBucketLocationInput{ | 	getBucketLocationInput := &s3.GetBucketLocationInput{ | ||||||
| 		Bucket: &bucket, | 		Bucket: aws.String(bucket), | ||||||
| 	} | 	} | ||||||
| 	resp, err := s3Client.GetBucketLocation(context.TODO(), getBucketLocationInput) | 	resp, err := s3Client.GetBucketLocation(getBucketLocationInput) | ||||||
| 	if err != nil { | 	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") | 		g.Logger.Debugf("Bucket has no location Assuming us-east-1") | ||||||
| 	} else { | 	} else { | ||||||
| 		bucketRegion = string(resp.LocationConstraint) | 		bucketRegion = *resp.LocationConstraint | ||||||
| 	} | 	} | ||||||
| 	g.Logger.Debugf("Got bucket location %s", bucketRegion) | 	g.Logger.Debugf("Got bucket location %s", bucketRegion) | ||||||
| 
 | 
 | ||||||
| 	// File existence
 | 	// File existence
 | ||||||
| 	g.Logger.Debugf("Creating new config with region to see if file exists") | 	g.Logger.Debugf("Creating new session with region to see if file exists") | ||||||
| 	regionCfg, err := config.LoadDefaultConfig(context.TODO(), | 	regionSession, err := session.NewSessionWithOptions(session.Options{ | ||||||
| 		config.WithRegion(bucketRegion), | 		SharedConfigState: session.SharedConfigEnable, | ||||||
| 	) | 		Config: aws.Config{ | ||||||
|  | 			Region: aws.String(bucketRegion), | ||||||
|  | 		}, | ||||||
|  | 	}) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		g.Logger.Error(err) | 		g.Logger.Error(err) | ||||||
| 		return bucketRegion, err |  | ||||||
| 	} | 	} | ||||||
| 	g.Logger.Debugf("Creating new s3 client to check if object exists") | 	g.Logger.Debugf("Creating new s3 client to check if object exists") | ||||||
| 	s3Client = s3.NewFromConfig(regionCfg) | 	s3Client = s3.New(regionSession) | ||||||
| 	headObjectInput := &s3.HeadObjectInput{ | 	headObjectInput := &s3.HeadObjectInput{ | ||||||
| 		Bucket: &bucket, | 		Bucket: &bucket, | ||||||
| 		Key:    &key, | 		Key:    &key, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	g.Logger.Debugf("Fethcing head %s", path) | 	g.Logger.Debugf("Fethcing head %s", path) | ||||||
| 	_, err = s3Client.HeadObject(context.TODO(), headObjectInput) | 	_, err = s3Client.HeadObject(headObjectInput) | ||||||
| 	return bucketRegion, err | 	return bucketRegion, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -26,8 +26,6 @@ const ( | ||||||
| 	DefaultHCLFileExtension = ".hcl" | 	DefaultHCLFileExtension = ".hcl" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var ValidUpdateStrategyValues = []string{UpdateStrategyReinstallIfForbidden} |  | ||||||
| 
 |  | ||||||
| type StateLoadError struct { | type StateLoadError struct { | ||||||
| 	Msg   string | 	Msg   string | ||||||
| 	Cause error | 	Cause error | ||||||
|  | @ -45,14 +43,6 @@ func (e *UndefinedEnvError) Error() string { | ||||||
| 	return fmt.Sprintf("environment \"%s\" is not defined", e.Env) | 	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 { | type StateCreator struct { | ||||||
| 	logger *zap.SugaredLogger | 	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} | 			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} | 			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 { | 	if c.overrideHelmBinary != "" && c.overrideHelmBinary != DefaultHelmBinary { | ||||||
| 		state.DefaultHelmBinary = c.overrideHelmBinary | 		state.DefaultHelmBinary = c.overrideHelmBinary | ||||||
| 	} else if state.DefaultHelmBinary == "" { | 	} else if state.DefaultHelmBinary == "" { | ||||||
|  | @ -152,6 +134,11 @@ func (c *StateCreator) applyDefaultsAndOverrides(state *HelmState) { | ||||||
| 		// Let `helmfile --kustomize-binary ""` not break this helmfile run
 | 		// Let `helmfile --kustomize-binary ""` not break this helmfile run
 | ||||||
| 		state.DefaultKustomizeBinary = DefaultKustomizeBinary | 		state.DefaultKustomizeBinary = DefaultKustomizeBinary | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	state.logger = c.logger | ||||||
|  | 	state.valsRuntime = c.valsRuntime | ||||||
|  | 
 | ||||||
|  | 	return &state, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // LoadEnvValues loads environment values files relative to the `baseDir`
 | // 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 { | 		if err != nil { | ||||||
| 			return nil, err | 			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) | 	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) | 	layers = append(layers, st) | ||||||
| 
 | 
 | ||||||
| 	for i := 1; i < len(layers); i++ { | 	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 | 			return nil, err | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -1,7 +1,6 @@ | ||||||
| package state | package state | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"fmt" |  | ||||||
| 	"path/filepath" | 	"path/filepath" | ||||||
| 	"reflect" | 	"reflect" | ||||||
| 	"testing" | 	"testing" | ||||||
|  | @ -526,205 +525,3 @@ releaseContext: | ||||||
| 		t.Errorf("unexpected values: expected=%v, actual=%v", expectedValues, actualValues) | 		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
 | 	// 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
 | 	// --timeout flag is missingl
 | ||||||
| 	EmptyTimeout = -1 | 	EmptyTimeout = -1 | ||||||
| 
 |  | ||||||
| 	// Valid enum for updateStrategy values
 |  | ||||||
| 	UpdateStrategyReinstallIfForbidden = "reinstallIfForbidden" |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // ReleaseSetSpec is release set spec
 | // ReleaseSetSpec is release set spec
 | ||||||
|  | @ -280,8 +277,6 @@ type ReleaseSpec struct { | ||||||
| 	Force *bool `yaml:"force,omitempty"` | 	Force *bool `yaml:"force,omitempty"` | ||||||
| 	// Installed, when set to true, `delete --purge` the release
 | 	// Installed, when set to true, `delete --purge` the release
 | ||||||
| 	Installed *bool `yaml:"installed,omitempty"` | 	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, when set to true, restore previous state in case of a failed install/upgrade attempt
 | ||||||
| 	Atomic *bool `yaml:"atomic,omitempty"` | 	Atomic *bool `yaml:"atomic,omitempty"` | ||||||
| 	// CleanupOnFail, when set to true, the --cleanup-on-fail helm flag is passed to the upgrade command
 | 	// 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
 | // AffectedReleases hold the list of released that where updated, deleted, or in error
 | ||||||
| type AffectedReleases struct { | type AffectedReleases struct { | ||||||
| 	Upgraded     []*ReleaseSpec | 	Upgraded     []*ReleaseSpec | ||||||
| 	Reinstalled  []*ReleaseSpec |  | ||||||
| 	Deleted      []*ReleaseSpec | 	Deleted      []*ReleaseSpec | ||||||
| 	Failed       []*ReleaseSpec | 	Failed       []*ReleaseSpec | ||||||
| 	DeleteFailed []*ReleaseSpec | 	DeleteFailed []*ReleaseSpec | ||||||
|  | @ -1043,24 +1037,20 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme | ||||||
| 						} | 						} | ||||||
| 						m.Unlock() | 						m.Unlock() | ||||||
| 					} | 					} | ||||||
| 				} else if release.UpdateStrategy == UpdateStrategyReinstallIfForbidden { | 				} else if err := helm.SyncRelease(context, release.Name, chart, release.Namespace, flags...); err != nil { | ||||||
| 					relErr = st.performSyncOrReinstallOfRelease(affectedReleases, helm, context, release, chart, m, flags...) | 					m.Lock() | ||||||
|  | 					affectedReleases.Failed = append(affectedReleases.Failed, release) | ||||||
|  | 					m.Unlock() | ||||||
|  | 					relErr = newReleaseFailedError(release, err) | ||||||
| 				} else { | 				} else { | ||||||
| 					if err := helm.SyncRelease(context, release.Name, chart, release.Namespace, flags...); err != nil { | 					m.Lock() | ||||||
| 						m.Lock() | 					affectedReleases.Upgraded = append(affectedReleases.Upgraded, release) | ||||||
| 						affectedReleases.Failed = append(affectedReleases.Failed, release) | 					m.Unlock() | ||||||
| 						m.Unlock() | 					installedVersion, err := st.getDeployedVersion(context, helm, release) | ||||||
| 						relErr = newReleaseFailedError(release, err) | 					if err != nil { // err is not really impacting so just log it
 | ||||||
|  | 						st.logger.Debugf("getting deployed release version failed: %v", err) | ||||||
| 					} else { | 					} else { | ||||||
| 						m.Lock() | 						release.installedVersion = installedVersion | ||||||
| 						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("getting deployed release version failed: %v", err) |  | ||||||
| 						} else { |  | ||||||
| 							release.installedVersion = installedVersion |  | ||||||
| 						} |  | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
|  | @ -1106,77 +1096,6 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme | ||||||
| 	return nil | 	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) { | func (st *HelmState) listReleases(context helmexec.HelmContext, helm helmexec.Interface, release *ReleaseSpec) (string, error) { | ||||||
| 	flags := st.kubeConnectionFlags(release) | 	flags := st.kubeConnectionFlags(release) | ||||||
| 	if release.Namespace != "" { | 	if release.Namespace != "" { | ||||||
|  | @ -1220,16 +1139,6 @@ func releasesNeedCharts(releases []ReleaseSpec) []ReleaseSpec { | ||||||
| 	return result | 	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 { | type ChartPrepareOptions struct { | ||||||
| 	ForceDownload bool | 	ForceDownload bool | ||||||
| 	SkipRepos     bool | 	SkipRepos     bool | ||||||
|  | @ -1313,207 +1222,6 @@ type PrepareChartKey struct { | ||||||
| // Otheriwse, if a chart is not a helm chart, it will call "chartify" to turn it into a chart.
 | // 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.
 | // 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) { |  | ||||||
| 	c := chartify.New( |  | ||||||
| 		chartify.HelmBin(st.DefaultHelmBinary), |  | ||||||
| 		chartify.KustomizeBin(st.DefaultKustomizeBinary), |  | ||||||
| 		chartify.UseHelm3(true), |  | ||||||
| 		chartify.WithLogf(st.logger.Debugf), |  | ||||||
| 	) |  | ||||||
| 
 |  | ||||||
| 	chartifyOpts := chartification.Opts |  | ||||||
| 
 |  | ||||||
| 	if skipDeps { |  | ||||||
| 		chartifyOpts.SkipDeps = true |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	includeCRDs := true |  | ||||||
| 	if opts.IncludeCRDs != nil { |  | ||||||
| 		includeCRDs = *opts.IncludeCRDs |  | ||||||
| 	} |  | ||||||
| 	chartifyOpts.IncludeCRDs = includeCRDs |  | ||||||
| 
 |  | ||||||
| 	chartifyOpts.Validate = opts.Validate |  | ||||||
| 
 |  | ||||||
| 	chartifyOpts.KubeVersion = st.getKubeVersion(release, opts.KubeVersion) |  | ||||||
| 	chartifyOpts.ApiVersions = st.getApiVersions(release) |  | ||||||
| 
 |  | ||||||
| 	if opts.Values != nil { |  | ||||||
| 		chartifyOpts.ValuesFiles = append(opts.Values, chartifyOpts.ValuesFiles...) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// https://github.com/helmfile/helmfile/pull/867
 |  | ||||||
| 	// https://github.com/helmfile/helmfile/issues/895
 |  | ||||||
| 	var flags []string |  | ||||||
| 	for _, s := range opts.Set { |  | ||||||
| 		flags = append(flags, "--set", s) |  | ||||||
| 	} |  | ||||||
| 	chartifyOpts.SetFlags = append(chartifyOpts.SetFlags, flags...) |  | ||||||
| 
 |  | ||||||
| 	out, err := c.Chartify(release.Name, chartPath, chartify.WithChartifyOpts(chartifyOpts)) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return "", false, err |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	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 |  | ||||||
| 	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 |  | ||||||
| 		} |  | ||||||
| 		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 |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	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:
 |  | ||||||
| 		// 1. It is a local chart and we can use it in later process (helm upgrade/template/lint/etc)
 |  | ||||||
| 		//    without any modification, or
 |  | ||||||
| 		// 2. It is a remote chart which can be safely handed over to helm,
 |  | ||||||
| 		//    because the version of Helm used in this transaction (helm v3 or greater) support downloading
 |  | ||||||
| 		//    the chart instead, AND we don't need any modification to the chart
 |  | ||||||
| 		//
 |  | ||||||
| 		//    Also see HelmState.chartVersionFlags(). For `helmfile template`, it's called before `helm template`
 |  | ||||||
| 		//    only on helm v3.
 |  | ||||||
| 		//    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) |  | ||||||
| 		if err != nil { |  | ||||||
| 			return &chartPrepareResult{err: err} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return &chartPrepareResult{ |  | ||||||
| 		releaseName:            release.Name, |  | ||||||
| 		chartName:              chartName, |  | ||||||
| 		releaseNamespace:       release.Namespace, |  | ||||||
| 		releaseContext:         release.KubeContext, |  | ||||||
| 		chartPath:              chartPath, |  | ||||||
| 		buildDeps:              buildDeps, |  | ||||||
| 		skipRefresh:            !isLocal || opts.SkipRefresh, |  | ||||||
| 		chartFetchedByGoGetter: chartFetchedByGoGetter, |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurrency int, helmfileCommand string, opts ChartPrepareOptions) (map[PrepareChartKey]string, []error) { | func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurrency int, helmfileCommand string, opts ChartPrepareOptions) (map[PrepareChartKey]string, []error) { | ||||||
| 	if !opts.SkipResolve { | 	if !opts.SkipResolve { | ||||||
| 		updated, err := st.ResolveDeps() | 		updated, err := st.ResolveDeps() | ||||||
|  | @ -1529,12 +1237,6 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre | ||||||
| 
 | 
 | ||||||
| 	releases := releasesNeedCharts(selected) | 	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 | 	var prepareChartInfoMutex sync.Mutex | ||||||
| 
 | 
 | ||||||
| 	prepareChartInfo := make(map[PrepareChartKey]string, len(releases)) | 	prepareChartInfo := make(map[PrepareChartKey]string, len(releases)) | ||||||
|  | @ -1557,8 +1259,198 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre | ||||||
| 		}, | 		}, | ||||||
| 		func(workerIndex int) { | 		func(workerIndex int) { | ||||||
| 			for release := range jobQueue { | 			for release := range jobQueue { | ||||||
| 				result := st.prepareChartForRelease(release, helm, dir, helmfileCommand, opts, workerIndex) | 				if st.OverrideChart != "" { | ||||||
| 				results <- result | 					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), | ||||||
|  | 						chartify.UseHelm3(true), | ||||||
|  | 						chartify.WithLogf(st.logger.Debugf), | ||||||
|  | 					) | ||||||
|  | 
 | ||||||
|  | 					chartifyOpts := chartification.Opts | ||||||
|  | 
 | ||||||
|  | 					if skipDeps { | ||||||
|  | 						chartifyOpts.SkipDeps = true | ||||||
|  | 					} | ||||||
|  | 
 | ||||||
|  | 					includeCRDs := true | ||||||
|  | 					if opts.IncludeCRDs != nil { | ||||||
|  | 						includeCRDs = *opts.IncludeCRDs | ||||||
|  | 					} | ||||||
|  | 					chartifyOpts.IncludeCRDs = includeCRDs | ||||||
|  | 
 | ||||||
|  | 					chartifyOpts.Validate = opts.Validate | ||||||
|  | 
 | ||||||
|  | 					chartifyOpts.KubeVersion = st.getKubeVersion(release, opts.KubeVersion) | ||||||
|  | 					chartifyOpts.ApiVersions = st.getApiVersions(release) | ||||||
|  | 
 | ||||||
|  | 					if opts.Values != nil { | ||||||
|  | 						chartifyOpts.ValuesFiles = append(opts.Values, chartifyOpts.ValuesFiles...) | ||||||
|  | 					} | ||||||
|  | 
 | ||||||
|  | 					// https://github.com/helmfile/helmfile/pull/867
 | ||||||
|  | 					// https://github.com/helmfile/helmfile/issues/895
 | ||||||
|  | 					var flags []string | ||||||
|  | 					for _, s := range opts.Set { | ||||||
|  | 						flags = append(flags, "--set", s) | ||||||
|  | 					} | ||||||
|  | 					chartifyOpts.SetFlags = append(chartifyOpts.SetFlags, flags...) | ||||||
|  | 
 | ||||||
|  | 					out, err := c.Chartify(release.Name, chartPath, chartify.WithChartifyOpts(chartifyOpts)) | ||||||
|  | 					if err != nil { | ||||||
|  | 						results <- &chartPrepareResult{err: err} | ||||||
|  | 						return | ||||||
|  | 					} else { | ||||||
|  | 						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 | ||||||
|  | 				} 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), "/") | ||||||
|  | 						chartPath, err = generateChartPath(filepath.Base(chartAbsPath), dir, release, opts.OutputDirTemplate) | ||||||
|  | 						if err != nil { | ||||||
|  | 							results <- &chartPrepareResult{err: err} | ||||||
|  | 							return | ||||||
|  | 						} | ||||||
|  | 						if err := st.fs.CopyDir(normalizedChart, filepath.Clean(chartPath)); err != nil { | ||||||
|  | 							results <- &chartPrepareResult{err: err} | ||||||
|  | 							return | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 
 | ||||||
|  | 					buildDeps = !skipDeps | ||||||
|  | 				} else if !opts.ForceDownload { | ||||||
|  | 					// At this point, we are sure that either:
 | ||||||
|  | 					// 1. It is a local chart and we can use it in later process (helm upgrade/template/lint/etc)
 | ||||||
|  | 					//    without any modification, or
 | ||||||
|  | 					// 2. It is a remote chart which can be safely handed over to helm,
 | ||||||
|  | 					//    because the version of Helm used in this transaction (helm v3 or greater) support downloading
 | ||||||
|  | 					//    the chart instead, AND we don't need any modification to the chart
 | ||||||
|  | 					//
 | ||||||
|  | 					//    Also see HelmState.chartVersionFlags(). For `helmfile template`, it's called before `helm template`
 | ||||||
|  | 					//    only on helm v3.
 | ||||||
|  | 					//    For helm 2, we `helm fetch` with the version flags and call `helm template`
 | ||||||
|  | 					//    WITHOUT the version flags.
 | ||||||
|  | 				} else { | ||||||
|  | 					chartPath, err = generateChartPath(chartName, dir, release, opts.OutputDirTemplate) | ||||||
|  | 					if err != nil { | ||||||
|  | 						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) | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				results <- &chartPrepareResult{ | ||||||
|  | 					releaseName:            release.Name, | ||||||
|  | 					chartName:              chartName, | ||||||
|  | 					releaseNamespace:       release.Namespace, | ||||||
|  | 					releaseContext:         release.KubeContext, | ||||||
|  | 					chartPath:              chartPath, | ||||||
|  | 					buildDeps:              buildDeps, | ||||||
|  | 					skipRefresh:            !isLocal || opts.SkipRefresh, | ||||||
|  | 					chartFetchedByGoGetter: chartFetchedByGoGetter, | ||||||
|  | 				} | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
| 		func() { | 		func() { | ||||||
|  | @ -3816,28 +3708,6 @@ func (ar *AffectedReleases) DisplayAffectedReleases(logger *zap.SugaredLogger) { | ||||||
| 		} | 		} | ||||||
| 		logger.Info(tbl.String()) | 		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 { | 	if len(ar.Deleted) > 0 { | ||||||
| 		logger.Info("\nDELETED RELEASES:") | 		logger.Info("\nDELETED RELEASES:") | ||||||
| 		tbl, _ := prettytable.NewTable(prettytable.Column{Header: "NAME"}, | 		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 downloadedOCICharts = make(map[string]bool) | ||||||
| var downloadedOCIMutex sync.RWMutex | 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) { | func (st *HelmState) getOCIChart(release *ReleaseSpec, tempDir string, helm helmexec.Interface, opts ChartPrepareOptions) (*string, error) { | ||||||
| 	qualifiedChartName, chartName, chartVersion, err := st.getOCIQualifiedChartName(release, helm) | 	qualifiedChartName, chartName, chartVersion, err := st.getOCIQualifiedChartName(release, helm) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | @ -4221,13 +4053,6 @@ func (st *HelmState) getOCIChart(release *ReleaseSpec, tempDir string, helm helm | ||||||
| 		return nil, nil | 		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 == "" { | 	if opts.OutputDirTemplate == "" { | ||||||
| 		tempDir = remote.CacheDir() | 		tempDir = remote.CacheDir() | ||||||
| 	} | 	} | ||||||
|  | @ -4288,9 +4113,6 @@ func (st *HelmState) getOCIChart(release *ReleaseSpec, tempDir string, helm helm | ||||||
| 
 | 
 | ||||||
| 	chartPath = filepath.Dir(fullChartPath) | 	chartPath = filepath.Dir(fullChartPath) | ||||||
| 
 | 
 | ||||||
| 	// Add to global chart cache
 |  | ||||||
| 	st.addToChartCache(cacheKey, chartPath) |  | ||||||
| 
 |  | ||||||
| 	return &chartPath, nil | 	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 { | func testEq(a []*ReleaseSpec, b []*exectest.Release) bool { | ||||||
| 	// If one is nil, the other must also be nil.
 | 	// If one is nil, the other must also be nil.
 | ||||||
| 	if (a == nil) != (b == 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) | 		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{ | 	run(testcase{ | ||||||
| 		subject: "baseline", | 		subject: "baseline", | ||||||
| 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, | 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, | ||||||
| 		want:    "foo-values-67dc97cbcb", | 		want:    "foo-values-7d454b9558", | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	run(testcase{ | 	run(testcase{ | ||||||
| 		subject: "different bytes content", | 		subject: "different bytes content", | ||||||
| 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, | 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, | ||||||
| 		data:    []byte(`{"k":"v"}`), | 		data:    []byte(`{"k":"v"}`), | ||||||
| 		want:    "foo-values-75d7c4758c", | 		want:    "foo-values-59c86d55bf", | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	run(testcase{ | 	run(testcase{ | ||||||
| 		subject: "different map content", | 		subject: "different map content", | ||||||
| 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, | 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, | ||||||
| 		data:    map[string]any{"k": "v"}, | 		data:    map[string]any{"k": "v"}, | ||||||
| 		want:    "foo-values-685f8cf685", | 		want:    "foo-values-6f87c5cd79", | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	run(testcase{ | 	run(testcase{ | ||||||
| 		subject: "different chart", | 		subject: "different chart", | ||||||
| 		release: ReleaseSpec{Name: "foo", Chart: "stable/envoy"}, | 		release: ReleaseSpec{Name: "foo", Chart: "stable/envoy"}, | ||||||
| 		want:    "foo-values-75597d9c57", | 		want:    "foo-values-5dfd748475", | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	run(testcase{ | 	run(testcase{ | ||||||
| 		subject: "different name", | 		subject: "different name", | ||||||
| 		release: ReleaseSpec{Name: "bar", Chart: "incubator/raw"}, | 		release: ReleaseSpec{Name: "bar", Chart: "incubator/raw"}, | ||||||
| 		want:    "bar-values-7b77df65ff", | 		want:    "bar-values-858b9c55cc", | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	run(testcase{ | 	run(testcase{ | ||||||
| 		subject: "specific ns", | 		subject: "specific ns", | ||||||
| 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw", Namespace: "myns"}, | 		release: ReleaseSpec{Name: "foo", Chart: "incubator/raw", Namespace: "myns"}, | ||||||
| 		want:    "myns-foo-values-85f979545c", | 		want:    "myns-foo-values-58dc9c6667", | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	for id, n := range ids { | 	for id, n := range ids { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue