diff --git a/.github/workflows/Makefile b/.github/workflows/Makefile
index 159bc0cf..299e5e2f 100644
--- a/.github/workflows/Makefile
+++ b/.github/workflows/Makefile
@@ -1,8 +1,8 @@
HELM_VERSION ?= v3.7.2
KUSTOMIZE_VERSION ?= v5.4.3
-K8S_VERSION ?= v1.28.11
+K8S_VERSION ?= v1.32.1
MINIKUBE_VERSION ?= v1.31.1
-SOPS_VERSION ?= v3.9.0
+SOPS_VERSION ?= v3.9.3
# ---
CHANGE_MINIKUBE_NONE_USER ?= true
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index b4390a36..5ac7ff88 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -18,9 +18,9 @@ jobs:
with:
go-version-file: go.mod
cache: false
- - uses: golangci/golangci-lint-action@v6
+ - uses: golangci/golangci-lint-action@v7
with:
- version: v1.57.2
+ version: v2.0.2
tests:
runs-on: ubuntu-latest
@@ -54,50 +54,38 @@ jobs:
# Helm maintains the latest minor version only and therefore each Helmfile version supports 2 Helm minor versions.
# That's why we cover only 2 Helm minor versions in this matrix.
# See https://github.com/helmfile/helmfile/pull/286#issuecomment-1250161182 for more context.
- - helm-version: v3.15.4
+ - helm-version: v3.16.4
kustomize-version: v5.2.1
plugin-secrets-version: 3.15.0
- plugin-diff-version: 3.8.1
+ plugin-diff-version: 3.10.0
extra-helmfile-flags: ''
- v1mode: ''
- - helm-version: v3.15.4
+ - helm-version: v3.16.4
kustomize-version: v5.4.3
# We assume that the helm-secrets plugin is supposed to
# work with the two most recent helm minor versions.
# Once it turned out to be not practically true,
# we will mark this combination as failable,
# and instruct users to upgrade helm and helm-secrets at once.
- plugin-secrets-version: 4.6.0
- plugin-diff-version: 3.9.11
+ plugin-secrets-version: 4.6.3
+ plugin-diff-version: 3.11.0
extra-helmfile-flags: ''
- v1mode: ''
- - helm-version: v3.16.1
+ - helm-version: v3.17.3
kustomize-version: v5.2.1
plugin-secrets-version: 3.15.0
- plugin-diff-version: 3.8.1
+ plugin-diff-version: 3.10.0
extra-helmfile-flags: ''
- v1mode: ''
- - helm-version: v3.16.1
+ - helm-version: v3.17.3
kustomize-version: v5.4.3
- plugin-secrets-version: 4.6.0
- plugin-diff-version: 3.9.11
+ plugin-secrets-version: 4.6.3
+ plugin-diff-version: 3.11.0
extra-helmfile-flags: ''
- v1mode: ''
- # Helmfile v1
- - helm-version: v3.16.1
- kustomize-version: v5.4.3
- plugin-secrets-version: 4.6.0
- plugin-diff-version: 3.9.11
- extra-helmfile-flags: ''
- v1mode: 'true'
# In case you need to test some optional helmfile features,
# enable it via extra-helmfile-flags below.
- - helm-version: v3.16.1
+ - helm-version: v3.17.3
kustomize-version: v5.4.3
- plugin-secrets-version: 4.6.0
- plugin-diff-version: 3.9.11
+ plugin-secrets-version: 4.6.3
+ plugin-diff-version: 3.11.0
extra-helmfile-flags: '--enable-live-output'
- v1mode: ''
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
@@ -127,7 +115,6 @@ jobs:
HELMFILE_HELM3: 1
TERM: xterm
EXTRA_HELMFILE_FLAGS: ${{ matrix.extra-helmfile-flags }}
- HELMFILE_V1MODE: ${{ matrix.v1mode }}
e2e_tests:
needs: tests
diff --git a/.github/workflows/releaser.yaml b/.github/workflows/releaser.yaml
index ee2f0dc9..fc98bd7c 100644
--- a/.github/workflows/releaser.yaml
+++ b/.github/workflows/releaser.yaml
@@ -16,7 +16,6 @@ permissions:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- HELMFILE_V1MODE: ${{ startsWith(github.ref, 'refs/tags/v1') }}
SNAPSHOT: ${{ !startsWith(github.ref, 'refs/tags/v') && '--snapshot' || '' }}
jobs:
diff --git a/.golangci.yaml b/.golangci.yaml
index d0c0f1c2..99add513 100644
--- a/.golangci.yaml
+++ b/.golangci.yaml
@@ -1,360 +1,146 @@
-# This file contains all available configuration options
-# with their default values.
-
-# options for analysis running
+version: "2"
run:
- # default concurrency is a available CPU number
- # concurrency: 4
-
- # timeout for analysis, e.g. 30s, 5m, default is 1m
- timeout: 30m
-
- # exit code when at least one issue was found, default is 1
issues-exit-code: 1
-
- # include test files or not, default is true
tests: true
-
- # list of build tags, all linters use it. Default is empty list.
- # build-tags:
- # - mytag
-
- # which dirs to skip: issues from them won't be reported;
- # can use regexp here: generated.*, regexp is applied on full path;
- # default value is empty list, but default dirs are skipped independently
- # from this option's value (see skip-dirs-use-default).
- # skip-dirs:
- # - src/external_libs
- # - autogenerated_by_my_lib
-
- # default is true. Enables skipping of directories:
- # vendor$, third_party$, testdata$, examples$, Godeps$, builtin$
- skip-dirs-use-default: true
-
- # which files to skip: they will be analyzed, but issues from them
- # won't be reported. Default value is empty list, but there is
- # no need to include all autogenerated files, we confidently recognize
- # autogenerated files. If it's not please let us know.
- # skip-files:
- # - ".*\\.my\\.go$"
- # - lib/bad.go
-
- # by default isn't set. If set we pass it to "go list -mod={option}". From "go help modules":
- # If invoked with -mod=readonly, the go command is disallowed from the implicit
- # automatic updating of go.mod described above. Instead, it fails when any changes
- # to go.mod are needed. This setting is most useful to check that go.mod does
- # not need updates, such as in a continuous integration and testing system.
- # If invoked with -mod=vendor, the go command assumes that the vendor
- # directory holds the correct copies of dependencies and ignores
- # the dependency descriptions in go.mod.
- # modules-download-mode: readonly|release|vendor
-
-# output configuration options
output:
- # colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number"
- format: line-number
-
- # print lines of code with issue, default is true
- print-issued-lines: true
-
- # print linter name in the end of issue text, default is true
- print-linter-name: true
-
-# all available settings of specific linters
-linters-settings:
- gci:
- sections:
- - standard
- - default
- - prefix(github.com/helmfile/helmfile)
-
- errcheck:
- # report about not checking of errors in type assetions: `a := b.(MyStruct)`;
- # default is false: such cases aren't reported by default.
- check-type-assertions: false
-
- # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`;
- # default is false: such cases aren't reported by default.
- check-blank: false
-
- # [deprecated] comma-separated list of pairs of the form pkg:regex
- # the regex is used to ignore names within pkg. (default "fmt:.*").
- # see https://github.com/kisielk/errcheck#the-deprecated-method for details
- # ignore: fmt:.*
-
- # path to a file containing a list of functions to exclude from checking
- # see https://github.com/kisielk/errcheck#excluding-functions for details
- # exclude: /path/to/file.txt
-
- # Disable error checking, as errorcheck detects more errors and is more configurable.
- gosec:
- exclude:
- - "G104"
-
- govet:
- # report about shadowed variables
- check-shadowing: false
-
- # settings per analyzer
- settings:
- printf: # analyzer name, run `go tool vet help` to see all analyzers
- funcs: # run `go tool vet help printf` to see available settings for `printf` analyzer
- - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof
- - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf
- - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf
- - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf
-
- # enable or disable analyzers by name
- # enable:
- # - atomicalign
- # enable-all: false
- # disable:
- # - shadow
- # disable-all: false
- golint:
- # minimal confidence for issues, default is 0.8
- min-confidence: 0.8
- gofmt:
- # simplify code: gofmt with `-s` option, true by default
- simplify: true
- goimports:
- # put imports beginning with prefix after 3rd-party packages;
- # it's a comma-separated list of prefixes
- # local-prefixes: github.com/org/project
- gocyclo:
- # minimal code complexity to report, 30 by default (but we recommend 10-20)
- min-complexity: 30
- gocognit:
- # minimal code complexity to report, 30 by default (but we recommend 10-20)
- min-complexity: 100
- maligned:
- # print struct with more effective memory layout or not, false by default
- suggest-new: true
- dupl:
- # tokens count to trigger issue, 150 by default
- threshold: 100
- goconst:
- # minimal length of string constant, 3 by default
- min-len: 3
- # minimal occurrences count to trigger, 3 by default
- min-occurrences: 8
- # depguard:
- # list-type: blacklist
- # include-go-root: false
- # packages:
- # - github.com/sirupsen/logrus
- # packages-with-error-messages:
- # # specify an error message to output when a blacklisted package is used
- # github.com/sirupsen/logrus: "logging is allowed only by logutils.Log"
- misspell:
- # Correct spellings using locale preferences for US or UK.
- # Default is to use a neutral variety of English.
- # Setting locale to US will correct the British spelling of 'colour' to 'color'.
- locale: US
- ignore-words:
- - GitLab
- lll:
- # max line length, lines longer will be reported. Default is 120.
- # '\t' is counted as 1 character by default, and can be changed with the tab-width option
- line-length: 120
- # tab width in spaces. Default to 1.
- tab-width: 1
- unused:
- # treat code as a program (not a library) and report unused exported identifiers; default is false.
- # XXX: if you enable this setting, unused will report a lot of false-positives in text editors:
- # if it's called for subdir of a project it can't find funcs usages. All text editor integrations
- # with golangci-lint call it on a directory with the changed file.
- check-exported: false
- unparam:
- # Inspect exported functions, default is false. Set to true if no external program/library imports your code.
- # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors:
- # if it's called for subdir of a project it can't find external interfaces. All text editor integrations
- # with golangci-lint call it on a directory with the changed file.
- check-exported: false
- nakedret:
- # make an issue if func has more lines of code than this setting and it has naked returns; default is 30
- max-func-lines: 50
- prealloc:
- # XXX: we don't recommend using this linter before doing performance profiling.
- # For most programs usage of prealloc will be a premature optimization.
-
- # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them.
- # True by default.
- simple: true
- range-loops: true # Report preallocation suggestions on range loops, true by default
- for-loops: false # Report preallocation suggestions on for loops, false by default
- gocritic:
- # Which checks should be enabled; can't be combined with 'disabled-checks';
- # See https://go-critic.github.io/overview#checks-overview
- # To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run`
- # By default list of stable checks is used.
- # enabled-checks:
- # - rangeValCopy
-
- # Which checks should be disabled; can't be combined with 'enabled-checks'; default is empty
- # disabled-checks:
- # - regexpMust
-
- # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks.
- # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags".
- # enabled-tags:
- # - performance
-
- settings: # settings passed to gocritic
- captLocal: # must be valid enabled check name
- paramsOnly: true
- # rangeValCopy:
- # sizeThreshold: 32
- godox:
- # report any comments starting with keywords, this is useful for TODO or FIXME comments that
- # might be left in the code accidentally and should be resolved before merging
- keywords: # default keywords are TODO, BUG, and FIXME, these can be overwritten by this setting
- - TODO
- - BUG
- - FIXME
- - NOTE
- - OPTIMIZE # marks code that should be optimized before merging
- - HACK # marks hack-arounds that should be removed before merging
- dogsled:
- # checks assignments with too many blank identifiers; default is 2
- max-blank-identifiers: 2
-
- whitespace:
- multi-if: false # Enforces newlines (or comments) after every multi-line if statement
- multi-func: false # Enforces newlines (or comments) after every multi-line function signature
- wsl:
- # If true append is only allowed to be cuddled if appending value is
- # matching variables, fields or types on line above. Default is true.
- strict-append: true
- # Allow calls and assignments to be cuddled as long as the lines have any
- # matching variables, fields or types. Default is true.
- allow-assign-and-call: true
- # Allow multiline assignments to be cuddled. Default is true.
- allow-multiline-assign: true
- # Allow declarations (var) to be cuddled.
- allow-cuddle-declarations: false
- # Allow trailing comments in ending of blocks
- allow-trailing-comment: false
- # Force newlines in end of case at this limit (0 = never).
- force-case-trailing-whitespace: 0
- revive:
- ignore-generated-header: true
- severity: warning
- funlen:
- # Checks the number of lines in a function.
- # If lower than 0, disable the check.
- # Default: 60
- lines: 280
- # Checks the number of statements in a function.
- # If lower than 0, disable the check.
- # Default: 40
- statements: 140
-
+ formats:
+ text:
+ path: stdout
+ print-linter-name: true
+ print-issued-lines: true
+ colors: false
linters:
- # please, do not use `enable-all`: it's deprecated and will be removed soon.
- # inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint
- disable-all: true
+ default: none
enable:
- bodyclose
- - usestdlibvars
- - reassign
+ - copyloopvar
- errcheck
- funlen
- gocognit
- goconst
- - gofmt
- - goimports
- - revive
- - gosimple
- govet
- ineffassign
- misspell
- nakedret
- - exportloopref
+ - reassign
+ - revive
- staticcheck
- - typecheck
- unconvert
- unparam
- unused
+ - usestdlibvars
- whitespace
- - gci
- # don't enable:
- # - depguard
- # - deadcode
- # - gochecknoglobals
- # - gochecknoinits
- # - gocyclo
- # - lll
- # - maligned
- # - prealloc
- # - varcheck
- # - gocritic
- # - godox
- # - gosec
- # - interfacer
- # - stylecheck
- # - dogsled
- # - dupl
+ settings:
+ staticcheck:
+ checks: ["all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022", "-ST1005", "-QF1001", "-QF1008"]
+ dogsled:
+ max-blank-identifiers: 2
+ dupl:
+ threshold: 100
+ errcheck:
+ check-type-assertions: false
+ check-blank: false
+ funlen:
+ lines: 280
+ statements: 140
+ gocognit:
+ min-complexity: 100
+ goconst:
+ min-len: 3
+ min-occurrences: 8
+ gocritic:
+ settings:
+ captLocal:
+ paramsOnly: true
+ gocyclo:
+ min-complexity: 30
+ godox:
+ keywords:
+ - TODO
+ - BUG
+ - FIXME
+ - NOTE
+ - OPTIMIZE
+ - HACK
+ gosec:
+ excludes:
+ - G104
+ govet:
+ disable:
+ - shadow
+ settings:
+ printf:
+ funcs:
+ - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof
+ - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf
+ - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf
+ - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf
+ lll:
+ line-length: 120
+ tab-width: 1
+ misspell:
+ locale: US
+ ignore-rules:
+ - GitLab
+ nakedret:
+ max-func-lines: 50
+ prealloc:
+ simple: true
+ range-loops: true
+ for-loops: false
+ revive:
+ confidence: 0.8
+ severity: warning
+ unparam:
+ check-exported: false
+ whitespace:
+ multi-if: false
+ multi-func: false
+ wsl:
+ strict-append: true
+ allow-assign-and-call: true
+ allow-multiline-assign: true
+ force-case-trailing-whitespace: 0
+ allow-trailing-comment: false
+ allow-cuddle-declarations: false
+ exclusions:
+ generated: lax
+ rules:
+ - linters:
+ - dupl
+ - errcheck
+ - funlen
+ - gocyclo
+ - gosec
+ path: _test\.go
+ - linters:
+ - lll
+ source: '^//go:generate '
+ paths:
+ - third_party$
+ - builtin$
+ - examples$
issues:
- # List of regexps of issue texts to exclude, empty list by default.
- # But independently from this option we use default exclude patterns,
- # it can be disabled by `exclude-use-default: false`. To list all
- # excluded by default patterns execute `golangci-lint run --help`
- # exclude:
- # - abcdef
-
- # Excluding configuration per-path, per-linter, per-text and per-source
- exclude-rules:
- # Exclude some linters from running on tests files.
- - path: _test\.go
- linters:
- - gocyclo
- - errcheck
- - dupl
- - gosec
- - funlen
-
- # Exclude known linters from partially hard-vendored code,
- # which is impossible to exclude via "nolint" comments.
- # - path: internal/hmac/
- # text: "weak cryptographic primitive"
- # linters:
- # - gosec
-
- # Exclude some staticcheck messages
- # - linters:
- # - staticcheck
- # text: "SA9003:"
-
- # Exclude lll issues for long lines with go:generate
- - linters:
- - lll
- source: "^//go:generate "
-
- # Independently from option `exclude` we use default exclude patterns,
- # it can be disabled by this option. To list all
- # excluded by default patterns execute `golangci-lint run --help`.
- # Default value for this option is true.
- exclude-use-default: false
-
- # Maximum issues count per one linter. Set to 0 to disable. Default is 50.
max-issues-per-linter: 0
-
- # Maximum count of issues with the same text. Set to 0 to disable. Default is 3.
max-same-issues: 0
-
- # Show only new issues: if there are unstaged changes or untracked files,
- # only those changes are analyzed, else only changes in HEAD~ are analyzed.
- # It's a super-useful option for integration of golangci-lint into existing
- # large codebase. It's not practical to fix all existing issues at the moment
- # of integration: much better don't allow issues in new code.
- # Default is false.
new: false
-
- # Show only new issues created after git revision `REV`
- # This should be passed as flag during individual CI jobs.
- # new-from-rev: REV
-
- # Show only new issues created in git patch with set file path.
- # new-from-patch: path/to/patch/file
\ No newline at end of file
+formatters:
+ enable:
+ - gci
+ - gofmt
+ - goimports
+ settings:
+ gci:
+ sections:
+ - standard
+ - default
+ - prefix(github.com/helmfile/helmfile)
+ gofmt:
+ simplify: true
+ exclusions:
+ generated: lax
+ paths:
+ - third_party$
+ - builtin$
+ - examples$
diff --git a/.goreleaser.yml b/.goreleaser.yml
index 6d515513..e2f1a834 100644
--- a/.goreleaser.yml
+++ b/.goreleaser.yml
@@ -1,8 +1,5 @@
version: 2
project_name: helmfile
-env:
- # We default to non-v1 mode (=helmfile v0.x behavior) when HELMFILE_V1MODE is not set
- - HELMFILE_V1MODE={{ if index .Env "HELMFILE_V1MODE" }}{{ .Env.HELMFILE_V1MODE }}{{ else }}false{{ end }}
builds:
- id: helmfile
main: .
@@ -15,7 +12,6 @@ builds:
- -X go.szostok.io/version.commit={{.FullCommit}}
- -X go.szostok.io/version.commitDate={{.CommitDate}}
- -X go.szostok.io/version.dirtyBuild=false
- - -X github.com/helmfile/helmfile/pkg/runtime.v1Mode={{.Env.HELMFILE_V1MODE}}
goos:
- darwin
- linux
@@ -24,7 +20,14 @@ builds:
- amd64
- arm64
- "386"
-
+archives:
+ - id: helmfile
+ ids:
+ - helmfile
+ builds_info:
+ group: root
+ owner: root
+ mode: 0644
changelog:
use: github
sort: asc
diff --git a/Dockerfile b/Dockerfile
index b157780a..cb320f9a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM --platform=$BUILDPLATFORM golang:1.22-alpine AS builder
+FROM --platform=$BUILDPLATFORM golang:1.24-alpine AS builder
RUN apk add --no-cache make git
WORKDIR /workspace/helmfile
@@ -30,7 +30,7 @@ ENV HELM_CONFIG_HOME="${HELM_CONFIG_HOME}"
ARG HELM_DATA_HOME="${HOME}/.local/share/helm"
ENV HELM_DATA_HOME="${HELM_DATA_HOME}"
-ARG HELM_VERSION="v3.16.1"
+ARG HELM_VERSION="v3.17.3"
ENV HELM_VERSION="${HELM_VERSION}"
ARG HELM_LOCATION="https://get.helm.sh"
ARG HELM_FILENAME="helm-${HELM_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz"
@@ -38,8 +38,8 @@ RUN set -x && \
curl --retry 5 --retry-connrefused -LO "${HELM_LOCATION}/${HELM_FILENAME}" && \
echo Verifying ${HELM_FILENAME}... && \
case ${TARGETPLATFORM} in \
- "linux/amd64") HELM_SHA256="e57e826410269d72be3113333dbfaac0d8dfdd1b0cc4e9cb08bdf97722731ca9" ;; \
- "linux/arm64") HELM_SHA256="780b5b86f0db5546769b3e9f0204713bbdd2f6696dfdaac122fbe7f2f31541d2" ;; \
+ "linux/amd64") HELM_SHA256="ee88b3c851ae6466a3de507f7be73fe94d54cbf2987cbaa3d1a3832ea331f2cd" ;; \
+ "linux/arm64") HELM_SHA256="7944e3defd386c76fd92d9e6fec5c2d65a323f6fadc19bfb5e704e3eee10348e" ;; \
esac && \
echo "${HELM_SHA256} ${HELM_FILENAME}" | sha256sum -c && \
echo Extracting ${HELM_FILENAME}... && \
@@ -50,13 +50,12 @@ RUN set -x && \
# using the install documentation found at https://kubernetes.io/docs/tasks/tools/install-kubectl/
# for now but in a future version of alpine (in the testing version at the time of writing)
# we should be able to install using apk add.
-ENV KUBECTL_VERSION="v1.28.9"
+ENV KUBECTL_VERSION="v1.32.1"
RUN set -x && \
curl --retry 5 --retry-connrefused -LO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl" && \
case ${TARGETPLATFORM} in \
- # checksums are available at https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl.sha256
- "linux/amd64") KUBECTL_SHA256="b4693d0b22f509250694b10c7727c42b427d570af04f2065fe23a55d6c0051f1" ;; \
- "linux/arm64") KUBECTL_SHA256="e0341d3973213f8099e7fcbbf6d1d506967bc2b7a4faac3fb3b4340f226e9b2f" ;; \
+ "linux/amd64") KUBECTL_SHA256="e16c80f1a9f94db31063477eb9e61a2e24c1a4eee09ba776b029048f5369db0c" ;; \
+ "linux/arm64") KUBECTL_SHA256="98206fd83a4fd17f013f8c61c33d0ae8ec3a7c53ec59ef3d6a0a9400862dc5b2" ;; \
esac && \
echo "${KUBECTL_SHA256} kubectl" | sha256sum -c && \
chmod +x kubectl && \
@@ -68,16 +67,16 @@ ARG KUSTOMIZE_FILENAME="kustomize_${KUSTOMIZE_VERSION}_${TARGETOS}_${TARGETARCH}
RUN set -x && \
curl --retry 5 --retry-connrefused -LO "https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/${KUSTOMIZE_FILENAME}" && \
case ${TARGETPLATFORM} in \
- # Checksums are available at https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt
- "linux/amd64") KUSTOMIZE_SHA256="3669470b454d865c8184d6bce78df05e977c9aea31c30df3c669317d43bcc7a7" ;; \
- "linux/arm64") KUSTOMIZE_SHA256="1b515578b0af12c15d9856720066ce2fe66756d63785b2cbccaf2885beb2381c" ;; \
+ # Checksums are available at https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt
+ "linux/amd64") KUSTOMIZE_SHA256="3669470b454d865c8184d6bce78df05e977c9aea31c30df3c669317d43bcc7a7" ;; \
+ "linux/arm64") KUSTOMIZE_SHA256="1b515578b0af12c15d9856720066ce2fe66756d63785b2cbccaf2885beb2381c" ;; \
esac && \
echo "${KUSTOMIZE_SHA256} ${KUSTOMIZE_FILENAME}" | sha256sum -c && \
tar xvf "${KUSTOMIZE_FILENAME}" -C /usr/local/bin && \
rm "${KUSTOMIZE_FILENAME}" && \
[ "$(kustomize version)" = "${KUSTOMIZE_VERSION}" ]
-ENV SOPS_VERSION="v3.9.0"
+ENV SOPS_VERSION="v3.9.3"
ARG SOPS_FILENAME="sops-${SOPS_VERSION}.${TARGETOS}.${TARGETARCH}"
RUN set -x && \
curl --retry 5 --retry-connrefused -LO "https://github.com/getsops/sops/releases/download/${SOPS_VERSION}/${SOPS_FILENAME}" && \
@@ -85,7 +84,7 @@ RUN set -x && \
mv "${SOPS_FILENAME}" /usr/local/bin/sops && \
sops --version --disable-version-check | grep -E "^sops ${SOPS_VERSION#v}"
-ENV AGE_VERSION="v1.1.1"
+ENV AGE_VERSION="v1.2.0"
ARG AGE_FILENAME="age-${AGE_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz"
RUN set -x && \
curl --retry 5 --retry-connrefused -LO "https://github.com/FiloSottile/age/releases/download/${AGE_VERSION}/${AGE_FILENAME}" && \
@@ -94,10 +93,10 @@ RUN set -x && \
[ "$(age --version)" = "${AGE_VERSION}" ] && \
[ "$(age-keygen --version)" = "${AGE_VERSION}" ]
-RUN helm plugin install https://github.com/databus23/helm-diff --version v3.9.11 && \
- helm plugin install https://github.com/jkroepke/helm-secrets --version v4.6.0 && \
- helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.16.2 && \
- helm plugin install https://github.com/aslafy-z/helm-git.git --version v0.16.0 && \
+RUN helm plugin install https://github.com/databus23/helm-diff --version v3.11.0 && \
+ helm plugin install https://github.com/jkroepke/helm-secrets --version v4.6.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 && \
rm -rf ${HELM_CACHE_HOME}/plugins
# Allow users other than root to use helm plugins located in root home
diff --git a/Dockerfile.debian-stable-slim b/Dockerfile.debian-stable-slim
index dce57e5e..10febf37 100644
--- a/Dockerfile.debian-stable-slim
+++ b/Dockerfile.debian-stable-slim
@@ -1,4 +1,4 @@
-FROM --platform=$BUILDPLATFORM golang:1.22-alpine AS builder
+FROM --platform=$BUILDPLATFORM golang:1.24-alpine AS builder
RUN apk add --no-cache make git
WORKDIR /workspace/helmfile
@@ -18,9 +18,9 @@ LABEL org.opencontainers.image.source=https://github.com/helmfile/helmfile
RUN apt update -qq && \
apt install --no-install-recommends -y \
- ca-certificates \
- gnupg \
- git bash curl jq wget openssh-client && \
+ ca-certificates \
+ gnupg \
+ git bash curl jq wget openssh-client && \
rm -rf /var/lib/apt/lists/*
ARG TARGETARCH TARGETOS TARGETPLATFORM
@@ -35,7 +35,7 @@ ENV HELM_CONFIG_HOME="${HELM_CONFIG_HOME}"
ARG HELM_DATA_HOME="${HOME}/.local/share/helm"
ENV HELM_DATA_HOME="${HELM_DATA_HOME}"
-ARG HELM_VERSION="v3.16.1"
+ARG HELM_VERSION="v3.17.3"
ENV HELM_VERSION="${HELM_VERSION}"
ARG HELM_LOCATION="https://get.helm.sh"
ARG HELM_FILENAME="helm-${HELM_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz"
@@ -43,8 +43,8 @@ RUN set -x && \
curl --retry 5 --retry-connrefused -LO "${HELM_LOCATION}/${HELM_FILENAME}" && \
echo Verifying ${HELM_FILENAME}... && \
case ${TARGETPLATFORM} in \
- "linux/amd64") HELM_SHA256="e57e826410269d72be3113333dbfaac0d8dfdd1b0cc4e9cb08bdf97722731ca9" ;; \
- "linux/arm64") HELM_SHA256="780b5b86f0db5546769b3e9f0204713bbdd2f6696dfdaac122fbe7f2f31541d2" ;; \
+ "linux/amd64") HELM_SHA256="ee88b3c851ae6466a3de507f7be73fe94d54cbf2987cbaa3d1a3832ea331f2cd" ;; \
+ "linux/arm64") HELM_SHA256="7944e3defd386c76fd92d9e6fec5c2d65a323f6fadc19bfb5e704e3eee10348e" ;; \
esac && \
echo "${HELM_SHA256} ${HELM_FILENAME}" | sha256sum -c && \
echo Extracting ${HELM_FILENAME}... && \
@@ -55,13 +55,13 @@ RUN set -x && \
# using the install documentation found at https://kubernetes.io/docs/tasks/tools/install-kubectl/
# for now but in a future version of alpine (in the testing version at the time of writing)
# we should be able to install using apk add.
-ENV KUBECTL_VERSION="v1.28.9"
+ENV KUBECTL_VERSION="v1.32.1"
RUN set -x && \
curl --retry 5 --retry-connrefused -LO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl" && \
case ${TARGETPLATFORM} in \
- # checksums are available at https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl.sha256
- "linux/amd64") KUBECTL_SHA256="b4693d0b22f509250694b10c7727c42b427d570af04f2065fe23a55d6c0051f1" ;; \
- "linux/arm64") KUBECTL_SHA256="e0341d3973213f8099e7fcbbf6d1d506967bc2b7a4faac3fb3b4340f226e9b2f" ;; \
+ # checksums are available at https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl.sha256
+ "linux/amd64") KUBECTL_SHA256="e16c80f1a9f94db31063477eb9e61a2e24c1a4eee09ba776b029048f5369db0c" ;; \
+ "linux/arm64") KUBECTL_SHA256="98206fd83a4fd17f013f8c61c33d0ae8ec3a7c53ec59ef3d6a0a9400862dc5b2" ;; \
esac && \
echo "${KUBECTL_SHA256} kubectl" | sha256sum -c && \
chmod +x kubectl && \
@@ -73,16 +73,16 @@ ARG KUSTOMIZE_FILENAME="kustomize_${KUSTOMIZE_VERSION}_${TARGETOS}_${TARGETARCH}
RUN set -x && \
curl --retry 5 --retry-connrefused -LO "https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/${KUSTOMIZE_FILENAME}" && \
case ${TARGETPLATFORM} in \
- # Checksums are available at https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt
- "linux/amd64") KUSTOMIZE_SHA256="3669470b454d865c8184d6bce78df05e977c9aea31c30df3c669317d43bcc7a7" ;; \
- "linux/arm64") KUSTOMIZE_SHA256="1b515578b0af12c15d9856720066ce2fe66756d63785b2cbccaf2885beb2381c" ;; \
+ # Checksums are available at https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt
+ "linux/amd64") KUSTOMIZE_SHA256="3669470b454d865c8184d6bce78df05e977c9aea31c30df3c669317d43bcc7a7" ;; \
+ "linux/arm64") KUSTOMIZE_SHA256="1b515578b0af12c15d9856720066ce2fe66756d63785b2cbccaf2885beb2381c" ;; \
esac && \
echo "${KUSTOMIZE_SHA256} ${KUSTOMIZE_FILENAME}" | sha256sum -c && \
tar xvf "${KUSTOMIZE_FILENAME}" -C /usr/local/bin && \
rm "${KUSTOMIZE_FILENAME}" && \
[ "$(kustomize version)" = "${KUSTOMIZE_VERSION}" ]
-ENV SOPS_VERSION="v3.9.0"
+ENV SOPS_VERSION="v3.9.3"
ARG SOPS_FILENAME="sops-${SOPS_VERSION}.${TARGETOS}.${TARGETARCH}"
RUN set -x && \
curl --retry 5 --retry-connrefused -LO "https://github.com/getsops/sops/releases/download/${SOPS_VERSION}/${SOPS_FILENAME}" && \
@@ -90,7 +90,7 @@ RUN set -x && \
mv "${SOPS_FILENAME}" /usr/local/bin/sops && \
sops --version --disable-version-check | grep -E "^sops ${SOPS_VERSION#v}"
-ENV AGE_VERSION="v1.1.1"
+ENV AGE_VERSION="v1.2.0"
ARG AGE_FILENAME="age-${AGE_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz"
RUN set -x && \
curl --retry 5 --retry-connrefused -LO "https://github.com/FiloSottile/age/releases/download/${AGE_VERSION}/${AGE_FILENAME}" && \
@@ -99,10 +99,10 @@ RUN set -x && \
[ "$(age --version)" = "${AGE_VERSION}" ] && \
[ "$(age-keygen --version)" = "${AGE_VERSION}" ]
-RUN helm plugin install https://github.com/databus23/helm-diff --version v3.9.11 && \
- helm plugin install https://github.com/jkroepke/helm-secrets --version v4.6.0 && \
- helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.16.2 && \
- helm plugin install https://github.com/aslafy-z/helm-git.git --version v0.16.0 && \
+RUN helm plugin install https://github.com/databus23/helm-diff --version v3.11.0 && \
+ helm plugin install https://github.com/jkroepke/helm-secrets --version v4.6.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 && \
rm -rf ${HELM_CACHE_HOME}/plugins
# Allow users other than root to use helm plugins located in root home
diff --git a/Dockerfile.ubuntu b/Dockerfile.ubuntu
index 55de9269..2088a681 100644
--- a/Dockerfile.ubuntu
+++ b/Dockerfile.ubuntu
@@ -1,4 +1,4 @@
-FROM --platform=$BUILDPLATFORM golang:1.22-alpine AS builder
+FROM --platform=$BUILDPLATFORM golang:1.24-alpine AS builder
RUN apk add --no-cache make git
WORKDIR /workspace/helmfile
@@ -12,15 +12,15 @@ RUN make static-${TARGETOS}-${TARGETARCH}
# -----------------------------------------------------------------------------
-FROM ubuntu:24.04
+FROM ubuntu:24.10
LABEL org.opencontainers.image.source=https://github.com/helmfile/helmfile
RUN apt update -qq && \
apt install --no-install-recommends -y \
- ca-certificates \
- gnupg \
- git bash curl jq wget openssh-client && \
+ ca-certificates \
+ gnupg \
+ git bash curl jq wget openssh-client && \
rm -rf /var/lib/apt/lists/*
ARG TARGETARCH TARGETOS TARGETPLATFORM
@@ -35,7 +35,7 @@ ENV HELM_CONFIG_HOME="${HELM_CONFIG_HOME}"
ARG HELM_DATA_HOME="${HOME}/.local/share/helm"
ENV HELM_DATA_HOME="${HELM_DATA_HOME}"
-ARG HELM_VERSION="v3.16.1"
+ARG HELM_VERSION="v3.17.3"
ENV HELM_VERSION="${HELM_VERSION}"
ARG HELM_LOCATION="https://get.helm.sh"
ARG HELM_FILENAME="helm-${HELM_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz"
@@ -43,8 +43,8 @@ RUN set -x && \
curl --retry 5 --retry-connrefused -LO "${HELM_LOCATION}/${HELM_FILENAME}" && \
echo Verifying ${HELM_FILENAME}... && \
case ${TARGETPLATFORM} in \
- "linux/amd64") HELM_SHA256="e57e826410269d72be3113333dbfaac0d8dfdd1b0cc4e9cb08bdf97722731ca9" ;; \
- "linux/arm64") HELM_SHA256="780b5b86f0db5546769b3e9f0204713bbdd2f6696dfdaac122fbe7f2f31541d2" ;; \
+ "linux/amd64") HELM_SHA256="ee88b3c851ae6466a3de507f7be73fe94d54cbf2987cbaa3d1a3832ea331f2cd" ;; \
+ "linux/arm64") HELM_SHA256="7944e3defd386c76fd92d9e6fec5c2d65a323f6fadc19bfb5e704e3eee10348e" ;; \
esac && \
echo "${HELM_SHA256} ${HELM_FILENAME}" | sha256sum -c && \
echo Extracting ${HELM_FILENAME}... && \
@@ -55,13 +55,13 @@ RUN set -x && \
# using the install documentation found at https://kubernetes.io/docs/tasks/tools/install-kubectl/
# for now but in a future version of alpine (in the testing version at the time of writing)
# we should be able to install using apk add.
-ENV KUBECTL_VERSION="v1.28.9"
+ENV KUBECTL_VERSION="v1.32.1"
RUN set -x && \
curl --retry 5 --retry-connrefused -LO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl" && \
case ${TARGETPLATFORM} in \
- # checksums are available at https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl.sha256
- "linux/amd64") KUBECTL_SHA256="b4693d0b22f509250694b10c7727c42b427d570af04f2065fe23a55d6c0051f1" ;; \
- "linux/arm64") KUBECTL_SHA256="e0341d3973213f8099e7fcbbf6d1d506967bc2b7a4faac3fb3b4340f226e9b2f" ;; \
+ # checksums are available at https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/${TARGETOS}/${TARGETARCH}/kubectl.sha256
+ "linux/amd64") KUBECTL_SHA256="e16c80f1a9f94db31063477eb9e61a2e24c1a4eee09ba776b029048f5369db0c" ;; \
+ "linux/arm64") KUBECTL_SHA256="98206fd83a4fd17f013f8c61c33d0ae8ec3a7c53ec59ef3d6a0a9400862dc5b2" ;; \
esac && \
echo "${KUBECTL_SHA256} kubectl" | sha256sum -c && \
chmod +x kubectl && \
@@ -73,16 +73,16 @@ ARG KUSTOMIZE_FILENAME="kustomize_${KUSTOMIZE_VERSION}_${TARGETOS}_${TARGETARCH}
RUN set -x && \
curl --retry 5 --retry-connrefused -LO "https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/${KUSTOMIZE_FILENAME}" && \
case ${TARGETPLATFORM} in \
- # Checksums are available at https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt
- "linux/amd64") KUSTOMIZE_SHA256="3669470b454d865c8184d6bce78df05e977c9aea31c30df3c669317d43bcc7a7" ;; \
- "linux/arm64") KUSTOMIZE_SHA256="1b515578b0af12c15d9856720066ce2fe66756d63785b2cbccaf2885beb2381c" ;; \
+ # Checksums are available at https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/${KUSTOMIZE_VERSION}/checksums.txt
+ "linux/amd64") KUSTOMIZE_SHA256="3669470b454d865c8184d6bce78df05e977c9aea31c30df3c669317d43bcc7a7" ;; \
+ "linux/arm64") KUSTOMIZE_SHA256="1b515578b0af12c15d9856720066ce2fe66756d63785b2cbccaf2885beb2381c" ;; \
esac && \
echo "${KUSTOMIZE_SHA256} ${KUSTOMIZE_FILENAME}" | sha256sum -c && \
tar xvf "${KUSTOMIZE_FILENAME}" -C /usr/local/bin && \
rm "${KUSTOMIZE_FILENAME}" && \
[ "$(kustomize version)" = "${KUSTOMIZE_VERSION}" ]
-ENV SOPS_VERSION="v3.9.0"
+ENV SOPS_VERSION="v3.9.3"
ARG SOPS_FILENAME="sops-${SOPS_VERSION}.${TARGETOS}.${TARGETARCH}"
RUN set -x && \
curl --retry 5 --retry-connrefused -LO "https://github.com/getsops/sops/releases/download/${SOPS_VERSION}/${SOPS_FILENAME}" && \
@@ -90,7 +90,7 @@ RUN set -x && \
mv "${SOPS_FILENAME}" /usr/local/bin/sops && \
sops --version --disable-version-check | grep -E "^sops ${SOPS_VERSION#v}"
-ENV AGE_VERSION="v1.1.1"
+ENV AGE_VERSION="v1.2.0"
ARG AGE_FILENAME="age-${AGE_VERSION}-${TARGETOS}-${TARGETARCH}.tar.gz"
RUN set -x && \
curl --retry 5 --retry-connrefused -LO "https://github.com/FiloSottile/age/releases/download/${AGE_VERSION}/${AGE_FILENAME}" && \
@@ -99,10 +99,10 @@ RUN set -x && \
[ "$(age --version)" = "${AGE_VERSION}" ] && \
[ "$(age-keygen --version)" = "${AGE_VERSION}" ]
-RUN helm plugin install https://github.com/databus23/helm-diff --version v3.9.11 && \
- helm plugin install https://github.com/jkroepke/helm-secrets --version v4.6.0 && \
- helm plugin install https://github.com/hypnoglow/helm-s3.git --version v0.16.2 && \
- helm plugin install https://github.com/aslafy-z/helm-git.git --version v0.16.0 && \
+RUN helm plugin install https://github.com/databus23/helm-diff --version v3.11.0 && \
+ helm plugin install https://github.com/jkroepke/helm-secrets --version v4.6.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 && \
rm -rf ${HELM_CACHE_HOME}/plugins
# Allow users other than root to use helm plugins located in root home
diff --git a/Makefile b/Makefile
index 0500bd33..5e009ca0 100644
--- a/Makefile
+++ b/Makefile
@@ -25,10 +25,6 @@ build:
go build -ldflags="$(GO_BUILD_VERSION_LDFLAGS)" ${TARGETS}
.PHONY: build
-build-v1:
- go build -ldflags="$(GO_BUILD_VERSION_LDFLAGS) -X github.com/helmfile/helmfile/pkg/runtime.v1Mode=true" ${TARGETS}
-.PHONY: build-v1
-
generate:
go generate ${PKGS}
.PHONY: generate
diff --git a/README-zh_CN.md b/README-zh_CN.md
index 812d222b..b31898ad 100644
--- a/README-zh_CN.md
+++ b/README-zh_CN.md
@@ -12,10 +12,11 @@
# Helmfile
[](https://github.com/helmfile/helmfile/actions/workflows/ci.yaml?query=branch%3Amain)
-[](https://github.com/helmfile/helmfile/pkgs/container/helmfile)
+[](https://github.com/helmfile/helmfile/pkgs/container/helmfile)
[](https://goreportcard.com/report/github.com/helmfile/helmfile)
[](https://slack.sweetops.com)
[](https://helmfile.readthedocs.io/en/latest/)
+[](https://gurubase.io/g/helmfile)
声明式Helm Chart管理工具
diff --git a/README.md b/README.md
index ef030a97..8ae91de8 100644
--- a/README.md
+++ b/README.md
@@ -12,10 +12,11 @@
# Helmfile
[](https://github.com/helmfile/helmfile/actions/workflows/ci.yaml?query=branch%3Amain)
-[](https://github.com/helmfile/helmfile/pkgs/container/helmfile)
+[](https://github.com/helmfile/helmfile/pkgs/container/helmfile)
[](https://goreportcard.com/report/github.com/helmfile/helmfile)
[](https://slack.sweetops.com)
[](https://helmfile.readthedocs.io/en/latest/)
+[](https://gurubase.io/g/helmfile)
Deploy Kubernetes Helm Charts
@@ -104,6 +105,10 @@ Iterate on the `helmfile.yaml` by referencing:
* [CLI reference](https://helmfile.readthedocs.io/en/latest/#cli-reference)
* [Helmfile Best Practices Guide](https://helmfile.readthedocs.io/en/latest/writing-helmfile/)
+## More complex examples
+
+See: [multi-env-helmfile](https://github.com/helmfile/multi-env-helmfile)
+
## Docs
Please read [complete documentation](https://helmfile.readthedocs.io/)
diff --git a/cmd/apply.go b/cmd/apply.go
index d2add4b3..6b5a23f4 100644
--- a/cmd/apply.go
+++ b/cmd/apply.go
@@ -5,7 +5,6 @@ import (
"github.com/helmfile/helmfile/pkg/app"
"github.com/helmfile/helmfile/pkg/config"
- "github.com/helmfile/helmfile/pkg/runtime"
)
// NewApplyCmd returns apply subcmd
@@ -44,12 +43,6 @@ func NewApplyCmd(globalCfg *config.GlobalImpl) *cobra.Command {
f.StringVar(&applyOptions.DiffArgs, "diff-args", "", `pass args to helm helm-diff`)
f.StringVar(&applyOptions.SyncArgs, "sync-args", "", `pass args to helm upgrade`)
f.StringVar(&globalCfg.GlobalOptions.Args, "args", "", "pass args to helm exec")
- if !runtime.V1Mode {
- // TODO: Remove this function once Helmfile v0.x
- f.BoolVar(&applyOptions.RetainValuesFiles, "retain-values-files", false, "DEPRECATED: Use skip-cleanup instead")
- _ = f.MarkDeprecated("retain-values-files", "Use skip-cleanup instead")
- }
-
f.BoolVar(&applyOptions.SkipCleanup, "skip-cleanup", false, "Stop cleaning up temporary values generated by helmfile and helm-secrets. Useful for debugging. Don't use in production for security")
f.BoolVar(&applyOptions.SkipCRDs, "skip-crds", false, "if set, no CRDs will be installed on sync. By default, CRDs are installed if not already present")
f.BoolVar(&applyOptions.SkipNeeds, "skip-needs", true, `do not automatically include releases from the target release's "needs" when --selector/-l flag is provided. Does nothing when --selector/-l flag is not provided. Defaults to true when --include-needs or --include-transitive-needs is not provided`)
@@ -61,6 +54,9 @@ func NewApplyCmd(globalCfg *config.GlobalImpl) *cobra.Command {
f.BoolVar(&applyOptions.SuppressSecrets, "suppress-secrets", false, "suppress secrets in the diff output. highly recommended to specify on CI/CD use-cases")
f.BoolVar(&applyOptions.ShowSecrets, "show-secrets", false, "do not redact secret values in the diff output. should be used for debug purpose only")
f.BoolVar(&applyOptions.NoHooks, "no-hooks", false, "do not diff changes made by hooks.")
+ f.BoolVar(&applyOptions.HideNotes, "hide-notes", false, "add --hide-notes flag to helm")
+ f.BoolVar(&applyOptions.TakeOwnership, "take-ownership", false, "add --take-ownership flag to helm")
+ f.BoolVar(&applyOptions.SyncReleaseLabels, "sync-release-labels", false, "sync release labels to the target release")
f.BoolVar(&applyOptions.SuppressDiff, "suppress-diff", false, "suppress diff in the output. Usable in new installs")
f.BoolVar(&applyOptions.Wait, "wait", false, `Override helmDefaults.wait setting "helm upgrade --install --wait"`)
f.BoolVar(&applyOptions.WaitForJobs, "wait-for-jobs", false, `Override helmDefaults.waitForJobs setting "helm upgrade --install --wait-for-jobs"`)
@@ -68,6 +64,7 @@ func NewApplyCmd(globalCfg *config.GlobalImpl) *cobra.Command {
f.BoolVar(&applyOptions.ResetValues, "reset-values", false, `Override helmDefaults.reuseValues "helm upgrade --install --reset-values"`)
f.StringVar(&applyOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`)
f.StringArrayVar(&applyOptions.PostRendererArgs, "post-renderer-args", nil, `pass --post-renderer-args to "helm template" or "helm upgrade --install"`)
+ f.BoolVar(&applyOptions.SkipSchemaValidation, "skip-schema-validation", false, `pass --skip-schema-validation to "helm template" or "helm upgrade --install"`)
f.StringVar(&applyOptions.Cascade, "cascade", "", "pass cascade to helm exec, default: background")
f.StringArrayVar(&applyOptions.SuppressOutputLineRegex, "suppress-output-line-regex", nil, "a list of regex patterns to suppress output lines from the diff output")
diff --git a/cmd/charts.go b/cmd/charts.go
deleted file mode 100644
index cae9d168..00000000
--- a/cmd/charts.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// TODO: Remove this function once Helmfile v0.x
-package cmd
-
-import (
- "github.com/spf13/cobra"
-
- "github.com/helmfile/helmfile/pkg/app"
- "github.com/helmfile/helmfile/pkg/config"
-)
-
-// NewChartsCmd returns charts subcmd
-func NewChartsCmd(globalCfg *config.GlobalImpl) *cobra.Command {
- chartsOptions := config.NewChartsOptions()
-
- cmd := &cobra.Command{
- Use: "charts",
- Short: "DEPRECATED: sync releases from state file (helm upgrade --install)",
- RunE: func(cmd *cobra.Command, args []string) error {
- chartsImpl := config.NewChartsImpl(globalCfg, chartsOptions)
- err := config.NewCLIConfigImpl(chartsImpl.GlobalImpl)
- if err != nil {
- return err
- }
-
- if err := chartsImpl.ValidateConfig(); err != nil {
- return err
- }
-
- a := app.New(chartsImpl)
- return toCLIError(chartsImpl.GlobalImpl, a.DeprecatedSyncCharts(chartsImpl))
- },
- }
-
- f := cmd.Flags()
- f.StringVar(&globalCfg.GlobalOptions.Args, "args", "", "pass args to helm exec")
- f.StringArrayVar(&chartsOptions.Set, "set", nil, "additional values to be merged into the helm command --set flag")
- f.StringArrayVar(&chartsOptions.Values, "values", nil, "additional value files to be merged into the helm command --values flag")
- f.IntVar(&chartsOptions.Concurrency, "concurrency", 0, "maximum number of concurrent helm processes to run, 0 is unlimited")
-
- return cmd
-}
diff --git a/cmd/delete.go b/cmd/delete.go
deleted file mode 100644
index 1c89c147..00000000
--- a/cmd/delete.go
+++ /dev/null
@@ -1,44 +0,0 @@
-// TODO: Remove this function once Helmfile v0.x
-package cmd
-
-import (
- "github.com/spf13/cobra"
-
- "github.com/helmfile/helmfile/pkg/app"
- "github.com/helmfile/helmfile/pkg/config"
-)
-
-// NewDeleteCmd returns delete subcmd
-func NewDeleteCmd(globalCfg *config.GlobalImpl) *cobra.Command {
- deleteOptions := config.NewDeleteOptions()
-
- cmd := &cobra.Command{
- Use: "delete",
- Short: "DEPRECATED: delete releases from state file (helm delete)",
- RunE: func(cmd *cobra.Command, args []string) error {
- deleteImpl := config.NewDeleteImpl(globalCfg, deleteOptions)
- err := config.NewCLIConfigImpl(deleteImpl.GlobalImpl)
- if err != nil {
- return err
- }
-
- if err := deleteImpl.ValidateConfig(); err != nil {
- return err
- }
-
- a := app.New(deleteImpl)
- return toCLIError(deleteImpl.GlobalImpl, a.Delete(deleteImpl))
- },
- }
-
- f := cmd.Flags()
- f.StringVar(&globalCfg.GlobalOptions.Args, "args", "", "pass args to helm exec")
- f.StringVar(&deleteOptions.Cascade, "cascade", "", "pass cascade to helm exec, default: background")
- f.IntVar(&deleteOptions.Concurrency, "concurrency", 0, "maximum number of concurrent helm processes to run, 0 is unlimited")
- f.BoolVar(&deleteOptions.Purge, "purge", false, "purge releases i.e. free release names and histories")
- f.BoolVar(&deleteOptions.SkipCharts, "skip-charts", false, "don't prepare charts when deleting releases")
- f.BoolVar(&deleteOptions.DeleteWait, "deleteWait", false, `override helmDefaults.wait setting "helm uninstall --wait"`)
- f.IntVar(&deleteOptions.DeleteTimeout, "deleteTimeout", 300, `time in seconds to wait for helm uninstall, default: 300`)
-
- return cmd
-}
diff --git a/cmd/root.go b/cmd/root.go
index dd201728..ed629d12 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -109,14 +109,6 @@ func NewRootCmd(globalConfig *config.GlobalOptions) (*cobra.Command, error) {
),
)
- // TODO: Remove this function once Helmfile v0.x
- if !runtime.V1Mode {
- cmd.AddCommand(
- NewChartsCmd(globalImpl),
- NewDeleteCmd(globalImpl),
- )
- }
-
return cmd, nil
}
@@ -129,6 +121,7 @@ func setGlobalOptionsForRootCmd(fs *pflag.FlagSet, globalOptions *config.GlobalO
fs.StringArrayVar(&globalOptions.StateValuesSetString, "state-values-set-string", nil, "set state STRING values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2). Used to override .Values within the helmfile template (not values template).")
fs.StringArrayVar(&globalOptions.StateValuesFile, "state-values-file", nil, "specify state values in a YAML file. Used to override .Values within the helmfile template (not values template).")
fs.BoolVar(&globalOptions.SkipDeps, "skip-deps", false, `skip running "helm repo update" and "helm dependency build"`)
+ fs.BoolVar(&globalOptions.SkipRefresh, "skip-refresh", false, `skip running "helm repo update"`)
fs.BoolVar(&globalOptions.StripArgsValuesOnExitError, "strip-args-values-on-exit-error", true, `Strip the potential secret values of the helm command args contained in a helmfile error message`)
fs.BoolVar(&globalOptions.DisableForceUpdate, "disable-force-update", false, `do not force helm repos to update when executing "helm repo add"`)
fs.BoolVarP(&globalOptions.Quiet, "quiet", "q", false, "Silence output. Equivalent to log-level warn")
diff --git a/cmd/sync.go b/cmd/sync.go
index a779da3a..1d8ed45f 100644
--- a/cmd/sync.go
+++ b/cmd/sync.go
@@ -41,12 +41,16 @@ func NewSyncCmd(globalCfg *config.GlobalImpl) *cobra.Command {
f.BoolVar(&syncOptions.SkipCRDs, "skip-crds", false, "if set, no CRDs will be installed on sync. By default, CRDs are installed if not already present")
f.BoolVar(&syncOptions.IncludeNeeds, "include-needs", false, `automatically include releases from the target release's "needs" when --selector/-l flag is provided. Does nothing when --selector/-l flag is not provided`)
f.BoolVar(&syncOptions.IncludeTransitiveNeeds, "include-transitive-needs", false, `like --include-needs, but also includes transitive needs (needs of needs). Does nothing when --selector/-l flag is not provided. Overrides exclusions of other selectors and conditions.`)
+ f.BoolVar(&syncOptions.HideNotes, "hide-notes", false, "add --hide-notes flag to helm")
+ f.BoolVar(&syncOptions.TakeOwnership, "take-ownership", false, `add --take-ownership flag to helm`)
+ f.BoolVar(&syncOptions.SyncReleaseLabels, "sync-release-labels", false, "sync release labels to the target release")
f.BoolVar(&syncOptions.Wait, "wait", false, `Override helmDefaults.wait setting "helm upgrade --install --wait"`)
f.BoolVar(&syncOptions.WaitForJobs, "wait-for-jobs", false, `Override helmDefaults.waitForJobs setting "helm upgrade --install --wait-for-jobs"`)
f.BoolVar(&syncOptions.ReuseValues, "reuse-values", false, `Override helmDefaults.reuseValues "helm upgrade --install --reuse-values"`)
f.BoolVar(&syncOptions.ResetValues, "reset-values", false, `Override helmDefaults.reuseValues "helm upgrade --install --reset-values"`)
f.StringVar(&syncOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`)
f.StringArrayVar(&syncOptions.PostRendererArgs, "post-renderer-args", nil, `pass --post-renderer-args to "helm template" or "helm upgrade --install"`)
+ f.BoolVar(&syncOptions.SkipSchemaValidation, "skip-schema-validation", false, `pass --skip-schema-validation to "helm template" or "helm upgrade --install"`)
f.StringVar(&syncOptions.Cascade, "cascade", "", "pass cascade to helm exec, default: background")
return cmd
diff --git a/cmd/template.go b/cmd/template.go
index dfd27c38..6cb81fea 100644
--- a/cmd/template.go
+++ b/cmd/template.go
@@ -44,8 +44,10 @@ func NewTemplateCmd(globalCfg *config.GlobalImpl) *cobra.Command {
f.BoolVar(&templateOptions.IncludeNeeds, "include-needs", false, `automatically include releases from the target release's "needs" when --selector/-l flag is provided. Does nothing when --selector/-l flag is not provided`)
f.BoolVar(&templateOptions.IncludeTransitiveNeeds, "include-transitive-needs", false, `like --include-needs, but also includes transitive needs (needs of needs). Does nothing when --selector/-l flag is not provided. Overrides exclusions of other selectors and conditions.`)
f.BoolVar(&templateOptions.SkipCleanup, "skip-cleanup", false, "Stop cleaning up temporary values generated by helmfile and helm-secrets. Useful for debugging. Don't use in production for security")
+ f.BoolVar(&templateOptions.NoHooks, "no-hooks", false, "do not template files made by hooks.")
f.StringVar(&templateOptions.PostRenderer, "post-renderer", "", `pass --post-renderer to "helm template" or "helm upgrade --install"`)
f.StringArrayVar(&templateOptions.PostRendererArgs, "post-renderer-args", nil, `pass --post-renderer-args to "helm template" or "helm upgrade --install"`)
+ f.BoolVar(&templateOptions.SkipSchemaValidation, "skip-schema-validation", false, `pass skip-schema-validation to "helm template" or "helm upgrade --install"`)
f.StringVar(&templateOptions.KubeVersion, "kube-version", "", `pass --kube-version to "helm template". Overrides kubeVersion in helmfile.yaml`)
f.StringArrayVar(&templateOptions.ShowOnly, "show-only", nil, `pass --show-only to "helm template"`)
diff --git a/docs/index.md b/docs/index.md
index 97745e42..211dbf8e 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -12,7 +12,7 @@
# Helmfile
[](https://github.com/helmfile/helmfile/actions/workflows/ci.yaml?query=branch%3Amain)
-[](https://github.com/helmfile/helmfile/pkgs/container/helmfile)
+[](https://github.com/helmfile/helmfile/pkgs/container/helmfile)
[](https://goreportcard.com/report/github.com/helmfile/helmfile)
[](https://slack.sweetops.com)
[](https://helmfile.readthedocs.io/en/latest/)
@@ -193,8 +193,12 @@ helmDefaults:
# verify the chart before upgrading (only works with packaged charts not directories) (default false)
verify: true
keyring: path/to/keyring.gpg
+ # --skip-schema-validation flag to helm 'install', 'upgrade' and 'lint', starts with helm 3.16.0 (default false)
+ skipSchemaValidation: false
# wait for k8s resources via --wait. (default false)
wait: true
+ # if set and --wait enabled, will retry any failed check on resource state subject to the specified number of retries (default 0)
+ waitRetries: 3
# if set and --wait enabled, will wait until all Jobs have been completed before marking the release as successful. It will wait for as long as --timeout (default false, Implemented in Helm3.5)
waitForJobs: true
# time in seconds to wait for any individual Kubernetes operation (like Jobs for hooks, and waits on pod/pvc/svc/deployment readiness) (default 300)
@@ -233,9 +237,12 @@ helmDefaults:
deleteWait: false
# Timeout is the time in seconds to wait for helmfile destroy/delete (default 300)
deleteTimeout: 300
- # suppressOutputLineRegex is a list of regex patterns to suppress output lines from helm diff (default []), available in helmfile v0.162.0
+ # suppressOutputLineRegex is a list of regex patterns to suppress output lines from helm diff (default []), available in helmfile v0.162.0
suppressOutputLineRegex:
- "version"
+ # syncReleaseLabels is a list of labels to be added to the release when syncing.
+ syncReleaseLabels: false
+
# these labels will be applied to all releases in a Helmfile. Useful in templating if you have a helmfile per environment or customer and don't want to copy the same label to each release
commonLabels:
@@ -282,6 +289,16 @@ releases:
domain: {{ requiredEnv "PLATFORM_ID" }}.my-domain.com
scheme: {{ env "SCHEME" | default "https" }}
# Use `values` whenever possible!
+ # `setString` translates to helm's `--set-string key=val`
+ setString:
+ # set a single array value in an array, translates to --set-string bar[0]={1,2}
+ - name: bar[0]
+ values:
+ - 1
+ - 2
+ # set a templated value
+ - name: namespace
+ value: {{ .Namespace }}
# `set` translates to helm's `--set key=val`, that is known to suffer from type issues like https://github.com/roboll/helmfile/issues/608
set:
# single value loaded from a local file, translates to --set-file foo.config=path/to/file
@@ -298,14 +315,18 @@ releases:
# will attempt to decrypt it using helm-secrets plugin
secrets:
- vault_secret.yaml
- # Override helmDefaults options for verify, wait, waitForJobs, timeout, recreatePods and force.
+ # Override helmDefaults options for verify, wait, waitForJobs, timeout, recreatePods, force and reuseValues.
verify: true
keyring: path/to/keyring.gpg
+ # --skip-schema-validation flag to helm 'install', 'upgrade' and 'lint', starts with helm 3.16.0 (default false)
+ skipSchemaValidation: false
wait: true
+ waitRetries: 3
waitForJobs: true
timeout: 60
recreatePods: true
force: false
+ reuseValues: false
# set `false` to uninstall this release on sync. (default true)
installed: true
# restores previous state in case of failed release (default false)
@@ -349,9 +370,11 @@ releases:
plainHttp: false
# suppressDiff skip the helm diff output. Useful for charts which produces large not helpful diff, default: false
suppressDiff: false
- # suppressOutputLineRegex is a list of regex patterns to suppress output lines from helm diff (default []), available in helmfile v0.162.0
+ # suppressOutputLineRegex is a list of regex patterns to suppress output lines from helm diff (default []), available in helmfile v0.162.0
suppressOutputLineRegex:
- "version"
+ # syncReleaseLabels is a list of labels to be added to the release when syncing.
+ syncReleaseLabels: false
# Local chart example
@@ -542,15 +565,15 @@ Helmfile uses some OS environment variables to override default behaviour:
* `HELMFILE_DISABLE_INSECURE_FEATURES` - disable insecure features, expecting `true` lower case
* `HELMFILE_DISABLE_RUNNER_UNIQUE_ID` - disable unique logging ID, expecting any non-empty value
* `HELMFILE_SKIP_INSECURE_TEMPLATE_FUNCTIONS` - disable insecure template functions, expecting `true` lower case
-* `HELMFILE_USE_HELM_STATUS_TO_CHECK_RELEASE_EXISTENCE` - expecting non-empty value to use `helm status` to check release existence, instead of `helm list` which is the default behaviour
+* `HELMFILE_USE_HELM_STATUS_TO_CHECK_RELEASE_EXISTENCE` - expecting non-empty value to use `helm status` to check release existence, instead of `helm list` which is the default behaviour
* `HELMFILE_EXPERIMENTAL` - enable experimental features, expecting `true` lower case
* `HELMFILE_ENVIRONMENT` - specify [Helmfile environment](https://helmfile.readthedocs.io/en/latest/#environment), it has lower priority than CLI argument `--environment`
* `HELMFILE_TEMPDIR` - specify directory to store temporary files
* `HELMFILE_UPGRADE_NOTICE_DISABLED` - expecting any non-empty value to skip the check for the latest version of Helmfile in [helmfile version](https://helmfile.readthedocs.io/en/latest/#version)
-* `HELMFILE_V1MODE` - Helmfile v0.x behaves like v1.x with `true`, Helmfile v1.x behaves like v0.x with `false` as value
* `HELMFILE_GOCCY_GOYAML` - use *goccy/go-yaml* instead of *gopkg.in/yaml.v2*. It's `false` by default in Helmfile v0.x and `true` by default for Helmfile v1.x.
* `HELMFILE_CACHE_HOME` - specify directory to store cached files for remote operations
-* `HELMFILE_FILE_PATH` - specify the path to the helmfile.yaml file
+* `HELMFILE_FILE_PATH` - specify the path to the helmfile.yaml file
+* `HELMFILE_INTERACTIVE` - enable interactive mode, expecting `true` lower case. The same as `--interactive` CLI flag
## CLI Reference
@@ -674,7 +697,7 @@ The `helmfile destroy` sub-command uninstalls and purges all the releases define
`helmfile --interactive destroy` instructs Helmfile to request your confirmation before actually deleting releases.
`destroy` basically runs `helm uninstall --purge` on all the targeted releases. If you don't want purging, use `helmfile delete` instead.
-If `--skip-charts` flag is not set, destory would prepare all releases, by fetching charts and templating them.
+If `--skip-charts` flag is not set, destroy would prepare all releases, by fetching charts and templating them.
### delete (DEPRECATED)
@@ -683,7 +706,7 @@ The `helmfile delete` sub-command deletes all the releases defined in the manife
`helmfile --interactive delete` instructs Helmfile to request your confirmation before actually deleting releases.
Note that `delete` doesn't purge releases. So `helmfile delete && helmfile sync` results in sync failed due to that releases names are not deleted but preserved for future references. If you really want to remove releases for reuse, add `--purge` flag to run it like `helmfile delete --purge`.
-If `--skip-charts` flag is not set, destory would prepare all releases, by fetching charts and templating them.
+If `--skip-charts` flag is not set, destroy would prepare all releases, by fetching charts and templating them.
### secrets
@@ -747,7 +770,7 @@ For additional context, take a look at [paths examples](paths.md).
A selector can be used to only target a subset of releases when running Helmfile. This is useful for large helmfiles with releases that are logically grouped together.
-Labels are simple key value pairs that are an optional field of the release spec. When selecting by label, the search can be inverted. `tier!=backend` would match all releases that do NOT have the `tier: backend` label. `tier=fronted` would only match releases with the `tier: frontend` label.
+Labels are simple key value pairs that are an optional field of the release spec. When selecting by label, the search can be inverted. `tier!=backend` would match all releases that do NOT have the `tier: backend` label. `tier=frontend` would only match releases with the `tier: frontend` label.
Multiple labels can be specified using `,` as a separator. A release must match all selectors in order to be selected for the final helm command.
@@ -920,7 +943,7 @@ releases:
```
### Environment Values
-Helmfile supports 3 values languages :
+Helmfile supports 3 values languages :
- Straight yaml
- Go templates to generate straight yaml
- HCL
@@ -1008,7 +1031,7 @@ HCL values supports interpolations and sharing values across files
* Helmfile hcl `values` are referenced using the `hv` accessor.
* Helmfile hcl `locals` are referenced using the `local` accessor.
* Duplicated variables across .hcl `values` blocks are forbidden (An error will pop up specifying where are the duplicates)
-* All cty [standard library functions](`https://pkg.go.dev/github.com/zclconf/go-cty@v1.14.3/cty/function/stdlib`) are available and custom functions could be created in the future
+* All cty [standard library functions](`https://pkg.go.dev/github.com/zclconf/go-cty@v1.14.3/cty/function/stdlib`) are available and custom functions could be created in the future
Consider the following example :
@@ -1346,7 +1369,7 @@ helmfiles:
- name=prometheus
- tier=frontend
- path: apps/b-helmfile.yaml # no selector, so all releases are used
-selectors: []
+ selectors: []
- path: apps/c-helmfile.yaml # parent selector to be used or cli selector for the initial helmfile
selectorsInherited: true
```
@@ -1657,6 +1680,9 @@ Use it when you're running `helmfile` manually on your local machine or a kind o
For your local use-case, aliasing it like `alias hi='helmfile --interactive'` would be convenient.
+Another way to use it is to set the environment variable `HELMFILE_INTERACTIVE=true` to enable the interactive mode by default.
+Anything other than `true` will disable the interactive mode. The precedence has the `--interactive` flag.
+
## Running Helmfile without an Internet connection
Once you download all required charts into your machine, you can run `helmfile sync --skip-deps` to deploy your apps.
diff --git a/docs/proposals/towards-1.0.md b/docs/proposals/towards-1.0.md
index 31009f88..2c6e15de 100644
--- a/docs/proposals/towards-1.0.md
+++ b/docs/proposals/towards-1.0.md
@@ -28,6 +28,7 @@ We also provide the alternative way in the latest v0.x release before v1.0. That
4. [Remove `HELMFILE_SKIP_INSECURE_TEMPLATE_FUNCTIONS` in favor of `HELMFILE_DISABLE_INSECURE_FEATURES`](#remove-helmfile_skip_insecure_template_functions-in-favor-of-helmfile_disable_insecure_features)
5. [The long deprecated `charts.yaml` has been finally removed](#the-long-deprecated-chartsyaml-has-been-finally-removed)
6. [List experimental features](#list-experimental-features)
+7. [Remove charts and delete sub-commands](#remove-charts-and-delete-subcommands)
### Forbid the use of `environments` and `releases` within a single helmfile.yaml.gotmpl part
@@ -110,6 +111,9 @@ Why now?
In Helmfile v0.x, all features considered experimental as we follow semver. However, we "ended up" preserving backward-compatibility within v0 and between v0 and v1 "by chance". This doesn't mean anything
introduced in v0 is stable. For example, we might have some features implemented in a very later stage of v0 that are not stable yet. We should mark them as experimental, or we can't fix them in a backward-incompatible way in v1.x. That's why we need to list experimental features now.
+### remove-charts-and-delete-subcommands
+Now we remove `helmfile charts` and `helmfile delete` subcommands. you can use `helmfile destroy` and `helmfile sync` instead.
+
## After 1.0
We won't add any backward-incompatible changes while in 1.x, as long as it's inevitable to fix unseen important bug(s).
diff --git a/docs/remote-secrets.md b/docs/remote-secrets.md
index abef656a..0b75b8ef 100644
--- a/docs/remote-secrets.md
+++ b/docs/remote-secrets.md
@@ -17,8 +17,8 @@ To fetch single key from remote secret storage you can use `fetchSecretValue` te
repositories:
- name: stable
- url: https://kubernetes-charts.storage.googleapis.com
-
+ url: https://charts.helm.sh/stable
+---
environments:
default:
values:
diff --git a/docs/requirements.txt b/docs/requirements.txt
index ebcdeb07..6f1e984f 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -1,10 +1,10 @@
-Babel==2.9.1
+Babel==2.17.0
click==8.1.2
ghp-import==2.0.2
gitdb==4.0.9
GitPython==3.1.41
importlib-metadata==4.11.3
-Jinja2==3.1.4
+Jinja2==3.1.6
Markdown==3.6
MarkupSafe==2.1.1
mergedeep==1.3.4
diff --git a/go.mod b/go.mod
index 1e6ea8e0..93bae27f 100644
--- a/go.mod
+++ b/go.mod
@@ -1,45 +1,43 @@
module github.com/helmfile/helmfile
-go 1.22.6
+go 1.24.2
require (
dario.cat/mergo v1.0.1
- github.com/Masterminds/semver/v3 v3.3.0
+ github.com/Masterminds/semver/v3 v3.3.1
github.com/Masterminds/sprig/v3 v3.3.0
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
github.com/go-test/deep v1.1.1
- github.com/goccy/go-yaml v1.12.0
+ github.com/goccy/go-yaml v1.17.1
github.com/golang/mock v1.6.0
- github.com/google/go-cmp v0.6.0
+ github.com/google/go-cmp v0.7.0
github.com/gosuri/uitable v0.0.4
- github.com/hashicorp/go-getter v1.7.6
- github.com/hashicorp/hcl/v2 v2.22.0
- github.com/helmfile/chartify v0.20.2
- github.com/helmfile/vals v0.37.5
- github.com/spf13/cobra v1.8.1
- github.com/spf13/pflag v1.0.5
- github.com/stretchr/testify v1.9.0
+ github.com/hashicorp/go-getter v1.7.8
+ github.com/hashicorp/hcl/v2 v2.23.0
+ github.com/helmfile/chartify v0.22.0
+ github.com/helmfile/vals v0.40.1
+ github.com/spf13/cobra v1.9.1
+ github.com/spf13/pflag v1.0.6
+ github.com/stretchr/testify v1.10.0
github.com/tatsushid/go-prettytable v0.0.0-20141013043238-ed2d14c29939
github.com/tj/assert v0.0.3
github.com/variantdev/dag v1.1.0
- github.com/zclconf/go-cty v1.15.0
- github.com/zclconf/go-cty-yaml v1.0.3
+ github.com/zclconf/go-cty v1.16.2
+ github.com/zclconf/go-cty-yaml v1.1.0
go.szostok.io/version v1.2.0
go.uber.org/zap v1.27.0
- golang.org/x/sync v0.8.0
- golang.org/x/term v0.24.0
+ golang.org/x/sync v0.13.0
+ golang.org/x/term v0.31.0
gopkg.in/yaml.v2 v2.4.0
- helm.sh/helm/v3 v3.16.1
- k8s.io/apimachinery v0.31.1
+ helm.sh/helm/v3 v3.17.3
+ k8s.io/apimachinery v0.33.0
)
-replace gopkg.in/yaml.v3 => github.com/colega/go-yaml-yaml v0.0.0-20220720070545-aaba007ebc22
-
require (
- cloud.google.com/go v0.115.1 // indirect
- cloud.google.com/go/iam v1.2.0 // indirect
- cloud.google.com/go/storage v1.43.0 // indirect
- filippo.io/age v1.2.0 // indirect
+ cloud.google.com/go v0.116.0 // indirect
+ cloud.google.com/go/iam v1.2.2 // indirect
+ cloud.google.com/go/storage v1.50.0 // indirect
+ filippo.io/age v1.2.1 // indirect
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect
github.com/Azure/go-autorest/autorest/azure/cli v0.4.6 // indirect
@@ -47,37 +45,37 @@ require (
github.com/Azure/go-autorest/logger v0.2.1 // indirect
github.com/Azure/go-autorest/tracing v0.6.0 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
- github.com/a8m/envsubst v1.4.2 // indirect
- github.com/aws/aws-sdk-go v1.55.5
+ github.com/a8m/envsubst v1.4.3 // indirect
+ github.com/aws/aws-sdk-go v1.55.7
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
github.com/blang/semver v3.5.1+incompatible // indirect
github.com/dimchansky/utfbom v1.1.1 // indirect
- github.com/fatih/color v1.17.0 // indirect
- github.com/fujiwara/tfstate-lookup v1.4.1 // indirect
- github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
+ github.com/fatih/color v1.18.0
+ github.com/fujiwara/tfstate-lookup v1.5.0 // indirect
+ github.com/golang-jwt/jwt/v4 v4.5.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/go-querystring v1.1.0 // indirect
github.com/google/uuid v1.6.0 // indirect
- github.com/googleapis/gax-go/v2 v2.13.0 // indirect
+ github.com/googleapis/gax-go/v2 v2.14.1 // indirect
github.com/goware/prefixer v0.0.0-20160118172347-395022866408 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
github.com/hashicorp/go-safetemp v1.0.0 // indirect
- github.com/hashicorp/go-slug v0.15.0 // indirect
- github.com/hashicorp/go-sockaddr v1.0.6 // indirect
+ github.com/hashicorp/go-slug v0.16.3 // indirect
+ github.com/hashicorp/go-sockaddr v1.0.7 // indirect
github.com/hashicorp/go-tfe v1.56.0 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/hashicorp/jsonapi v1.3.1 // indirect
- github.com/hashicorp/vault/api v1.14.0 // indirect
+ github.com/hashicorp/vault/api v1.16.0 // indirect
github.com/huandu/xstrings v1.5.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/itchyny/gojq v0.12.16 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
- github.com/klauspost/compress v1.16.0 // indirect
+ github.com/klauspost/compress v1.16.7 // indirect
github.com/lib/pq v1.10.9 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
@@ -87,7 +85,7 @@ require (
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
- github.com/otiai10/copy v1.14.0 // indirect
+ github.com/otiai10/copy v1.14.1 // indirect
github.com/pkg/errors v0.9.1
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/ryanuber/go-glob v1.0.0 // indirect
@@ -97,101 +95,116 @@ require (
github.com/ulikunitz/xz v0.5.10 // indirect
go.opencensus.io v0.24.0 // indirect
go.uber.org/atomic v1.9.0 // indirect
- golang.org/x/net v0.28.0 // indirect
- golang.org/x/oauth2 v0.23.0 // indirect
- golang.org/x/sys v0.25.0 // indirect
- golang.org/x/text v0.17.0 // indirect
- golang.org/x/time v0.6.0 // indirect
- golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
- google.golang.org/api v0.196.0 // indirect
- google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect
- google.golang.org/grpc v1.66.0 // indirect
- google.golang.org/protobuf v1.34.2 // indirect
+ golang.org/x/net v0.38.0 // indirect
+ golang.org/x/oauth2 v0.28.0 // indirect
+ golang.org/x/sys v0.32.0 // indirect
+ golang.org/x/text v0.23.0 // indirect
+ golang.org/x/time v0.9.0 // indirect
+ google.golang.org/api v0.215.0 // indirect
+ google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect
+ google.golang.org/grpc v1.68.0 // indirect
+ google.golang.org/protobuf v1.36.5 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
- sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
+ sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
sigs.k8s.io/yaml v1.4.0 // indirect
)
require (
- cloud.google.com/go/auth v0.9.3 // indirect
- cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect
- cloud.google.com/go/compute/metadata v0.5.0 // indirect
- cloud.google.com/go/kms v1.19.0 // indirect
- cloud.google.com/go/longrunning v0.6.0 // indirect
- cloud.google.com/go/secretmanager v1.14.0 // indirect
+ al.essio.dev/pkg/shellescape v1.5.1 // indirect
+ cel.dev/expr v0.18.0 // indirect
+ cloud.google.com/go/auth v0.13.0 // indirect
+ cloud.google.com/go/auth/oauth2adapt v0.2.6 // indirect
+ cloud.google.com/go/compute/metadata v0.6.0 // indirect
+ cloud.google.com/go/kms v1.20.5 // indirect
+ cloud.google.com/go/longrunning v0.6.2 // indirect
+ cloud.google.com/go/monitoring v1.21.2 // indirect
+ cloud.google.com/go/secretmanager v1.14.3 // indirect
github.com/1Password/connect-sdk-go v1.5.3 // indirect
- github.com/1password/onepassword-sdk-go v0.1.1 // indirect
+ github.com/1password/onepassword-sdk-go v0.2.1 // indirect
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect
github.com/AlecAivazis/survey/v2 v2.3.6 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 // indirect
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.3.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.1.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.1.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.1 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.3.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 // indirect
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0 // indirect
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
- github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect
+ github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 // indirect
github.com/DopplerHQ/cli v0.5.11-0.20230908185655-7aef4713e1a4 // indirect
- github.com/Microsoft/hcsshim v0.11.4 // indirect
- github.com/ProtonMail/go-crypto v1.1.0-alpha.3-proton // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 // indirect
+ github.com/MakeNowJust/heredoc v1.0.0 // indirect
+ github.com/Masterminds/squirrel v1.5.4 // indirect
+ github.com/ProtonMail/go-crypto v1.1.3 // indirect
github.com/agext/levenshtein v1.2.3 // indirect
- github.com/alessio/shellescape v1.4.1 // indirect
- github.com/antchfx/jsonquery v1.3.5 // indirect
- github.com/antchfx/xpath v1.3.1 // indirect
+ github.com/antchfx/jsonquery v1.3.6 // indirect
+ github.com/antchfx/xpath v1.3.3 // indirect
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de // indirect
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
github.com/atotto/clipboard v0.1.4 // indirect
- github.com/aws/aws-sdk-go-v2 v1.30.0 // indirect
- github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect
- github.com/aws/aws-sdk-go-v2/config v1.27.21 // indirect
- github.com/aws/aws-sdk-go-v2/credentials v1.17.21 // indirect
- github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.8 // indirect
- github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.1 // indirect
- github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.12 // indirect
- github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.12 // indirect
- github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
- github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.12 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.14 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.14 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.12 // indirect
- github.com/aws/aws-sdk-go-v2/service/kms v1.34.1 // indirect
- github.com/aws/aws-sdk-go-v2/service/s3 v1.56.1 // indirect
- github.com/aws/aws-sdk-go-v2/service/sso v1.21.1 // indirect
- github.com/aws/aws-sdk-go-v2/service/ssooidc v1.25.1 // indirect
- github.com/aws/aws-sdk-go-v2/service/sts v1.29.1 // indirect
- github.com/aws/smithy-go v1.20.2 // indirect
+ github.com/aws/aws-sdk-go-v2 v1.32.6 // indirect
+ github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 // indirect
+ github.com/aws/aws-sdk-go-v2/config v1.28.6 // indirect
+ github.com/aws/aws-sdk-go-v2/credentials v1.17.47 // indirect
+ github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 // indirect
+ github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.42 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6 // indirect
+ github.com/aws/aws-sdk-go-v2/service/kms v1.37.7 // indirect
+ github.com/aws/aws-sdk-go-v2/service/s3 v1.70.0 // indirect
+ github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 // indirect
+ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 // indirect
+ github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 // indirect
+ github.com/aws/smithy-go v1.22.1 // indirect
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
- github.com/cenkalti/backoff/v3 v3.2.2 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
- github.com/cloudflare/circl v1.3.9 // indirect
- github.com/containerd/containerd v1.7.12 // indirect
+ github.com/chai2010/gettext-go v1.0.2 // indirect
+ github.com/cloudflare/circl v1.4.0 // indirect
+ github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect
+ github.com/containerd/containerd v1.7.27 // indirect
+ github.com/containerd/errdefs v0.3.0 // indirect
github.com/containerd/log v0.1.0 // indirect
- github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
- github.com/cyberark/conjur-api-go v0.12.4 // indirect
- github.com/danieljoos/wincred v1.1.2 // indirect
- github.com/distribution/reference v0.5.0 // indirect
- github.com/docker/cli v27.0.1+incompatible // indirect
+ github.com/containerd/platforms v0.2.1 // indirect
+ github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect
+ github.com/cyberark/conjur-api-go v0.12.14 // indirect
+ github.com/danieljoos/wincred v1.2.2 // indirect
+ github.com/distribution/reference v0.6.0 // indirect
+ github.com/docker/cli v27.3.1+incompatible // indirect
github.com/docker/distribution v2.8.3+incompatible // indirect
- github.com/docker/docker v27.1.1+incompatible // indirect
+ github.com/docker/docker v27.3.1+incompatible // indirect
github.com/docker/docker-credential-helpers v0.7.0 // indirect
github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-metrics v0.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/emicklei/go-restful/v3 v3.11.0 // indirect
+ github.com/envoyproxy/go-control-plane v0.13.1 // indirect
+ github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect
github.com/evanphx/json-patch v5.9.0+incompatible // indirect
- github.com/extism/go-sdk v1.3.1 // indirect
+ github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect
+ github.com/extism/go-sdk v1.7.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
github.com/getsops/gopgagent v0.0.0-20240527072608-0c14999532fe // indirect
- github.com/getsops/sops/v3 v3.9.0 // indirect
+ github.com/getsops/sops/v3 v3.9.2 // indirect
github.com/go-errors/errors v1.4.2 // indirect
- github.com/go-jose/go-jose/v4 v4.0.2 // indirect
+ github.com/go-gorp/gorp/v3 v3.1.0 // indirect
+ github.com/go-jose/go-jose/v4 v4.0.5 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-openapi/analysis v0.23.0 // indirect
@@ -202,96 +215,112 @@ require (
github.com/go-openapi/runtime v0.28.0 // indirect
github.com/go-openapi/spec v0.21.0 // indirect
github.com/go-openapi/strfmt v0.23.0 // indirect
- github.com/go-openapi/swag v0.23.0 // indirect
+ github.com/go-openapi/swag v0.23.1 // indirect
github.com/go-openapi/validate v0.24.0 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/godbus/dbus/v5 v5.1.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang-jwt/jwt/v5 v5.2.1 // indirect
+ github.com/golang-jwt/jwt/v5 v5.2.2 // indirect
github.com/google/btree v1.0.1 // indirect
- github.com/google/gnostic-models v0.6.8 // indirect
+ github.com/google/gnostic-models v0.6.9 // indirect
github.com/google/go-jsonnet v0.20.0 // indirect
- github.com/google/gofuzz v1.2.0 // indirect
github.com/google/s2a-go v0.1.8 // indirect
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
- github.com/googleapis/enterprise-certificate-proxy v0.3.3 // indirect
+ github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect
github.com/gorilla/mux v1.8.0 // indirect
- github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect
+ github.com/gorilla/websocket v1.5.0 // indirect
+ github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8 // indirect
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
- github.com/hashicorp/hcp-sdk-go v0.111.0 // indirect
+ github.com/hashicorp/hcp-sdk-go v0.139.0 // indirect
github.com/hokaccha/go-prettyjson v0.0.0-20211117102719-0474bc63780f // indirect
- github.com/imdario/mergo v0.3.16 // indirect
+ github.com/ianlancetaylor/demangle v0.0.0-20240805132620-81f5be970eca // indirect
github.com/itchyny/timefmt-go v0.1.6 // indirect
+ github.com/jmoiron/sqlx v1.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
+ github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
+ github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
- github.com/mailru/easyjson v0.7.7 // indirect
+ github.com/mailru/easyjson v0.9.0 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
- github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect
github.com/moby/locker v1.0.1 // indirect
+ github.com/moby/spdystream v0.5.0 // indirect
github.com/moby/term v0.5.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect
github.com/muesli/termenv v0.15.1 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
+ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
github.com/oklog/ulid v1.3.1 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.0 // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
+ github.com/otiai10/mint v1.6.3 // indirect
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
+ github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
github.com/prometheus/client_golang v1.19.1 // indirect
github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/common v0.55.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
+ github.com/rubenv/sql-migrate v1.7.1 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 // indirect
- github.com/tetratelabs/wazero v1.7.3 // indirect
- github.com/tidwall/gjson v1.17.3 // indirect
+ github.com/tetratelabs/wabin v0.0.0-20230304001439-f6f874872834 // indirect
+ github.com/tetratelabs/wazero v1.8.2 // indirect
+ github.com/tidwall/gjson v1.18.0 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.0 // indirect
github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
- github.com/urfave/cli v1.22.15 // indirect
+ github.com/urfave/cli v1.22.16 // indirect
github.com/x448/float16 v0.8.4 // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
github.com/xlab/treeprint v1.2.0 // indirect
- github.com/zalando/go-keyring v0.2.3-0.20230503081219-17db2e5354bd // indirect
+ github.com/zalando/go-keyring v0.2.6 // indirect
go.mongodb.org/mongo-driver v1.14.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect
- go.opentelemetry.io/otel v1.29.0 // indirect
- go.opentelemetry.io/otel/metric v1.29.0 // indirect
- go.opentelemetry.io/otel/trace v1.29.0 // indirect
- go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect
+ go.opentelemetry.io/contrib/detectors/gcp v1.29.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 // indirect
+ go.opentelemetry.io/otel v1.30.0 // indirect
+ go.opentelemetry.io/otel/metric v1.30.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.29.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.29.0 // indirect
+ go.opentelemetry.io/otel/trace v1.30.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.3.1 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/crypto v0.26.0 // indirect
- golang.org/x/mod v0.18.0 // indirect
- golang.org/x/tools v0.22.0 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
+ golang.org/x/crypto v0.36.0 // indirect
+ golang.org/x/mod v0.21.0 // indirect
+ golang.org/x/tools v0.26.0 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8 // indirect
+ google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a // indirect
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
gopkg.in/gookit/color.v1 v1.1.6 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
- k8s.io/api v0.31.0 // indirect
- k8s.io/cli-runtime v0.31.0 // indirect
- k8s.io/client-go v0.31.0 // indirect
+ k8s.io/api v0.32.3 // indirect
+ k8s.io/apiextensions-apiserver v0.32.2 // indirect
+ k8s.io/cli-runtime v0.32.2 // indirect
+ k8s.io/client-go v0.32.3 // indirect
+ k8s.io/component-base v0.32.2 // indirect
k8s.io/klog/v2 v2.130.1 // indirect
- k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
- k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect
+ k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect
+ k8s.io/kubectl v0.32.2 // indirect
+ k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
oras.land/oras-go v1.2.5 // indirect
- sigs.k8s.io/kustomize/api v0.17.3 // indirect
- sigs.k8s.io/kustomize/kyaml v0.17.2 // indirect
- sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
+ sigs.k8s.io/kustomize/api v0.18.0 // indirect
+ sigs.k8s.io/kustomize/kyaml v0.18.1 // indirect
+ sigs.k8s.io/randfill v1.0.0 // indirect
+ sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect
)
diff --git a/go.sum b/go.sum
index 280b3700..8bbdcf0f 100644
--- a/go.sum
+++ b/go.sum
@@ -1,10 +1,15 @@
+al.essio.dev/pkg/shellescape v1.5.1 h1:86HrALUujYS/h+GtqoB26SBEdkWfmMI6FubjXlsXyho=
+al.essio.dev/pkg/shellescape v1.5.1/go.mod h1:6sIqp7X2P6mThCQ7twERpZTuigpr6KbZWtls1U8I890=
c2sp.org/CCTV/age v0.0.0-20240306222714-3ec4d716e805 h1:u2qwJeEvnypw+OCPUHmoZE3IqwfuN5kgDfo5MLzpNM0=
c2sp.org/CCTV/age v0.0.0-20240306222714-3ec4d716e805/go.mod h1:FomMrUJ2Lxt5jCLmZkG3FHa72zUprnhd3v/Z18Snm4w=
+cel.dev/expr v0.18.0 h1:CJ6drgk+Hf96lkLikr4rFf19WrU0BOWEihyZnI2TAzo=
+cel.dev/expr v0.18.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
@@ -17,6 +22,7 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
+cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
@@ -28,32 +34,96 @@ cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+Y
cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4=
cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc=
cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA=
+cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U=
cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A=
cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc=
cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU=
cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA=
-cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ=
-cloud.google.com/go v0.115.1/go.mod h1:DuujITeaufu3gL68/lOFIirVNJwQeyf5UXyi+Wbgknc=
+cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM=
+cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I=
+cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY=
+cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE=
+cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U=
+cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4=
+cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw=
+cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E=
+cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o=
+cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE=
+cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM=
+cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ=
cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw=
cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY=
+cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg=
+cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ=
+cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k=
+cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw=
cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI=
cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4=
+cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M=
+cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE=
+cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE=
+cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk=
+cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc=
+cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8=
+cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc=
+cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04=
+cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8=
+cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY=
+cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM=
+cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc=
+cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU=
+cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI=
+cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8=
+cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno=
+cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak=
+cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84=
+cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A=
+cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E=
cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4=
cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0=
+cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY=
+cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k=
cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ=
cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk=
+cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0=
+cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc=
+cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI=
+cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ=
+cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI=
+cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08=
cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o=
cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s=
cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0=
+cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ=
+cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY=
+cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo=
+cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg=
+cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw=
cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY=
cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw=
cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI=
-cloud.google.com/go/auth v0.9.3 h1:VOEUIAADkkLtyfr3BLa3R8Ed/j6w1jTBmARx+wb5w5U=
-cloud.google.com/go/auth v0.9.3/go.mod h1:7z6VY+7h3KUdRov5F1i8NDP5ZzWKYmEPO842BgCsmTk=
-cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY=
-cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc=
+cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo=
+cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0=
+cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E=
+cloud.google.com/go/auth v0.13.0 h1:8Fu8TZy167JkW8Tj3q7dIkr2v4cndv41ouecJx0PAHs=
+cloud.google.com/go/auth v0.13.0/go.mod h1:COOjD9gwfKNKz+IIduatIhYJQIc0mG3H102r/EMxX6Q=
+cloud.google.com/go/auth/oauth2adapt v0.2.6 h1:V6a6XDu2lTwPZWOawrAa9HUK+DB2zfJyTuciBG5hFkU=
+cloud.google.com/go/auth/oauth2adapt v0.2.6/go.mod h1:AlmsELtlEBnaNTL7jCj8VQFLy6mbZv0s4Q7NGBeQ5E8=
cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0=
cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8=
+cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8=
+cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM=
+cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU=
+cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc=
+cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI=
+cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss=
+cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE=
+cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE=
+cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g=
+cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4=
+cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8=
+cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM=
+cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
@@ -61,12 +131,44 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA=
+cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw=
+cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc=
+cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E=
+cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac=
+cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q=
+cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU=
cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY=
cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s=
+cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI=
+cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y=
+cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss=
+cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc=
cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM=
cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI=
+cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0=
+cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk=
+cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q=
+cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg=
+cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590=
+cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8=
+cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk=
+cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk=
+cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE=
+cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU=
+cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U=
+cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA=
+cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M=
+cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg=
+cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s=
+cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM=
+cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk=
+cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA=
cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY=
cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI=
+cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4=
+cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI=
+cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y=
+cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs=
cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=
cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM=
cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M=
@@ -74,143 +176,475 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz
cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU=
cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U=
cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU=
-cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY=
-cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY=
+cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU=
+cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU=
+cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE=
+cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo=
+cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA=
+cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs=
+cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU=
+cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE=
+cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU=
+cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
+cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM=
+cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
+cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I=
+cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
+cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY=
+cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck=
+cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w=
+cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg=
+cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo=
+cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4=
+cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM=
+cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA=
cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I=
cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4=
+cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI=
+cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s=
cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0=
cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs=
cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc=
+cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE=
+cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM=
+cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M=
+cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0=
+cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8=
cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM=
cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ=
+cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE=
cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo=
cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE=
+cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0=
+cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA=
+cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE=
+cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38=
+cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w=
+cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8=
cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I=
cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ=
+cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM=
+cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA=
+cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A=
+cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ=
+cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs=
+cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s=
+cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI=
+cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4=
cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo=
cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA=
+cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
+cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM=
+cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c=
cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo=
cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ=
+cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g=
+cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4=
+cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs=
+cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww=
+cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c=
+cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s=
+cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI=
+cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ=
cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4=
cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0=
cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8=
+cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek=
+cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0=
+cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM=
+cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4=
+cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE=
+cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM=
+cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q=
+cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4=
cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU=
cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU=
+cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k=
+cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4=
+cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM=
+cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs=
cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y=
cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg=
+cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE=
cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk=
cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w=
+cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc=
+cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY=
+cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU=
+cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI=
+cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8=
+cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M=
+cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc=
+cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw=
+cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw=
+cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY=
+cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w=
+cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI=
+cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs=
+cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg=
+cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE=
cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk=
cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg=
+cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY=
+cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08=
+cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw=
+cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA=
+cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c=
cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM=
cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA=
+cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w=
+cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM=
+cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0=
+cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60=
+cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo=
+cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg=
cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o=
cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A=
+cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw=
cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0=
cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0=
+cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E=
+cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw=
+cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA=
+cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI=
+cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y=
cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc=
+cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM=
+cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o=
+cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo=
+cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c=
cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY=
cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc=
-cloud.google.com/go/iam v1.2.0 h1:kZKMKVNk/IsSSc/udOb83K0hL/Yh/Gcqpz+oAkoIFN8=
-cloud.google.com/go/iam v1.2.0/go.mod h1:zITGuWgsLZxd8OwAlX+eMFgZDXzBm7icj1PVTYG766Q=
-cloud.google.com/go/kms v1.19.0 h1:x0OVJDl6UH1BSX4THKlMfdcFWoE4ruh90ZHuilZekrU=
-cloud.google.com/go/kms v1.19.0/go.mod h1:e4imokuPJUc17Trz2s6lEXFDt8bgDmvpVynH39bdrHM=
+cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc=
+cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg=
+cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE=
+cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY=
+cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY=
+cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0=
+cloud.google.com/go/iam v1.2.2 h1:ozUSofHUGf/F4tCNy/mu9tHLTaxZFLOUiKzjcgWHGIA=
+cloud.google.com/go/iam v1.2.2/go.mod h1:0Ys8ccaZHdI1dEUilwzqng/6ps2YB6vRsjIe00/+6JY=
+cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc=
+cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A=
+cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk=
+cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo=
+cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74=
+cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM=
+cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY=
+cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4=
+cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs=
+cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g=
+cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o=
+cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE=
+cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA=
+cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg=
+cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0=
+cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg=
+cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w=
+cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24=
+cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI=
+cloud.google.com/go/kms v1.20.5 h1:aQQ8esAIVZ1atdJRxihhdxGQ64/zEbJoJnCz/ydSmKg=
+cloud.google.com/go/kms v1.20.5/go.mod h1:C5A8M1sv2YWYy1AE6iSrnddSG9lRGdJq5XEdBy28Lmw=
cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic=
cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI=
+cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE=
+cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8=
+cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY=
cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8=
cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08=
-cloud.google.com/go/longrunning v0.6.0 h1:mM1ZmaNsQsnb+5n1DNPeL0KwQd9jQRqSqSDEkBZr+aI=
-cloud.google.com/go/longrunning v0.6.0/go.mod h1:uHzSZqW89h7/pasCWNYdUpwGz3PcVWhrWupreVPYLts=
+cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo=
+cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw=
+cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M=
+cloud.google.com/go/logging v1.12.0 h1:ex1igYcGFd4S/RZWOCU51StlIEuey5bjqwH9ZYjHibk=
+cloud.google.com/go/logging v1.12.0/go.mod h1:wwYBt5HlYP1InnrtYI0wtwttpVU1rifnMT7RejksUAM=
+cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE=
+cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc=
+cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo=
+cloud.google.com/go/longrunning v0.6.2 h1:xjDfh1pQcWPEvnfjZmwjKQEcHnpz6lHjfy7Fo0MK+hc=
+cloud.google.com/go/longrunning v0.6.2/go.mod h1:k/vIs83RN4bE3YCswdXC5PFfWVILjm3hpEUlSko4PiI=
+cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE=
+cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM=
+cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA=
+cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI=
+cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw=
+cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY=
cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4=
cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w=
+cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I=
cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE=
cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM=
+cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA=
+cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY=
+cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM=
cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY=
cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s=
+cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8=
+cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI=
+cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo=
+cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk=
+cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4=
+cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w=
+cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw=
+cloud.google.com/go/monitoring v1.21.2 h1:FChwVtClH19E7pJ+e0xUhJPGksctZNVOk2UhMmblmdU=
+cloud.google.com/go/monitoring v1.21.2/go.mod h1:hS3pXvaG8KgWTSz+dAdyzPrGUYmi2Q+WFX8g2hqVEZU=
cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA=
cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o=
+cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM=
+cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8=
+cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E=
+cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM=
+cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8=
+cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4=
+cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY=
cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ=
cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU=
+cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k=
+cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU=
cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY=
cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34=
+cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA=
+cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0=
+cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE=
+cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ=
+cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4=
+cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs=
+cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI=
+cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA=
+cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk=
+cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ=
+cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE=
+cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc=
+cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc=
cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs=
cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg=
+cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo=
+cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw=
+cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw=
cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E=
cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU=
+cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70=
+cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo=
+cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs=
cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0=
cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA=
+cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk=
+cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg=
+cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE=
+cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw=
+cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc=
cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0=
cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI=
+cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg=
+cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
+cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI=
+cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0=
+cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8=
+cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4=
+cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg=
+cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k=
+cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM=
cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4=
cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o=
cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk=
cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo=
+cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE=
+cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U=
+cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA=
+cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c=
cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg=
cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4=
+cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac=
cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg=
cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c=
+cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs=
+cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70=
+cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ=
cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y=
cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A=
+cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA=
+cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM=
+cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ=
+cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA=
+cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0=
+cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots=
+cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo=
+cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI=
+cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU=
+cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg=
+cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA=
cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4=
cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY=
+cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc=
+cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y=
+cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14=
+cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do=
+cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo=
+cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM=
+cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg=
cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s=
cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI=
+cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk=
+cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44=
+cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc=
+cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc=
cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA=
-cloud.google.com/go/secretmanager v1.14.0 h1:P2RRu2NEsQyOjplhUPvWKqzDXUKzwejHLuSUBHI8c4w=
-cloud.google.com/go/secretmanager v1.14.0/go.mod h1:q0hSFHzoW7eRgyYFH8trqEFavgrMeiJI4FETNN78vhM=
+cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4=
+cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4=
+cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU=
+cloud.google.com/go/secretmanager v1.14.3 h1:XVGHbcXEsbrgi4XHzgK5np81l1eO7O72WOXHhXUemrM=
+cloud.google.com/go/secretmanager v1.14.3/go.mod h1:Pwzcfn69Ni9Lrk1/XBzo1H9+MCJwJ6CDCoeoQUsMN+c=
cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4=
cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0=
cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU=
+cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q=
+cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA=
+cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8=
+cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0=
cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU=
cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc=
+cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk=
+cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk=
+cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0=
+cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag=
+cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU=
+cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s=
+cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA=
+cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc=
+cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk=
cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs=
cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg=
+cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4=
+cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U=
+cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY=
+cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s=
+cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco=
+cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo=
+cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc=
+cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4=
+cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E=
+cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU=
+cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec=
+cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA=
+cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4=
+cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw=
+cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A=
+cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos=
+cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk=
+cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M=
cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM=
cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ=
+cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0=
+cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco=
+cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0=
+cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
+cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y=
cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc=
cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s=
-cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs=
-cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0=
+cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y=
+cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4=
+cloud.google.com/go/storage v1.50.0 h1:3TbVkzTooBvnZsk7WaAQfOsNrdoM8QHusXA1cpk6QJs=
+cloud.google.com/go/storage v1.50.0/go.mod h1:l7XeiD//vx5lfqE3RavfmU9yvk5Pp0Zhcv482poyafY=
+cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w=
+cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I=
+cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4=
+cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw=
cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw=
cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g=
+cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM=
+cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA=
+cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c=
+cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8=
+cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4=
+cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc=
+cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ=
+cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg=
+cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM=
+cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28=
+cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y=
+cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA=
+cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk=
+cloud.google.com/go/trace v1.11.2 h1:4ZmaBdL8Ng/ajrgKqY5jfvzqMXbrDcBsUGXOT9aqTtI=
+cloud.google.com/go/trace v1.11.2/go.mod h1:bn7OwXd4pd5rFuAnTrzBuoZ4ax2XQeG3qNgYmfCy0Io=
+cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs=
+cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg=
+cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0=
+cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos=
+cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos=
+cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk=
+cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw=
+cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg=
+cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk=
+cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ=
+cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ=
cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU=
cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4=
+cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M=
+cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU=
+cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU=
cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0=
cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo=
cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo=
+cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY=
+cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E=
+cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY=
+cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0=
+cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE=
+cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g=
+cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc=
+cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY=
+cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208=
+cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8=
+cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY=
+cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w=
+cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8=
+cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes=
cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE=
cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg=
+cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc=
+cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A=
+cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg=
+cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo=
+cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ=
+cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng=
cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0=
cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M=
+cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M=
+cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA=
+cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw=
dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-filippo.io/age v1.2.0 h1:vRDp7pUMaAJzXNIWJVAZnEf/Dyi4Vu4wI8S1LBzufhE=
-filippo.io/age v1.2.0/go.mod h1:JL9ew2lTN+Pyft4RiNGguFfOpewKwSHm5ayKD/A4004=
+filippo.io/age v1.2.1 h1:X0TZjehAZylOIj4DubWYU1vWQxv9bJpo+Uu2/LGhi1o=
+filippo.io/age v1.2.1/go.mod h1:JL9ew2lTN+Pyft4RiNGguFfOpewKwSHm5ayKD/A4004=
+filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
+filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
+gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8=
+git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc=
github.com/1Password/connect-sdk-go v1.5.3 h1:KyjJ+kCKj6BwB2Y8tPM1Ixg5uIS6HsB0uWA8U38p/Uk=
github.com/1Password/connect-sdk-go v1.5.3/go.mod h1:5rSymY4oIYtS4G3t0oMkGAXBeoYiukV3vkqlnEjIDJs=
-github.com/1password/onepassword-sdk-go v0.1.1 h1:smvVI7OTTqFf6M7jOU7s+VbYbYHrStnT/GYZ9+hDy4o=
-github.com/1password/onepassword-sdk-go v0.1.1/go.mod h1:7wEQynLBXBC4svNx3X82QmCy0Adhm4e+UkM9t9mSSWA=
+github.com/1password/onepassword-sdk-go v0.2.1 h1:wwJmjR3UrwYxgAmNpKZ/mHOgFYCz6aQx7NxQ2YCFOL8=
+github.com/1password/onepassword-sdk-go v0.2.1/go.mod h1:R+3/jgPZRbfuXrMCqrl3NM46MMbpc4Zue5S5KRv6yC8=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
github.com/AlecAivazis/survey/v2 v2.3.6 h1:NvTuVHISgTHEHeBFqt6BHOe4Ny/NwGZr7w+F8S9ziyw=
github.com/AlecAivazis/survey/v2 v2.3.6/go.mod h1:4AuI9b7RjAR+G7v9+C4YSlX/YL3K3cWNXgWXOhllqvI=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 h1:nyQWyZvwGTvunIMxi1Y9uXkcyr+I7TeNrr/foo4Kpk8=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0/go.mod h1:l38EPgmsp71HHLq9j7De57JcKOWPyhrsW1Awm1JS6K0=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 h1:DSDNVxqkoXJiko6x8a90zidoYqnYYa6c1MTzDKzKkTo=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1/go.mod h1:zGqV2R4Cr/k8Uye5w+dgQ06WJtEcbQG/8J7BB6hnCr4=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 h1:F0gBpfdPLGsw+nsgk6aqqkZS1jiixa5WwFe3fk/T3Ys=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2/go.mod h1:SqINnQ9lVVdRlyC8cd1lCI0SdX4n2paeABd2K8ggfnE=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8=
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY=
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.1.2 h1:mLY+pNLjCUeKhgnAJWAKhEUQM+RJQo2H1fuGSw1Ky1E=
@@ -219,12 +653,12 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0/go.mod h1:s1tW/At+xHqjNFvWU4G0c0Qv33KOhvbGNj0RCTQDV8s=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.3.0 h1:LcJtQjCXJUm1s7JpUHZvu+bpgURhCatxVNbGADXniX0=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.3.0/go.mod h1:+OgGVo0Httq7N5oayfvaLQ/Jq+2gJdqfp++Hyyl7Tws=
-github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.1.0 h1:DRiANoJTiW6obBQe3SqZizkuV1PEgfiiGivmVocDy64=
-github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.1.0/go.mod h1:qLIye2hwb/ZouqhpSD9Zn3SJipvpEnz1Ywl3VUk9Y0s=
-github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.1.0 h1:h4Zxgmi9oyZL2l8jeg1iRTqPloHktywWcu0nlJmo1tA=
-github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.1.0/go.mod h1:LgLGXawqSreJz135Elog0ywTJDsm0Hz2k+N+6ZK35u8=
-github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.1 h1:9fXQS/0TtQmKXp8SureKouF+idbQvp7cPUxykiohnBs=
-github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.1/go.mod h1:f+OaoSg0VQYPMqB0Jp2D54j1VHzITYcJaCNwV+k00ts=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.3.0 h1:7rKG7UmnrxX4N53TFhkYqjc+kVUZuw0fL8I3Fh+Ld9E=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.3.0/go.mod h1:Wjo+24QJVhhl/L7jy6w9yzFF2yDOf3cKECAa8ecf9vE=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1 h1:mrkDCdkMsD4l9wjFGhofFHFrV43Y3c53RSLKOCJ5+Ow=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1/go.mod h1:hPv41DbqMmnxcGralanA/kVlfdH5jv3T4LxGku2E1BY=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 h1:bFWuoEKg+gImo7pvkiQEFAc8ocibADgXeiLAxWhWmkI=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1/go.mod h1:Vih/3yc6yac2JzU4hzpaDupBJP0Flaia9rXXrU8xyww=
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0 h1:nVocQV40OQne5613EeLayJiRAJuKlBGy+m22qWG+WRg=
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0/go.mod h1:7QJP7dr2wznCMeqIrhMgWGf7XpAQnVrJqDm9nvV3Cu4=
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
@@ -245,98 +679,124 @@ github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+Z
github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
+github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM=
+github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 h1:H5xDQaE3XowWfhZRUpnfC+rGZMEVoSiji+b+/HFAPU4=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
+github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU=
+github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU=
github.com/DopplerHQ/cli v0.5.11-0.20230908185655-7aef4713e1a4 h1:s7/zwMi5w+KnlumDVbX1+P6mNAk5o7Wvx0VmvrQ7Bm0=
github.com/DopplerHQ/cli v0.5.11-0.20230908185655-7aef4713e1a4/go.mod h1:ipnA9Lpn5YM+FDSQZ7VWNjcuVurchInoGKm+v7O0sGs=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 h1:3c8yed4lgqTt+oTQ+JNMDo+F4xprBf+O/il4ZC0nRLw=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0/go.mod h1:obipzmGjfSjam60XLwGfqUkJsfiheAl+TUjG+4yzyPM=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 h1:UQ0AhxogsIRZDkElkblfnwjc3IaltCm2HUMvezQaL7s=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1/go.mod h1:jyqM3eLpJ3IbIFDTKVz2rF9T/xWGW0rIriGwnz8l9Tk=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1 h1:oTX4vsorBZo/Zdum6OKPA4o7544hm6smoRv1QjpTwGo=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1/go.mod h1:0wEl7vrAD8mehJyohS9HZy+WyEOaQO2mJx86Cvh93kM=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 h1:8nn+rsCvTq9axyEh382S0PFLBeaFwNsT43IrPWzctRU=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1/go.mod h1:viRWSEhtMZqz1rhwmOVKkWl6SwmVowfL9O2YR5gI2PE=
github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
+github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk=
+github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
+github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
-github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0=
-github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
+github.com/Masterminds/semver/v3 v3.3.1 h1:QtNSWtVZ3nBfk8mAOu/B6v7FMJ+NHTIgUPi7rj+4nv4=
+github.com/Masterminds/semver/v3 v3.3.1/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs=
github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0=
+github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8afzqM=
+github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
-github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8=
-github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w=
+github.com/Microsoft/hcsshim v0.11.7 h1:vl/nj3Bar/CvJSYo7gIQPyRWc9f3c6IeSNavBTSZNZQ=
+github.com/Microsoft/hcsshim v0.11.7/go.mod h1:MV8xMfmECjl5HdO7U/3/hFVnkmSBjAjmA09d4bExKcU=
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw=
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
-github.com/ProtonMail/go-crypto v1.1.0-alpha.3-proton h1:0RXAi0EJFs81j+MMsqvHNuAUGWzeVfCO9LnHAfoQ8NA=
-github.com/ProtonMail/go-crypto v1.1.0-alpha.3-proton/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
+github.com/ProtonMail/go-crypto v1.1.3 h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk=
+github.com/ProtonMail/go-crypto v1.1.3/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs=
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
-github.com/a8m/envsubst v1.4.2 h1:4yWIHXOLEJHQEFd4UjrWDrYeYlV7ncFWJOCBRLOZHQg=
-github.com/a8m/envsubst v1.4.2/go.mod h1:MVUTQNGQ3tsjOOtKCNd+fl8RzhsXcDvvAEzkhGtlsbY=
+github.com/a8m/envsubst v1.4.3 h1:kDF7paGK8QACWYaQo6KtyYBozY2jhQrTuNNuUxQkhJY=
+github.com/a8m/envsubst v1.4.3/go.mod h1:4jjHWQlZoaXPoLQUb7H2qT4iLkZDdmEQiOUogdUmqVU=
github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo=
github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
+github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY=
+github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk=
+github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
+github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0=
-github.com/alessio/shellescape v1.4.1/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30=
-github.com/antchfx/jsonquery v1.3.5 h1:243OSaQh02EfmASa3w3weKC9UaiD8RRzJhgfvq3q408=
-github.com/antchfx/jsonquery v1.3.5/go.mod h1:qH23yX2Jsj1/k378Yu/EOgPCNgJ35P9tiGOeQdt/GWc=
-github.com/antchfx/xpath v1.3.1 h1:PNbFuUqHwWl0xRjvUPjJ95Agbmdj2uzzIwmQKgu4oCk=
-github.com/antchfx/xpath v1.3.1/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs=
+github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
+github.com/antchfx/jsonquery v1.3.6 h1:TaSfeAh7n6T11I74bsZ1FswreIfrbJ0X+OyLflx6mx4=
+github.com/antchfx/jsonquery v1.3.6/go.mod h1:fGzSGJn9Y826Qd3pC8Wx45avuUwpkePsACQJYy+58BU=
+github.com/antchfx/xpath v1.3.2/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs=
+github.com/antchfx/xpath v1.3.3 h1:tmuPQa1Uye0Ym1Zn65vxPgfltWb/Lxu2jeqIGteJSRs=
+github.com/antchfx/xpath v1.3.3/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
+github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0=
+github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI=
+github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU=
github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY=
github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de h1:FxWPpzIjnTlhPwqqXc4/vE0f7GvRjuAsbW+HOIe8KnA=
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de/go.mod h1:DCaWoUhZrYW9p1lxo/cm8EmUOOzAPSEZNGF2DK1dJgw=
+github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
+github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
-github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU=
-github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
-github.com/aws/aws-sdk-go-v2 v1.30.0 h1:6qAwtzlfcTtcL8NHtbDQAqgM5s6NDipQTkPxyH/6kAA=
-github.com/aws/aws-sdk-go-v2 v1.30.0/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 h1:x6xsQXGSmW6frevwDA+vi/wqhp1ct18mVXYN08/93to=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2/go.mod h1:lPprDr1e6cJdyYeGXnRaJoP4Md+cDBvi2eOj00BlGmg=
-github.com/aws/aws-sdk-go-v2/config v1.27.21 h1:yPX3pjGCe2hJsetlmGNB4Mngu7UPmvWPzzWCv1+boeM=
-github.com/aws/aws-sdk-go-v2/config v1.27.21/go.mod h1:4XtlEU6DzNai8RMbjSF5MgGZtYvrhBP/aKZcRtZAVdM=
-github.com/aws/aws-sdk-go-v2/credentials v1.17.21 h1:pjAqgzfgFhTv5grc7xPHtXCAaMapzmwA7aU+c/SZQGw=
-github.com/aws/aws-sdk-go-v2/credentials v1.17.21/go.mod h1:nhK6PtBlfHTUDVmBLr1dg+WHCOCK+1Fu/WQyVHPsgNQ=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.8 h1:FR+oWPFb/8qMVYMWN98bUZAGqPvLHiyqg1wqQGfUAXY=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.8/go.mod h1:EgSKcHiuuakEIxJcKGzVNWh5srVAQ3jKaSrBGRYvM48=
-github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.1 h1:D9VqWMuw7lJAX6d5eINfRQ/PkvtcJAK3Qmd6f6xEeUw=
-github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.1/go.mod h1:ckvBx7codI4wzc5inOfDp5ZbK7TjMFa7eXwmLvXQrRk=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.12 h1:SJ04WXGTwnHlWIODtC5kJzKbeuHt+OUNOgKg7nfnUGw=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.12/go.mod h1:FkpvXhA92gb3GE9LD6Og0pHHycTxW7xGpnEh5E7Opwo=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.12 h1:hb5KgeYfObi5MHkSSZMEudnIvX30iB+E21evI4r6BnQ=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.12/go.mod h1:CroKe/eWJdyfy9Vx4rljP5wTUjNJfb+fPz1uMYUhEGM=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
-github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.12 h1:DXFWyt7ymx/l1ygdyTTS0X923e+Q2wXIxConJzrgwc0=
-github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.12/go.mod h1:mVOr/LbvaNySK1/BTy4cBOCjhCNY2raWBwK4v+WR5J4=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg=
-github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.14 h1:oWccitSnByVU74rQRHac4gLfDqjB6Z1YQGOY/dXKedI=
-github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.14/go.mod h1:8SaZBlQdCLrc/2U3CEO48rYj9uR8qRsPRkmzwNM52pM=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.14 h1:zSDPny/pVnkqABXYRicYuPf9z2bTqfH13HT3v6UheIk=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.14/go.mod h1:3TTcI5JSzda1nw/pkVC9dhgLre0SNBFj2lYS4GctXKI=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.12 h1:tzha+v1SCEBpXWEuw6B/+jm4h5z8hZbTpXz0zRZqTnw=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.12/go.mod h1:n+nt2qjHGoseWeLHt1vEr6ZRCCxIN2KcNpJxBcYQSwI=
-github.com/aws/aws-sdk-go-v2/service/kms v1.34.1 h1:VsKBn6WADI3Nn3WjBMzeRww9WHXeVLi7zyuSrqjRCBQ=
-github.com/aws/aws-sdk-go-v2/service/kms v1.34.1/go.mod h1:5F6kXrPBxv0l1t8EO44GuG4W82jGJwaRE0B+suEGnNY=
-github.com/aws/aws-sdk-go-v2/service/s3 v1.56.1 h1:wsg9Z/vNnCmxWikfGIoOlnExtEU459cR+2d+iDJ8elo=
-github.com/aws/aws-sdk-go-v2/service/s3 v1.56.1/go.mod h1:8rDw3mVwmvIWWX/+LWY3PPIMZuwnQdJMCt0iVFVT3qw=
-github.com/aws/aws-sdk-go-v2/service/sso v1.21.1 h1:sd0BsnAvLH8gsp2e3cbaIr+9D7T1xugueQ7V/zUAsS4=
-github.com/aws/aws-sdk-go-v2/service/sso v1.21.1/go.mod h1:lcQG/MmxydijbeTOp04hIuJwXGWPZGI3bwdFDGRTv14=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.25.1 h1:1uEFNNskK/I1KoZ9Q8wJxMz5V9jyBlsiaNrM7vA3YUQ=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.25.1/go.mod h1:z0P8K+cBIsFXUr5rzo/psUeJ20XjPN0+Nn8067Nd+E4=
-github.com/aws/aws-sdk-go-v2/service/sts v1.29.1 h1:myX5CxqXE0QMZNja6FA1/FSE3Vu1rVmeUmpJMMzeZg0=
-github.com/aws/aws-sdk-go-v2/service/sts v1.29.1/go.mod h1:N2mQiucsO0VwK9CYuS4/c2n6Smeh1v47Rz3dWCPFLdE=
-github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q=
-github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
+github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE=
+github.com/aws/aws-sdk-go v1.55.7/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
+github.com/aws/aws-sdk-go-v2 v1.32.6 h1:7BokKRgRPuGmKkFMhEg/jSul+tB9VvXhcViILtfG8b4=
+github.com/aws/aws-sdk-go-v2 v1.32.6/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 h1:lL7IfaFzngfx0ZwUGOZdsFFnQ5uLvR0hWqqhyE7Q9M8=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7/go.mod h1:QraP0UcVlQJsmHfioCrveWOC1nbiWUl3ej08h4mXWoc=
+github.com/aws/aws-sdk-go-v2/config v1.28.6 h1:D89IKtGrs/I3QXOLNTH93NJYtDhm8SYa9Q5CsPShmyo=
+github.com/aws/aws-sdk-go-v2/config v1.28.6/go.mod h1:GDzxJ5wyyFSCoLkS+UhGB0dArhb9mI+Co4dHtoTxbko=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.47 h1:48bA+3/fCdi2yAwVt+3COvmatZ6jUDNkDTIsqDiMUdw=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.47/go.mod h1:+KdckOejLW3Ks3b0E3b5rHsr2f9yuORBum0WPnE5o5w=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 h1:AmoU1pziydclFT/xRV+xXE/Vb8fttJCLRPv8oAkprc0=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21/go.mod h1:AjUdLYe4Tgs6kpH4Bv7uMZo7pottoyHMn4eTcIcneaY=
+github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.42 h1:vEnk9vtjJ62OO2wOhEmgKMZgNcn1w0aF7XCiNXO5rK0=
+github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.42/go.mod h1:GUOPbPJWRZsdt1OJ355upCrry4d3ZFgdX6rhT7gtkto=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 h1:s/fF4+yDQDoElYhfIVvSNyeCydfbuTKzhxSXDXCPasU=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25/go.mod h1:IgPfDv5jqFIzQSNbUEMoitNooSMXjRSDkhXv8jiROvU=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 h1:ZntTCl5EsYnhN/IygQEUugpdwbhdkom9uHcbCftiGgA=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25/go.mod h1:DBdPrgeocww+CSl1C8cEV8PN1mHMBhuCDLpXezyvWkE=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
+github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25 h1:r67ps7oHCYnflpgDy2LZU0MAQtQbYIOqNNnqGO6xQkE=
+github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25/go.mod h1:GrGY+Q4fIokYLtjCVB/aFfCVL6hhGUFl8inD18fDalE=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE=
+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6 h1:HCpPsWqmYQieU7SS6E9HXfdAMSud0pteVXieJmcpIRI=
+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6/go.mod h1:ngUiVRCco++u+soRRVBIvBZxSMMvOVMXA4PJ36JLfSw=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 h1:50+XsN70RS7dwJ2CkVNXzj7U2L1HKP8nqTd3XWEXBN4=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6/go.mod h1:WqgLmwY7so32kG01zD8CPTJWVWM+TzJoOVHwTg4aPug=
+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6 h1:BbGDtTi0T1DYlmjBiCr/le3wzhA37O8QTC5/Ab8+EXk=
+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6/go.mod h1:hLMJt7Q8ePgViKupeymbqI0la+t9/iYFBjxQCFwuAwI=
+github.com/aws/aws-sdk-go-v2/service/kms v1.37.7 h1:dZmNIRtPUvtvUIIDVNpvtnJQ8N8Iqm7SQAxf18htZYw=
+github.com/aws/aws-sdk-go-v2/service/kms v1.37.7/go.mod h1:vj8PlfJH9mnGeIzd6uMLPi5VgiqzGG7AZoe1kf1uTXM=
+github.com/aws/aws-sdk-go-v2/service/s3 v1.70.0 h1:HrHFR8RoS4l4EvodRMFcJMYQ8o3UhmALn2nbInXaxZA=
+github.com/aws/aws-sdk-go-v2/service/s3 v1.70.0/go.mod h1:sT/iQz8JK3u/5gZkT+Hmr7GzVZehUMkRZpOaAwYXeGY=
+github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 h1:rLnYAfXQ3YAccocshIH5mzNNwZBkBo+bP6EhIxak6Hw=
+github.com/aws/aws-sdk-go-v2/service/sso v1.24.7/go.mod h1:ZHtuQJ6t9A/+YDuxOLnbryAmITtr8UysSny3qcyvJTc=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 h1:JnhTZR3PiYDNKlXy50/pNeix9aGMo6lLpXwJ1mw8MD4=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6/go.mod h1:URronUEGfXZN1VpdktPSD1EkAL9mfrV+2F4sjH38qOY=
+github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 h1:s4074ZO1Hk8qv65GqNXqDjmkf4HSQqJukaLuuW0TpDA=
+github.com/aws/aws-sdk-go-v2/service/sts v1.33.2/go.mod h1:mVggCnIWoM09jP71Wh+ea7+5gAp53q+49wDFs1SW5z8=
+github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro=
+github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
@@ -349,6 +809,8 @@ github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdn
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
+github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
+github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70=
github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng=
@@ -357,66 +819,82 @@ github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembj
github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50=
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o=
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
-github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M=
-github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs=
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g=
+github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk=
+github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA=
github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cloudflare/circl v1.3.9 h1:QFrlgFYf2Qpi8bSpVPK1HBvWpx16v/1TZivyo7pGuBE=
-github.com/cloudflare/circl v1.3.9/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU=
+github.com/cloudflare/circl v1.4.0 h1:BV7h5MgrktNzytKmWjpOtdYrf0lkkbF8YMlBGPhJQrY=
+github.com/cloudflare/circl v1.4.0/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
+github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/colega/go-yaml-yaml v0.0.0-20220720070545-aaba007ebc22 h1:uVG5v+c6ndz9seCorYjQmlVlPbh3OMcMWJzAJZWdM/g=
-github.com/colega/go-yaml-yaml v0.0.0-20220720070545-aaba007ebc22/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI=
+github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM=
github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw=
-github.com/containerd/containerd v1.7.12 h1:+KQsnv4VnzyxWcfO9mlxxELaoztsDEjOuCMPAuPqgU0=
-github.com/containerd/containerd v1.7.12/go.mod h1:/5OMpE1p0ylxtEUGY8kuCYkDRzJm9NO1TFMWjUpdevk=
-github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8=
-github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ=
+github.com/containerd/containerd v1.7.27 h1:yFyEyojddO3MIGVER2xJLWoCIn+Up4GaHFquP7hsFII=
+github.com/containerd/containerd v1.7.27/go.mod h1:xZmPnl75Vc+BLGt4MIfu6bp+fy03gdHAn9bz+FreFR0=
+github.com/containerd/continuity v0.4.4 h1:/fNVfTJ7wIl/YPMHjf+5H32uFhl63JucB34PlCpMKII=
+github.com/containerd/continuity v0.4.4/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE=
+github.com/containerd/errdefs v0.3.0 h1:FSZgGOeK4yuT/+DnF07/Olde/q4KBoMsaamhXxIMDp4=
+github.com/containerd/errdefs v0.3.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M=
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
-github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4=
-github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A=
+github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw=
+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/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
-github.com/cyberark/conjur-api-go v0.12.4 h1:N1Ku6xveOHZa7NRuf//uNKxwcvwp7MTy59aB2VM0o9A=
-github.com/cyberark/conjur-api-go v0.12.4/go.mod h1:FnzNn6mPwTOyBueSDnu1J4K47J0sYHXTMehaqIV/GxY=
-github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0=
-github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0=
+github.com/cyberark/conjur-api-go v0.12.14 h1:E/dTORBq7/wu/llODfeuWmZa3lQy1D4dHzCNcG5JlpU=
+github.com/cyberark/conjur-api-go v0.12.14/go.mod h1:0ZVdpe/GzMMQyZkGV3o9bM/jswH3XrBEU9phSL0lP/g=
+github.com/danieljoos/wincred v1.2.2 h1:774zMFJrqaeYCK2W57BgAem/MLi6mtSE47MB6BOJ0i0=
+github.com/danieljoos/wincred v1.2.2/go.mod h1:w7w4Utbrz8lqeMbDAK0lkNJUv5sAOkFi7nd/ogr0Uh8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
+github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U=
github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE=
github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 h1:aBfCb7iqHmDEIp6fBvC/hQUddQfg+3qdYjwzaiP9Hnc=
github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2/go.mod h1:WHNsWjnIn2V1LYOrME7e8KxSeKunYHsxEm4am0BUtcI=
-github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
-github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
-github.com/docker/cli v27.0.1+incompatible h1:d/OrlblkOTkhJ1IaAGD1bLgUBtFQC/oP0VjkFMIN+B0=
-github.com/docker/cli v27.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
+github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
+github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
+github.com/docker/cli v27.3.1+incompatible h1:qEGdFBF3Xu6SCvCYhc7CzaQTlBmqDuzxPDpigSyeKQQ=
+github.com/docker/cli v27.3.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v27.1.1+incompatible h1:hO/M4MtV36kzKldqnA37IWhebRA+LnqqcqDja6kVaKY=
-github.com/docker/docker v27.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v27.3.1+incompatible h1:KttF0XoteNTicmUtBO0L2tP+J7FGRFTjaEF4k6WdhfI=
+github.com/docker/docker v27.3.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A=
github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0=
github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
@@ -429,8 +907,12 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4=
github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
+github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
+github.com/dylibso/observe-sdk/go v0.0.0-20240819160327-2d926c5d788a h1:UwSIFv5g5lIvbGgtf3tVwC7Ky9rmMFBp0RMs+6f6YqE=
+github.com/dylibso/observe-sdk/go v0.0.0-20240819160327-2d926c5d788a/go.mod h1:C8DzXehI4zAbrdlbtOByKX6pfivJTBiV9Jjqv56Yd9Q=
github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@@ -442,37 +924,59 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
+github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34=
+github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q=
+github.com/envoyproxy/go-control-plane v0.13.1 h1:vPfJZCkob6yTMEgS+0TwfTUfbHjfy/6vOJ8hUWX/uXE=
+github.com/envoyproxy/go-control-plane v0.13.1/go.mod h1:X45hY0mufo6Fd0KW3rqsGvQMw58jvjymeCzBU3mWyHw=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo=
+github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w=
+github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss=
+github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM=
+github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4=
github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/extism/go-sdk v1.3.1 h1:eVpuv36b67Km/tAb7Cq6msHEW8kkdFgpZO/7fCwjuoE=
-github.com/extism/go-sdk v1.3.1/go.mod h1:tPMWfCSOThie3LSTSZKbrQjRm2oAXxUUjSE4HJWjYQM=
+github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f h1:Wl78ApPPB2Wvf/TIe2xdyJxTlb6obmF18d8QdkxNDu4=
+github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSYXu++VVOHnXeitef/D8n/6y4QV8uLHSFXX4NeXMGc=
+github.com/extism/go-sdk v1.7.0 h1:yHbSa2JbcF60kjGsYiGEOcClfbknqCJchyh9TRibFWo=
+github.com/extism/go-sdk v1.7.0/go.mod h1:Dhuc1qcD0aqjdqJ3ZDyGdkZPEj/EHKVjbE4P+1XRMqc=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
-github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
-github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
+github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
+github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
+github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
+github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/foxcpp/go-mockdns v1.1.0 h1:jI0rD8M0wuYAxL7r/ynTrCQQq0BVqfB99Vgk7DlmewI=
github.com/foxcpp/go-mockdns v1.1.0/go.mod h1:IhLeSFGed3mJIAXPH2aiRQB+kqz7oqu8ld2qVbOu7Wk=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
-github.com/fujiwara/tfstate-lookup v1.4.1 h1:uQxR3DA5P7p9JENCAdtTTAguDMX2A3LFy3z0gtu76sU=
-github.com/fujiwara/tfstate-lookup v1.4.1/go.mod h1:C/n3SgmKG5Q3R/CuoOJLkSwtUDp6pUIVwShLPSFcZCw=
+github.com/fujiwara/tfstate-lookup v1.5.0 h1:aH6taxOnqdLsf6OYLTpu1S2jdGyIByw+kIRdUpyx7IQ=
+github.com/fujiwara/tfstate-lookup v1.5.0/go.mod h1:8Lx6yUGa402ko/I9nv5FMpfKfgc4ZUM2uNx06WJu+1E=
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
github.com/getsops/gopgagent v0.0.0-20240527072608-0c14999532fe h1:QKe/kmAYbndxwu91TcjHERsnMh5SgOB1x/qicvOdUJ8=
github.com/getsops/gopgagent v0.0.0-20240527072608-0c14999532fe/go.mod h1:awFzISqLJoZLm+i9QQ4SgMNHDqljH6jWV0B36V5MrUM=
-github.com/getsops/sops/v3 v3.9.0 h1:J1UGOAPz4wSRE1dRtkwcQNyvG/jcjcRYJy1wbgKbqeE=
-github.com/getsops/sops/v3 v3.9.0/go.mod h1:lYvaahx9fme8XdBLFHLAZzsMuApg8pIJn8ApyInTdqk=
+github.com/getsops/sops/v3 v3.9.2 h1:Cuuahc/UGu7W3+NXd+mrl+2oXGxxj/jIPsw6Ah2CbxA=
+github.com/getsops/sops/v3 v3.9.2/go.mod h1:J8CMEdmPWT8gxFaNmPBSrc5NFd4uNndf8aFQwhD/ZR8=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
+github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g=
+github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks=
+github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY=
+github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY=
+github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-jose/go-jose/v4 v4.0.2 h1:R3l3kkBds16bO7ZFAEEcofK0MkrAJt3jlJznWZG0nvk=
-github.com/go-jose/go-jose/v4 v4.0.2/go.mod h1:WVf9LFMHh/QVrmqrOfqun0C45tMe3RoiKJMPvgWwLfY=
+github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs=
+github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw=
+github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE=
+github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U=
+github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
@@ -496,27 +1000,26 @@ github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9Z
github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk=
github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c=
github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4=
-github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
-github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
+github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU=
+github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0=
github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3BumrGD58=
github.com/go-openapi/validate v0.24.0/go.mod h1:iyeX1sEufmv3nPbBdX3ieNviWnOZaJ1+zquzJEf2BAQ=
-github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
-github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
-github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
-github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
-github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
-github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
+github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M=
+github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M=
+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-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U=
github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
-github.com/go-viper/mapstructure/v2 v2.0.0 h1:dhn8MZ1gZ0mzeodTG3jt5Vj/o87xZKuNAprG2mQfMfc=
-github.com/go-viper/mapstructure/v2 v2.0.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss=
+github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
-github.com/goccy/go-yaml v1.12.0 h1:/1WHjnMsI1dlIBQutrvSMGZRQufVO3asrHfTwfACoPM=
-github.com/goccy/go-yaml v1.12.0/go.mod h1:wKnAMd44+9JAAnGQpWVEgBzGt3YuTaQ4uXoHvE4m7WU=
+github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
+github.com/goccy/go-yaml v1.17.1 h1:LI34wktB2xEE3ONG/2Ar54+/HJVBriAGJ55PHls4YuY=
+github.com/goccy/go-yaml v1.17.1/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
@@ -524,11 +1027,15 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
-github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
-github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
-github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
+github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI=
+github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
+github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8=
+github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
+github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
+github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -561,17 +1068,20 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k=
github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
-github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
-github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
+github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
+github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw=
+github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -587,8 +1097,9 @@ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
+github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/go-jsonnet v0.20.0 h1:WG4TTSARuV7bSm4PMB4ohjxe33IHT5WVTrJSU33uT4g=
github.com/google/go-jsonnet v0.20.0/go.mod h1:VbgWF9JX7ztlv770x/TolZNGGFfiHEVx9G6ca2eUmeA=
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
@@ -601,6 +1112,7 @@ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXi
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
+github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc=
github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
@@ -612,13 +1124,14 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af h1:kmjWCqn2qkEml422C2Rrd27c3VGxi6a/6HNq8QmHRKM=
-github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo=
+github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo=
+github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM=
github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA=
@@ -631,8 +1144,10 @@ github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg=
-github.com/googleapis/enterprise-certificate-proxy v0.3.3 h1:QRje2j5GZimBzlbhGA2V2QlGNgL8G6e+wGo/+/2bWI0=
-github.com/googleapis/enterprise-certificate-proxy v0.3.3/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA=
+github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
+github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
+github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw=
+github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
@@ -642,27 +1157,34 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99
github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c=
github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo=
github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY=
-github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s=
-github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A=
+github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8=
+github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI=
+github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q=
+github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA=
github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
+github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=
github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
+github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
+github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY=
github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo=
github.com/goware/prefixer v0.0.0-20160118172347-395022866408 h1:Y9iQJfEqnN3/Nce9cOegemcy/9Ai5k3huT6E80F3zaw=
github.com/goware/prefixer v0.0.0-20160118172347-395022866408/go.mod h1:PE1ycukgRPJ7bJ9a1fdfQ9j8i/cEcRAoLZzbxYpNB/s=
-github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM=
-github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
+github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA=
+github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
-github.com/hashicorp/go-getter v1.7.6 h1:5jHuM+aH373XNtXl9TNTUH5Qd69Trve11tHIrB+6yj4=
-github.com/hashicorp/go-getter v1.7.6/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744=
+github.com/hashicorp/go-getter v1.7.8 h1:mshVHx1Fto0/MydBekWan5zUipGq7jO0novchgMmSiY=
+github.com/hashicorp/go-getter v1.7.8/go.mod h1:2c6CboOEb9jG6YvmC9xdD+tyAFsrUaJPedwXDGr0TM4=
github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
@@ -677,10 +1199,10 @@ github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8 h1:iBt4Ew4XEGLfh6/bPk4rSY
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8/go.mod h1:aiJI+PIApBRQG7FZTEBx5GiiX+HbOHilUdNxUZi4eV0=
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts=
github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4=
-github.com/hashicorp/go-slug v0.15.0 h1:AhMnE6JIyW0KoDJlmRDwv4xd52a5ZK3VdioQ7SMmZhI=
-github.com/hashicorp/go-slug v0.15.0/go.mod h1:THWVTAXwJEinbsp4/bBRcmbaO5EYNLTqxbG4tZ3gCYQ=
-github.com/hashicorp/go-sockaddr v1.0.6 h1:RSG8rKU28VTUTvEKghe5gIhIQpv8evvNpnDEyqO4u9I=
-github.com/hashicorp/go-sockaddr v1.0.6/go.mod h1:uoUUmtwU7n9Dv3O4SNLeFvg0SxQ3lyjsj6+CCykpaxI=
+github.com/hashicorp/go-slug v0.16.3 h1:pe0PMwz2UWN1168QksdW/d7u057itB2gY568iF0E2Ns=
+github.com/hashicorp/go-slug v0.16.3/go.mod h1:THWVTAXwJEinbsp4/bBRcmbaO5EYNLTqxbG4tZ3gCYQ=
+github.com/hashicorp/go-sockaddr v1.0.7 h1:G+pTkSO01HpR5qCxg7lxfsFEZaG+C0VssTy/9dbT+Fw=
+github.com/hashicorp/go-sockaddr v1.0.7/go.mod h1:FZQbEYa1pxkQ7WLpyXJ6cbjpT8q0YgQaK/JakXqGyWw=
github.com/hashicorp/go-tfe v1.56.0 h1:AjBTo7TmWoz42l4KhH65Q3NvjRD5yD3XZrG1tzFySeI=
github.com/hashicorp/go-tfe v1.56.0/go.mod h1:XnTtBj3tVQ4uFkcFsv8Grn+O1CVcIcceL1uc2AgUcaU=
github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
@@ -693,28 +1215,29 @@ github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iP
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
-github.com/hashicorp/hcl/v2 v2.22.0 h1:hkZ3nCtqeJsDhPRFz5EA9iwcG1hNWGePOTw6oyul12M=
-github.com/hashicorp/hcl/v2 v2.22.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA=
-github.com/hashicorp/hcp-sdk-go v0.111.0 h1:tPQs4N3HdwF8NF3gwZQ8b00CJDeuEzmrQh/OsJlhSSs=
-github.com/hashicorp/hcp-sdk-go v0.111.0/go.mod h1:vQ4fzdL1AmhIAbCw+4zmFe5Hbpajj3NvRWkJoVuxmAk=
+github.com/hashicorp/hcl/v2 v2.23.0 h1:Fphj1/gCylPxHutVSEOf2fBOh1VE4AuLV7+kbJf3qos=
+github.com/hashicorp/hcl/v2 v2.23.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA=
+github.com/hashicorp/hcp-sdk-go v0.139.0 h1:jvEIwYg84/ZFphNJrk5Hoa5bYj5wORHgRQcbOfeqDHY=
+github.com/hashicorp/hcp-sdk-go v0.139.0/go.mod h1:ZxsZZjErm3E2sj2OjDeVsGJAkWtcRLUS+FrNLGPsUyw=
github.com/hashicorp/jsonapi v1.3.1 h1:GtPvnmcWgYwCuDGvYT5VZBHcUyFdq9lSyCzDjn1DdPo=
github.com/hashicorp/jsonapi v1.3.1/go.mod h1:kWfdn49yCjQvbpnvY1dxxAuAFzISwrrMDQOcu6NsFoM=
-github.com/hashicorp/vault/api v1.14.0 h1:Ah3CFLixD5jmjusOgm8grfN9M0d+Y8fVR2SW0K6pJLU=
-github.com/hashicorp/vault/api v1.14.0/go.mod h1:pV9YLxBGSz+cItFDd8Ii4G17waWOQ32zVjMWHe/cOqk=
-github.com/helmfile/chartify v0.20.2 h1:aWitnxXahmkaL69L1k2BMW0fFYresIKv9wa4YMhLRA0=
-github.com/helmfile/chartify v0.20.2/go.mod h1:qiuwenVmBC1fB3WvlxSUegjo14FT6g387xKVfQWiBbo=
-github.com/helmfile/vals v0.37.5 h1:FVcIyhbqxzYN/of0fQfHG6YeuJlVshDdSh176zucdr0=
-github.com/helmfile/vals v0.37.5/go.mod h1:YOkonFpvpo2mRzAI5jHJ5ogej0L6bTMiS/NhhLv2duo=
+github.com/hashicorp/vault/api v1.16.0 h1:nbEYGJiAPGzT9U4oWgaaB0g+Rj8E59QuHKyA5LhwQN4=
+github.com/hashicorp/vault/api v1.16.0/go.mod h1:KhuUhzOD8lDSk29AtzNjgAu2kxRA9jL9NAbkFlqvkBA=
+github.com/helmfile/chartify v0.22.0 h1:spw2kNBEToes3zc1N5GvqMiVVuCRSDeUap8ZUdEPcmE=
+github.com/helmfile/chartify v0.22.0/go.mod h1:cA9A0rSqDkR5sdga1gSyv0y9ebEf4loPfUsSHO+eDdo=
+github.com/helmfile/vals v0.40.1 h1:qveElGFgT5nyVk9DjGJTqiy4Tp0SaPD1x1GujnQWdqE=
+github.com/helmfile/vals v0.40.1/go.mod h1:VE3/SQwG1XeMFlh+i8nn0o9qqaCIp7wRNsDO6bVYKrY=
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
github.com/hokaccha/go-prettyjson v0.0.0-20211117102719-0474bc63780f h1:7LYC+Yfkj3CTRcShK0KOL/w6iTiKyqqBA9a41Wnggw8=
github.com/hokaccha/go-prettyjson v0.0.0-20211117102719-0474bc63780f/go.mod h1:pFlLw2CfqZiIBOx6BuCeRLCrfxBJipTY0nIOF/VbGcI=
github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI=
github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
+github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
-github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
-github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
+github.com/ianlancetaylor/demangle v0.0.0-20240805132620-81f5be970eca h1:T54Ema1DU8ngI+aef9ZhAhNGQhcRTrWxVeG07F+c/Rw=
+github.com/ianlancetaylor/demangle v0.0.0-20240805132620-81f5be970eca/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/itchyny/gojq v0.12.16 h1:yLfgLxhIr/6sJNVmYfQjTIv0jGctu6/DgDoivmxTr7g=
@@ -725,6 +1248,8 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
+github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o=
+github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
@@ -734,16 +1259,26 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
+github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
+github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6 h1:IsMZxCuZqKuao2vNdfD82fjjgPLfyHLpR41Z88viRWs=
+github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6/go.mod h1:3VeWNIJaW+O5xpRQbPp0Ybqu1vJd/pm7s2F473HRrkw=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE=
+github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
-github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4=
-github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
+github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -752,22 +1287,27 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
-github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
-github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw=
+github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o=
+github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk=
+github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE=
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
-github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
-github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
+github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA=
+github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA=
+github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o=
+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.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
-github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
@@ -775,14 +1315,17 @@ github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp
github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
+github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
+github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
+github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM=
github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk=
+github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY=
+github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE=
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ=
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
@@ -801,8 +1344,12 @@ github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3N
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg=
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
+github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU=
+github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI=
github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78=
github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
+github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
+github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -819,38 +1366,52 @@ github.com/muesli/termenv v0.15.1/go.mod h1:HeAQPTzpfs016yGtA4g00CsdYnVLJvxsS4AN
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
+github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
-github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA=
-github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To=
-github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
-github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0=
+github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM=
+github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
+github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4=
+github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
-github.com/opencontainers/runc v1.1.13 h1:98S2srgG9vw0zWcDpFMn5TRrh8kLxa/5OFUstuUhmRs=
-github.com/opencontainers/runc v1.1.13/go.mod h1:R016aXacfp/gwQBYw2FDGa9m+n6atbLWrYY8hNMT/sA=
+github.com/opencontainers/runc v1.1.14 h1:rgSuzbmgz5DUJjeSnw337TxDbRuqjs6iqQck/2weR6w=
+github.com/opencontainers/runc v1.1.14/go.mod h1:E4C2z+7BxR7GHXp0hAY53mek+x49X1LjPNeMTfRGvOA=
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
-github.com/ory/dockertest/v3 v3.10.0 h1:4K3z2VMe8Woe++invjaTB7VRyQXQy5UY+loujO4aNE4=
-github.com/ory/dockertest/v3 v3.10.0/go.mod h1:nr57ZbRWMqfsdGdFNLHz5jjNdDb7VVFnzAeW1n5N1Lg=
-github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU=
-github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w=
-github.com/otiai10/mint v1.5.1 h1:XaPLeE+9vGbuyEHem1JNk3bYc7KKqyI/na0/mLd/Kks=
-github.com/otiai10/mint v1.5.1/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM=
+github.com/ory/dockertest/v3 v3.11.0 h1:OiHcxKAvSDUwsEVh2BjxQQc/5EHz9n0va9awCtNGuyA=
+github.com/ory/dockertest/v3 v3.11.0/go.mod h1:VIPxS1gwT9NpPOrfD3rACs8Y9Z7yhzO4SB194iUDnUI=
+github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8=
+github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I=
+github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs=
+github.com/otiai10/mint v1.6.3/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM=
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI=
github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
+github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY=
+github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
+github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
+github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
+github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
+github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
+github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo=
+github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/poy/onpar v1.1.2 h1:QaNrNiZx0+Nar5dLgTVp5mXkyoVFIbepjyEoGSnhbAY=
+github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
@@ -859,6 +1420,8 @@ github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJL
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w=
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
@@ -870,16 +1433,25 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
+github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E=
+github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw=
+github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/rivo/uniseg v0.1.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/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
+github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
+github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
+github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
+github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
+github.com/rubenv/sql-migrate v1.7.1 h1:f/o0WgfO/GqNuVg+6801K/KW3WdDSupzSjDYODmiUq4=
+github.com/rubenv/sql-migrate v1.7.1/go.mod h1:Ob2Psprc0/3ggbM6wCzyYVFFuc6FyZrb2AS+ezLDFb4=
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/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w=
+github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk=
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/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg=
@@ -893,12 +1465,15 @@ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVs
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 h1:JIAuq3EEf9cgbU6AtGPK4CTG3Zf6CKMNqf0MHTggAUA=
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
+github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4=
+github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
+github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
-github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
-github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
+github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
+github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
+github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
@@ -915,15 +1490,19 @@ 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.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
+github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tatsushid/go-prettytable v0.0.0-20141013043238-ed2d14c29939 h1:BhIUXV2ySTLrKgh/Hnts+QTQlIbWtomXt3LMdzME0A0=
github.com/tatsushid/go-prettytable v0.0.0-20141013043238-ed2d14c29939/go.mod h1:omGxs4/6hNjxPKUTjmaNkPzehSnNJOJN6pMEbrlYIT4=
-github.com/tetratelabs/wazero v1.7.3 h1:PBH5KVahrt3S2AHgEjKu4u+LlDbbk+nsGE3KLucy6Rw=
-github.com/tetratelabs/wazero v1.7.3/go.mod h1:ytl6Zuh20R/eROuyDaGPkp82O9C/DJfXAwJfQ3X6/7Y=
-github.com/tidwall/gjson v1.17.3 h1:bwWLZU7icoKRG+C+0PNwIKC6FCJO/Q3p2pZvuP0jN94=
-github.com/tidwall/gjson v1.17.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
+github.com/tetratelabs/wabin v0.0.0-20230304001439-f6f874872834 h1:ZF+QBjOI+tILZjBaFj3HgFonKXUcwgJ4djLb6i42S3Q=
+github.com/tetratelabs/wabin v0.0.0-20230304001439-f6f874872834/go.mod h1:m9ymHTgNSEjuxvw8E7WWe4Pl4hZQHXONY8wE6dMLaRk=
+github.com/tetratelabs/wazero v1.8.2 h1:yIgLR/b2bN31bjxwXHD8a3d+BogigR952csSDdLYEv4=
+github.com/tetratelabs/wazero v1.8.2/go.mod h1:yAI0XTsMBhREkM/YDAK/zNou3GoiAce1P6+rp/wQhjs=
+github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
+github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
@@ -936,8 +1515,8 @@ github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVK
github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8=
github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
-github.com/urfave/cli v1.22.15 h1:nuqt+pdC/KqswQKhETJjo7pvn/k4xMUxgW6liI7XpnM=
-github.com/urfave/cli v1.22.15/go.mod h1:wSan1hmo5zeyLGBjRJbzRTNk8gwoYa2B9n4q9dmRIc0=
+github.com/urfave/cli v1.22.16 h1:MH0k6uJxdwdeWQTwhSO42Pwr4YLrNLwBtg1MRgTqPdQ=
+github.com/urfave/cli v1.22.16/go.mod h1:EeJR6BKodywf4zciqrdw6hpCPk68JO9z5LazXZMn5Po=
github.com/variantdev/dag v1.1.0 h1:xodYlSng33KWGvIGMpKUyLcIZRXKiNUx612mZJqYrDg=
github.com/variantdev/dag v1.1.0/go.mod h1:pH1TQsNSLj2uxMo9NNl9zdGy01Wtn+/2MT96BrKmVyE=
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
@@ -955,6 +1534,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.1.32/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.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI=
github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs=
@@ -962,14 +1542,16 @@ github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMzt
github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY=
github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
-github.com/zalando/go-keyring v0.2.3-0.20230503081219-17db2e5354bd h1:D+eeEnOlWcMXbwZ5X3oy68nHafBtGcj1jMKFHtVdybY=
-github.com/zalando/go-keyring v0.2.3-0.20230503081219-17db2e5354bd/go.mod h1:sI3evg9Wvpw3+n4SqplGSJUMwtDeROfD4nsFz4z9PG0=
-github.com/zclconf/go-cty v1.15.0 h1:tTCRWxsexYUmtt/wVxgDClUe+uQusuI443uL6e+5sXQ=
-github.com/zclconf/go-cty v1.15.0/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
+github.com/zalando/go-keyring v0.2.6 h1:r7Yc3+H+Ux0+M72zacZoItR3UDxeWfKTcabvkI8ua9s=
+github.com/zalando/go-keyring v0.2.6/go.mod h1:2TCrxYrbUNYfNS/Kgy/LSrkSQzZ5UPVH85RwfczwvcI=
+github.com/zclconf/go-cty v1.16.2 h1:LAJSwc3v81IRBZyUVQDUdZ7hs3SYs9jv0eZJDWHD/70=
+github.com/zclconf/go-cty v1.16.2/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo=
github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM=
-github.com/zclconf/go-cty-yaml v1.0.3 h1:og/eOQ7lvA/WWhHGFETVWNduJM7Rjsv2RRpx1sdFMLc=
-github.com/zclconf/go-cty-yaml v1.0.3/go.mod h1:9YLUH4g7lOhVWqUbctnVlZ5KLpg7JAprQNgxSZ1Gyxs=
+github.com/zclconf/go-cty-yaml v1.1.0 h1:nP+jp0qPHv2IhUVqmQSzjvqAWcObN0KBkUl2rWBdig0=
+github.com/zclconf/go-cty-yaml v1.1.0/go.mod h1:9YLUH4g7lOhVWqUbctnVlZ5KLpg7JAprQNgxSZ1Gyxs=
+github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
+github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80=
go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
@@ -981,21 +1563,29 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8=
-go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw=
-go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8=
-go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc=
-go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8=
-go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE=
-go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg=
-go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4=
-go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ=
+go.opentelemetry.io/contrib/detectors/gcp v1.29.0 h1:TiaiXB4DpGD3sdzNlYQxruQngn5Apwzi1X0DRhuGvDQ=
+go.opentelemetry.io/contrib/detectors/gcp v1.29.0/go.mod h1:GW2aWZNwR2ZxDLdv8OyC2G8zkRoQBuURgV7RPQgcPoU=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0 h1:hCq2hNMwsegUvPzI7sPOvtO9cqyy5GbWt/Ybp2xrx8Q=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.55.0/go.mod h1:LqaApwGx/oUmzsbqxkzuBvyoPpkxk3JQWnqfVrJ3wCA=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0 h1:ZIg3ZT/aQ7AfKqdwp7ECpOK6vHqquXXuyTjIO8ZdmPs=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.55.0/go.mod h1:DQAwmETtZV00skUwgD6+0U89g80NKsJE3DCKeLLPQMI=
+go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts=
+go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I=
+go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w=
+go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ=
+go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo=
+go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok=
+go.opentelemetry.io/otel/sdk/metric v1.29.0 h1:K2CfmJohnRgvZ9UAj2/FhIf/okdWcNdBwe1m8xFXiSY=
+go.opentelemetry.io/otel/sdk/metric v1.29.0/go.mod h1:6zZLdCl2fkauYoZIOn/soQIDSWFmNSRcICarHfuhNJQ=
+go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc=
+go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
-go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY=
-go.starlark.net v0.0.0-20230525235612-a134d8f9ddca/go.mod h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds=
+go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
+go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
+go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
+go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
go.szostok.io/version v1.2.0 h1:8eMMdfsonjbibwZRLJ8TnrErY8bThFTQsZYV16mcXms=
go.szostok.io/version v1.2.0/go.mod h1:EiU0gPxaXb6MZ+apSN0WgDO6F4JXyC99k9PIXf2k2E8=
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
@@ -1010,25 +1600,48 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
-golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
-golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
+golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
+golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
+golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
+golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
+golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
+golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
+golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
+golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
+golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
+golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
+golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
+golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
+golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -1052,9 +1665,17 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
+golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
-golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
+golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1087,11 +1708,14 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
@@ -1103,11 +1727,22 @@ golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug
golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/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.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
+golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
-golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
+golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
+golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
+golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
-golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
-golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
+golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
+golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
+golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
+golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
+golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
+golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
+golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
+golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
+golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1131,10 +1766,14 @@ golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7Lm
golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE=
golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
+golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
-golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A=
-golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
-golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec=
+golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I=
+golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw=
+golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4=
+golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc=
+golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1148,9 +1787,15 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
-golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
+golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1168,6 +1813,7 @@ golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1187,11 +1833,14 @@ golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -1199,9 +1848,11 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -1221,19 +1872,38 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.4.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.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
-golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
+golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
+golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
+golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
-golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM=
-golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8=
+golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
+golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
+golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
+golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
+golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
+golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
+golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
+golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o=
+golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/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.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1243,17 +1913,31 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.5/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.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.6.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.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
-golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
+golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
+golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
+golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
+golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
+golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
-golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
+golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/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-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
@@ -1266,6 +1950,7 @@ golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgw
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -1295,19 +1980,27 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA=
-golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c=
+golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
+golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
+golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
+golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ=
+golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -1316,8 +2009,14 @@ golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
-golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
-golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
+gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
+gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
+gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0=
+gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA=
+gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
+gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
+gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY=
+gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@@ -1365,9 +2064,18 @@ google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaE
google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
+google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08=
google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70=
-google.golang.org/api v0.196.0 h1:k/RafYqebaIJBO3+SMnfEGtFVlvp5vSgqTUF54UN/zg=
-google.golang.org/api v0.196.0/go.mod h1:g9IL21uGkYgvQ5BZg6BAtoGJQIm8r6EgaAbpNey5wBE=
+google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo=
+google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0=
+google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY=
+google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY=
+google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY=
+google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI=
+google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0=
+google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg=
+google.golang.org/api v0.215.0 h1:jdYF4qnyczlEz2ReWIsosNLDuzXyvFHJtI5gcr0J7t0=
+google.golang.org/api v0.215.0/go.mod h1:fta3CVtuJYOEdugLNWm6WodzOS8KdFckABwN4I40hzY=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -1410,7 +2118,9 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
@@ -1443,6 +2153,7 @@ google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2
google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E=
+google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
@@ -1475,13 +2186,41 @@ google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53B
google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U=
google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
-google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
-google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 h1:BulPr26Jqjnd4eYDVe+YvyR7Yc2vJGkO5/0UxD0/jZU=
-google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:hL97c3SYopEHblzpxRL4lSs523++l8DYxGM1FQiYmb4=
-google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed h1:3RgNmBoI9MZhsj3QxC+AP/qQhNwpCLOvYDYYsFrhFt0=
-google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:OCdP9MfskevB/rbYvHTsXTtKC+3bHWajPdoKgjcYkfo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
+google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
+google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
+google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo=
+google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
+google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
+google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
+google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
+google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
+google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
+google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE=
+google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA=
+google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw=
+google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw=
+google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA=
+google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s=
+google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s=
+google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
+google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
+google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
+google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
+google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 h1:ToEetK57OidYuqD4Q5w+vfEnPvPpuTwedCNVohYJfNk=
+google.golang.org/genproto v0.0.0-20241118233622-e639e219e697/go.mod h1:JJrvXBWRZaFMxBufik1a4RpFw4HhgVtBBWQeQgUj2cc=
+google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q=
+google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8 h1:TqExAhdPaB60Ux47Cn0oLV07rGnxZzIsaRhQaqS666A=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8/go.mod h1:lcTa1sDdWEIHMWlITnIczmw5w60CF9ffkb8Z+DVmmjA=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
@@ -1508,6 +2247,7 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD
google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
+google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
@@ -1517,9 +2257,16 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu
google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
-google.golang.org/grpc v1.66.0 h1:DibZuoBznOxbDQxRINckZcUvnCEvrW9pcWIE2yF9r1c=
-google.golang.org/grpc v1.66.0/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y=
+google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww=
+google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY=
+google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw=
+google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g=
+google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s=
+google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0=
+google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
+google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a h1:UIpYSuWdWHSzjwcAFRLjKcPXFZVVLXGEM23W+NWqipw=
+google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a/go.mod h1:9i1T9n4ZinTUZGgzENMi8MDDgbGC5mqTS75JAv6xN3A=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -1535,8 +2282,11 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
-google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
+google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
+google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
+google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -1558,10 +2308,14 @@ gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
-helm.sh/helm/v3 v3.16.1 h1:cER6tI/8PgUAsaJaQCVBUg3VI9KN4oVaZJgY60RIc0c=
-helm.sh/helm/v3 v3.16.1/go.mod h1:r+xBHHP20qJeEqtvBXMf7W35QDJnzY/eiEBzt+TfHps=
+helm.sh/helm/v3 v3.17.3 h1:3n5rW3D0ArjFl0p4/oWO8IbY/HKaNNwJtOQFdH2AZHg=
+helm.sh/helm/v3 v3.17.3/go.mod h1:+uJKMH/UiMzZQOALR3XUf3BLIoczI2RKKD6bMhPh4G8=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -1569,32 +2323,77 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-k8s.io/api v0.31.0 h1:b9LiSjR2ym/SzTOlfMHm1tr7/21aD7fSkqgD/CVJBCo=
-k8s.io/api v0.31.0/go.mod h1:0YiFF+JfFxMM6+1hQei8FY8M7s1Mth+z/q7eF1aJkTE=
-k8s.io/apimachinery v0.31.1 h1:mhcUBbj7KUjaVhyXILglcVjuS4nYXiwC+KKFBgIVy7U=
-k8s.io/apimachinery v0.31.1/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo=
-k8s.io/cli-runtime v0.31.0 h1:V2Q1gj1u3/WfhD475HBQrIYsoryg/LrhhK4RwpN+DhA=
-k8s.io/cli-runtime v0.31.0/go.mod h1:vg3H94wsubuvWfSmStDbekvbla5vFGC+zLWqcf+bGDw=
-k8s.io/client-go v0.31.0 h1:QqEJzNjbN2Yv1H79SsS+SWnXkBgVu4Pj3CJQgbx0gI8=
-k8s.io/client-go v0.31.0/go.mod h1:Y9wvC76g4fLjmU0BA+rV+h2cncoadjvjjkkIGoTLcGU=
+honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las=
+k8s.io/api v0.32.3 h1:Hw7KqxRusq+6QSplE3NYG4MBxZw1BZnq4aP4cJVINls=
+k8s.io/api v0.32.3/go.mod h1:2wEDTXADtm/HA7CCMD8D8bK4yuBUptzaRhYcYEEYA3k=
+k8s.io/apiextensions-apiserver v0.32.2 h1:2YMk285jWMk2188V2AERy5yDwBYrjgWYggscghPCvV4=
+k8s.io/apiextensions-apiserver v0.32.2/go.mod h1:GPwf8sph7YlJT3H6aKUWtd0E+oyShk/YHWQHf/OOgCA=
+k8s.io/apimachinery v0.33.0 h1:1a6kHrJxb2hs4t8EE5wuR/WxKDwGN1FKH3JvDtA0CIQ=
+k8s.io/apimachinery v0.33.0/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM=
+k8s.io/cli-runtime v0.32.2 h1:aKQR4foh9qeyckKRkNXUccP9moxzffyndZAvr+IXMks=
+k8s.io/cli-runtime v0.32.2/go.mod h1:a/JpeMztz3xDa7GCyyShcwe55p8pbcCVQxvqZnIwXN8=
+k8s.io/client-go v0.32.3 h1:RKPVltzopkSgHS7aS98QdscAgtgah/+zmpAogooIqVU=
+k8s.io/client-go v0.32.3/go.mod h1:3v0+3k4IcT9bXTc4V2rt+d2ZPPG700Xy6Oi0Gdl2PaY=
+k8s.io/component-base v0.32.2 h1:1aUL5Vdmu7qNo4ZsE+569PV5zFatM9hl+lb3dEea2zU=
+k8s.io/component-base v0.32.2/go.mod h1:PXJ61Vx9Lg+P5mS8TLd7bCIr+eMJRQTyXe8KvkrvJq0=
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag=
-k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98=
-k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A=
-k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4=
+k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8=
+k8s.io/kubectl v0.32.2 h1:TAkag6+XfSBgkqK9I7ZvwtF0WVtUAvK8ZqTt+5zi1Us=
+k8s.io/kubectl v0.32.2/go.mod h1:+h/NQFSPxiDZYX/WZaWw9fwYezGLISP0ud8nQKg+3g8=
+k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
+k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
+lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
+modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI=
+modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI=
+modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI=
+modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc=
+modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw=
+modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ=
+modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ=
+modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws=
+modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo=
+modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
+modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
+modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA=
+modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A=
+modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU=
+modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU=
+modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA=
+modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0=
+modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s=
+modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
+modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
+modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
+modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw=
+modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw=
+modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
+modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
+modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
+modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4=
+modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw=
+modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw=
+modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw=
+modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
+modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8=
oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo=
oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
+rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
-sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
-sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
-sigs.k8s.io/kustomize/api v0.17.3 h1:6GCuHSsxq7fN5yhF2XrC+AAr8gxQwhexgHflOAD/JJU=
-sigs.k8s.io/kustomize/api v0.17.3/go.mod h1:TuDH4mdx7jTfK61SQ/j1QZM/QWR+5rmEiNjvYlhzFhc=
-sigs.k8s.io/kustomize/kyaml v0.17.2 h1:+AzvoJUY0kq4QAhH/ydPHHMRLijtUKiyVyh7fOSshr0=
-sigs.k8s.io/kustomize/kyaml v0.17.2/go.mod h1:9V0mCjIEYjlXuCdYsSXvyoy2BTsLESH7TlGV81S282U=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
+sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
+sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
+sigs.k8s.io/kustomize/api v0.18.0 h1:hTzp67k+3NEVInwz5BHyzc9rGxIauoXferXyjv5lWPo=
+sigs.k8s.io/kustomize/api v0.18.0/go.mod h1:f8isXnX+8b+SGLHQ6yO4JG1rdkZlvhaCf/uZbLVMb0U=
+sigs.k8s.io/kustomize/kyaml v0.18.1 h1:WvBo56Wzw3fjS+7vBjN6TeivvpbW9GmRaWZ9CIVmt4E=
+sigs.k8s.io/kustomize/kyaml v0.18.1/go.mod h1:C3L2BFVU1jgcddNBE1TxuVLgS46TjObMwW5FT9FcjYo=
+sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
+sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
+sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
+sigs.k8s.io/structured-merge-diff/v4 v4.6.0 h1:IUA9nvMmnKWcj5jl84xn+T5MnlZKThmUW1TdblaLVAc=
+sigs.k8s.io/structured-merge-diff/v4 v4.6.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps=
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
diff --git a/pkg/app/app.go b/pkg/app/app.go
index e7356abb..8047fc82 100644
--- a/pkg/app/app.go
+++ b/pkg/app/app.go
@@ -20,7 +20,6 @@ import (
"github.com/helmfile/helmfile/pkg/helmexec"
"github.com/helmfile/helmfile/pkg/plugins"
"github.com/helmfile/helmfile/pkg/remote"
- "github.com/helmfile/helmfile/pkg/runtime"
"github.com/helmfile/helmfile/pkg/state"
)
@@ -139,26 +138,6 @@ func (a *App) Repos(c ReposConfigProvider) error {
}, c.IncludeTransitiveNeeds(), SetFilter(true))
}
-// TODO: Remove this function once Helmfile v0.x
-func (a *App) DeprecatedSyncCharts(c DeprecatedChartsConfigProvider) error {
- return a.ForEachState(func(run *Run) (_ bool, errs []error) {
- err := run.withPreparedCharts("charts", state.ChartPrepareOptions{
- SkipRepos: true,
- SkipDeps: true,
- Concurrency: 2,
- }, func() []error {
- errs = run.DeprecatedSyncCharts(c)
- return errs
- })
-
- if err != nil {
- errs = append(errs, err)
- }
-
- return
- }, c.IncludeTransitiveNeeds(), SetFilter(true))
-}
-
func (a *App) Diff(c DiffConfigProvider) error {
var allDiffDetectedErrs []error
@@ -176,7 +155,8 @@ func (a *App) Diff(c DiffConfigProvider) error {
includeCRDs := !c.SkipCRDs()
prepErr := run.withPreparedCharts("diff", state.ChartPrepareOptions{
- SkipRepos: c.SkipDeps(),
+ SkipRepos: c.SkipRefresh() || c.SkipDeps(),
+ SkipRefresh: c.SkipRefresh(),
SkipDeps: c.SkipDeps(),
IncludeCRDs: &includeCRDs,
Validate: c.Validate(),
@@ -241,8 +221,13 @@ func (a *App) Template(c TemplateConfigProvider) error {
// Live output should never be enabled for the "template" subcommand to avoid breaking `helmfile template | kubectl apply -f -`
run.helm.SetEnableLiveOutput(false)
+ // Reset helm extra args to not pollute BuildDeps() and AddRepo() on subsequent helmfiles
+ // https://github.com/helmfile/helmfile/issues/1749
+ run.helm.SetExtraArgs()
+
prepErr := run.withPreparedCharts("template", state.ChartPrepareOptions{
- SkipRepos: c.SkipDeps(),
+ SkipRepos: c.SkipRefresh() || c.SkipDeps(),
+ SkipRefresh: c.SkipRefresh(),
SkipDeps: c.SkipDeps(),
IncludeCRDs: &includeCRDs,
SkipCleanup: c.SkipCleanup(),
@@ -250,6 +235,7 @@ func (a *App) Template(c TemplateConfigProvider) error {
Concurrency: c.Concurrency(),
IncludeTransitiveNeeds: c.IncludeNeeds(),
Set: c.Set(),
+ Values: c.Values(),
KubeVersion: c.KubeVersion(),
}, func() []error {
ok, errs = a.template(run, c)
@@ -267,7 +253,8 @@ func (a *App) Template(c TemplateConfigProvider) error {
func (a *App) WriteValues(c WriteValuesConfigProvider) error {
return a.ForEachState(func(run *Run) (ok bool, errs []error) {
prepErr := run.withPreparedCharts("write-values", state.ChartPrepareOptions{
- SkipRepos: c.SkipDeps(),
+ SkipRepos: c.SkipRefresh() || c.SkipDeps(),
+ SkipRefresh: c.SkipRefresh(),
SkipDeps: c.SkipDeps(),
SkipCleanup: c.SkipCleanup(),
Concurrency: c.Concurrency(),
@@ -319,7 +306,8 @@ func (a *App) Lint(c LintConfigProvider) error {
// `helm lint` on helm v2 and v3 does not support remote charts, that we need to set `forceDownload=true` here
prepErr := run.withPreparedCharts("lint", state.ChartPrepareOptions{
ForceDownload: true,
- SkipRepos: c.SkipDeps(),
+ SkipRepos: c.SkipRefresh() || c.SkipDeps(),
+ SkipRefresh: c.SkipRefresh(),
SkipDeps: c.SkipDeps(),
SkipCleanup: c.SkipCleanup(),
Concurrency: c.Concurrency(),
@@ -355,7 +343,8 @@ func (a *App) Fetch(c FetchConfigProvider) error {
return a.ForEachState(func(run *Run) (ok bool, errs []error) {
prepErr := run.withPreparedCharts("pull", state.ChartPrepareOptions{
ForceDownload: true,
- SkipRepos: c.SkipDeps(),
+ SkipRefresh: c.SkipRefresh(),
+ SkipRepos: c.SkipRefresh() || c.SkipDeps(),
SkipDeps: c.SkipDeps(),
OutputDir: c.OutputDir(),
OutputDirTemplate: c.OutputDirTemplate(),
@@ -377,9 +366,11 @@ func (a *App) Sync(c SyncConfigProvider) error {
includeCRDs := !c.SkipCRDs()
prepErr := run.withPreparedCharts("sync", state.ChartPrepareOptions{
- SkipRepos: c.SkipDeps(),
+ SkipRepos: c.SkipRefresh() || c.SkipDeps(),
+ SkipRefresh: c.SkipRefresh(),
SkipDeps: c.SkipDeps(),
Wait: c.Wait(),
+ WaitRetries: c.WaitRetries(),
WaitForJobs: c.WaitForJobs(),
IncludeCRDs: &includeCRDs,
IncludeTransitiveNeeds: c.IncludeNeeds(),
@@ -405,18 +396,20 @@ func (a *App) Apply(c ApplyConfigProvider) error {
var opts []LoadOption
- opts = append(opts, SetRetainValuesFiles(c.RetainValuesFiles() || c.SkipCleanup()))
+ opts = append(opts, SetRetainValuesFiles(c.SkipCleanup()))
err := a.ForEachState(func(run *Run) (ok bool, errs []error) {
includeCRDs := !c.SkipCRDs()
prepErr := run.withPreparedCharts("apply", state.ChartPrepareOptions{
- SkipRepos: c.SkipDeps(),
+ SkipRepos: c.SkipRefresh() || c.SkipDeps(),
+ SkipRefresh: c.SkipRefresh(),
SkipDeps: c.SkipDeps(),
Wait: c.Wait(),
+ WaitRetries: c.WaitRetries(),
WaitForJobs: c.WaitForJobs(),
IncludeCRDs: &includeCRDs,
- SkipCleanup: c.RetainValuesFiles() || c.SkipCleanup(),
+ SkipCleanup: c.SkipCleanup(),
Validate: c.Validate(),
Concurrency: c.Concurrency(),
IncludeTransitiveNeeds: c.IncludeNeeds(),
@@ -470,36 +463,12 @@ func (a *App) Status(c StatusesConfigProvider) error {
}, false, SetFilter(true))
}
-// TODO: Remove this function once Helmfile v0.x
-func (a *App) Delete(c DeleteConfigProvider) error {
- return a.ForEachState(func(run *Run) (ok bool, errs []error) {
- if !c.SkipCharts() {
- err := run.withPreparedCharts("delete", state.ChartPrepareOptions{
- SkipRepos: c.SkipDeps(),
- SkipDeps: c.SkipDeps(),
- Concurrency: c.Concurrency(),
- DeleteWait: c.DeleteWait(),
- DeleteTimeout: c.DeleteTimeout(),
- }, func() []error {
- ok, errs = a.delete(run, c.Purge(), c)
- return errs
- })
-
- if err != nil {
- errs = append(errs, err)
- }
- } else {
- ok, errs = a.delete(run, c.Purge(), c)
- }
- return
- }, false, SetReverse(true))
-}
-
func (a *App) Destroy(c DestroyConfigProvider) error {
return a.ForEachState(func(run *Run) (ok bool, errs []error) {
if !c.SkipCharts() {
err := run.withPreparedCharts("destroy", state.ChartPrepareOptions{
- SkipRepos: c.SkipDeps(),
+ SkipRepos: c.SkipRefresh() || c.SkipDeps(),
+ SkipRefresh: c.SkipRefresh(),
SkipDeps: c.SkipDeps(),
Concurrency: c.Concurrency(),
DeleteWait: c.DeleteWait(),
@@ -527,7 +496,8 @@ func (a *App) Test(c TestConfigProvider) error {
}
err := run.withPreparedCharts("test", state.ChartPrepareOptions{
- SkipRepos: c.SkipDeps(),
+ SkipRepos: c.SkipRefresh() || c.SkipDeps(),
+ SkipRefresh: c.SkipRefresh(),
SkipDeps: c.SkipDeps(),
Concurrency: c.Concurrency(),
}, func() []error {
@@ -1021,14 +991,14 @@ func printBatches(batches [][]state.Release) string {
w.Init(buf, 0, 1, 1, ' ', 0)
- fmt.Fprintln(w, "GROUP\tRELEASES")
+ _, _ = fmt.Fprintln(w, "GROUP\tRELEASES")
for i, batch := range batches {
ids := []string{}
for _, r := range batch {
ids = append(ids, state.ReleaseToID(&r.ReleaseSpec))
}
- fmt.Fprintf(w, "%d\t%s\n", i+1, strings.Join(ids, ", "))
+ _, _ = fmt.Fprintf(w, "%d\t%s\n", i+1, strings.Join(ids, ", "))
}
_ = w.Flush()
@@ -1043,13 +1013,13 @@ func printDAG(batches [][]state.Release) string {
w.Init(buf, 0, 1, 1, ' ', 0)
- fmt.Fprintln(w, "GROUP\tRELEASE\tDEPENDENCIES")
+ _, _ = fmt.Fprintln(w, "GROUP\tRELEASE\tDEPENDENCIES")
for i, batch := range batches {
for _, r := range batch {
id := state.ReleaseToID(&r.ReleaseSpec)
- needs := r.ReleaseSpec.Needs
- fmt.Fprintf(w, "%d\t%s\t%s\n", i+1, id, strings.Join(needs, ", "))
+ needs := r.Needs
+ _, _ = fmt.Fprintf(w, "%d\t%s\t%s\n", i+1, id, strings.Join(needs, ", "))
}
}
@@ -1149,13 +1119,17 @@ func (a *App) visitStatesWithSelectorsAndRemoteSupport(fileOrDir string, converg
}
}
- // pre-overrides HelmState
+ // pre-handles HelmState
fHelmStatsWithOverrides := func(st *state.HelmState) (bool, []error) {
var err error
+ // override release settings
st.Releases, err = st.GetReleasesWithOverrides()
if err != nil {
return false, []error{err}
}
+
+ // override release labels
+ st.Releases = st.GetReleasesWithLabels()
return f(st)
}
@@ -1258,16 +1232,6 @@ func (a *App) findDesiredStateFiles(specifiedPath string, opts LoadOpts) ([]stri
case a.fs.FileExistsAt(DefaultGotmplHelmfile):
defaultFile = DefaultGotmplHelmfile
-
- // TODO: Remove this block when we remove v0 code
- case !runtime.V1Mode && a.fs.FileExistsAt(DeprecatedHelmfile):
- a.Logger.Warnf(
- "warn: %s is being loaded: %s is deprecated in favor of %s. See https://github.com/roboll/helmfile/issues/25 for more information",
- DeprecatedHelmfile,
- DeprecatedHelmfile,
- DefaultHelmfile,
- )
- defaultFile = DeprecatedHelmfile
}
switch {
@@ -1322,7 +1286,6 @@ func (a *App) getSelectedReleases(r *Run, includeTransitiveNeeds bool) ([]state.
selectedIds := map[string]state.ReleaseSpec{}
selectedCounts := map[string]int{}
for _, r := range selected {
- r := r
id := state.ReleaseToID(&r)
selectedIds[id] = r
selectedCounts[id]++
@@ -1336,7 +1299,6 @@ func (a *App) getSelectedReleases(r *Run, includeTransitiveNeeds bool) ([]state.
groupsByID := map[string][]*state.ReleaseSpec{}
for _, r := range allReleases {
- r := r
groupsByID[state.ReleaseToID(&r)] = append(groupsByID[state.ReleaseToID(&r)], &r)
}
@@ -1432,13 +1394,14 @@ func (a *App) apply(r *Run, c ApplyConfigProvider) (bool, bool, []error) {
Context: c.Context(),
Output: c.DiffOutput(),
Set: c.Set(),
- SkipCleanup: c.RetainValuesFiles() || c.SkipCleanup(),
+ SkipCleanup: c.SkipCleanup(),
SkipDiffOnInstall: c.SkipDiffOnInstall(),
ReuseValues: c.ReuseValues(),
ResetValues: c.ResetValues(),
DiffArgs: c.DiffArgs(),
PostRenderer: c.PostRenderer(),
PostRendererArgs: c.PostRendererArgs(),
+ SkipSchemaValidation: c.SkipSchemaValidation(),
SuppressOutputLineRegex: c.SuppressOutputLineRegex(),
}
@@ -1542,17 +1505,21 @@ Do you really want to apply?
subst.Releases = rs
syncOpts := &state.SyncOpts{
- Set: c.Set(),
- SkipCleanup: c.RetainValuesFiles() || c.SkipCleanup(),
- SkipCRDs: c.SkipCRDs(),
- Wait: c.Wait(),
- WaitForJobs: c.WaitForJobs(),
- ReuseValues: c.ReuseValues(),
- ResetValues: c.ResetValues(),
- PostRenderer: c.PostRenderer(),
- PostRendererArgs: c.PostRendererArgs(),
- SyncArgs: c.SyncArgs(),
- HideNotes: c.HideNotes(),
+ Set: c.Set(),
+ SkipCleanup: c.SkipCleanup(),
+ SkipCRDs: c.SkipCRDs(),
+ Wait: c.Wait(),
+ WaitRetries: c.WaitRetries(),
+ WaitForJobs: c.WaitForJobs(),
+ ReuseValues: c.ReuseValues(),
+ ResetValues: c.ResetValues(),
+ PostRenderer: c.PostRenderer(),
+ PostRendererArgs: c.PostRendererArgs(),
+ SkipSchemaValidation: c.SkipSchemaValidation(),
+ SyncArgs: c.SyncArgs(),
+ HideNotes: c.HideNotes(),
+ TakeOwnership: c.TakeOwnership(),
+ SyncReleaseLabels: c.SyncReleaseLabels(),
}
return subst.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency(), syncOpts)
}))
@@ -1678,6 +1645,7 @@ func (a *App) diff(r *Run, c DiffConfigProvider) (*string, bool, bool, []error)
ResetValues: c.ResetValues(),
PostRenderer: c.PostRenderer(),
PostRendererArgs: c.PostRendererArgs(),
+ SkipSchemaValidation: c.SkipSchemaValidation(),
SuppressOutputLineRegex: c.SuppressOutputLineRegex(),
}
@@ -1937,16 +1905,20 @@ Do you really want to sync?
subst.Releases = rs
opts := &state.SyncOpts{
- Set: c.Set(),
- SkipCRDs: c.SkipCRDs(),
- Wait: c.Wait(),
- WaitForJobs: c.WaitForJobs(),
- ReuseValues: c.ReuseValues(),
- ResetValues: c.ResetValues(),
- PostRenderer: c.PostRenderer(),
- PostRendererArgs: c.PostRendererArgs(),
- SyncArgs: c.SyncArgs(),
- HideNotes: c.HideNotes(),
+ Set: c.Set(),
+ SkipCRDs: c.SkipCRDs(),
+ Wait: c.Wait(),
+ WaitRetries: c.WaitRetries(),
+ WaitForJobs: c.WaitForJobs(),
+ ReuseValues: c.ReuseValues(),
+ ResetValues: c.ResetValues(),
+ PostRenderer: c.PostRenderer(),
+ PostRendererArgs: c.PostRendererArgs(),
+ SyncArgs: c.SyncArgs(),
+ HideNotes: c.HideNotes(),
+ TakeOwnership: c.TakeOwnership(),
+ SkipSchemaValidation: c.SkipSchemaValidation(),
+ SyncReleaseLabels: c.SyncReleaseLabels(),
}
return subst.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency(), opts)
}))
@@ -1974,15 +1946,17 @@ func (a *App) template(r *Run, c TemplateConfigProvider) (bool, []error) {
}
opts := &state.TemplateOpts{
- Set: c.Set(),
- IncludeCRDs: c.IncludeCRDs(),
- OutputDirTemplate: c.OutputDirTemplate(),
- SkipCleanup: c.SkipCleanup(),
- SkipTests: c.SkipTests(),
- PostRenderer: c.PostRenderer(),
- PostRendererArgs: c.PostRendererArgs(),
- KubeVersion: c.KubeVersion(),
- ShowOnly: c.ShowOnly(),
+ Set: c.Set(),
+ IncludeCRDs: c.IncludeCRDs(),
+ NoHooks: c.NoHooks(),
+ OutputDirTemplate: c.OutputDirTemplate(),
+ SkipCleanup: c.SkipCleanup(),
+ SkipTests: c.SkipTests(),
+ PostRenderer: c.PostRenderer(),
+ PostRendererArgs: c.PostRendererArgs(),
+ KubeVersion: c.KubeVersion(),
+ ShowOnly: c.ShowOnly(),
+ SkipSchemaValidation: c.SkipSchemaValidation(),
}
return st.TemplateReleases(helm, c.OutputDir(), c.Values(), args, c.Concurrency(), c.Validate(), opts)
})
diff --git a/pkg/app/app_apply_hooks_test.go b/pkg/app/app_apply_hooks_test.go
index 71aff79c..c385b157 100644
--- a/pkg/app/app_apply_hooks_test.go
+++ b/pkg/app/app_apply_hooks_test.go
@@ -161,7 +161,7 @@ releases:
{Name: "foo"},
},
diffs: map[exectest.DiffKey]error{
- {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
error: "",
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
@@ -192,7 +192,7 @@ releases:
{Name: "foo"},
},
diffs: map[exectest.DiffKey]error{
- {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
error: "",
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
@@ -223,7 +223,7 @@ releases:
{Name: "foo"},
},
diffs: map[exectest.DiffKey]error{
- {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
error: "",
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
@@ -252,7 +252,7 @@ releases:
},
selectors: []string{"app=test"},
diffs: map[exectest.DiffKey]error{
- {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: nil,
+ {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: nil,
},
error: "",
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
@@ -299,8 +299,8 @@ releases:
{Name: "bar"},
},
diffs: map[exectest.DiffKey]error{
- {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "bar", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
error: "",
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
@@ -346,7 +346,7 @@ releases:
{Name: "foo"},
},
diffs: map[exectest.DiffKey]error{
- {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
error: "",
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
@@ -396,7 +396,7 @@ bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
{Name: "foo"},
},
diffs: map[exectest.DiffKey]error{
- {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
error: "",
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
@@ -444,7 +444,7 @@ foo 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 default
{Name: "foo"},
},
diffs: map[exectest.DiffKey]error{
- {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
error: "",
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
diff --git a/pkg/app/app_apply_nokubectx_test.go b/pkg/app/app_apply_nokubectx_test.go
index 437a467c..c844fcde 100644
--- a/pkg/app/app_apply_nokubectx_test.go
+++ b/pkg/app/app_apply_nokubectx_test.go
@@ -146,7 +146,7 @@ func TestApply_3(t *testing.T) {
skipNeeds: true,
},
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -177,8 +177,8 @@ releases:
{Name: "my-release", Flags: []string{"--namespace", "default"}},
},
diffs: map[exectest.DiffKey]error{
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^external-secrets$", Flags: listFlags("default", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -199,7 +199,7 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
skipNeeds: true,
},
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -234,8 +234,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: nil,
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: nil,
},
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
concurrency: 1,
@@ -250,7 +250,7 @@ releases:
},
error: ``,
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -278,9 +278,9 @@ releases:
selectors: []string{"app=test"},
upgraded: []exectest.Release{},
diffs: map[exectest.DiffKey]error{
- {Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--namespace kube-system --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--namespace kube-system --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^kubernetes-external-secrets$", Flags: listFlags("kube-system", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -306,7 +306,7 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
},
error: ``,
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -334,9 +334,9 @@ releases:
selectors: []string{"app=test"},
upgraded: []exectest.Release{},
diffs: map[exectest.DiffKey]error{
- {Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--namespace kube-system --detailed-exitcode --reset-values"}: nil,
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--namespace kube-system --reset-values --detailed-exitcode"}: nil,
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^external-secrets$", Flags: listFlags("default", "")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -359,7 +359,7 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
},
error: ``,
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -399,8 +399,8 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
concurrency: 1,
@@ -415,7 +415,7 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
},
error: ``,
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -453,8 +453,8 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
concurrency: 1,
@@ -464,7 +464,7 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
t.Run("bad --selector", func(t *testing.T) {
check(t, testcase{
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -494,72 +494,6 @@ releases:
error: "err: no releases found that matches specified selector(app=test_non_existent) and environment(default), in any helmfile",
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
concurrency: 1,
- log: `processing file "helmfile.yaml" in directory "."
-changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-merged environment: &{default map[] map[]}
-0 release(s) matching app=test_non_existent found in helmfile.yaml
-
-changing working directory back to "/path/to"
-`,
})
})
}
diff --git a/pkg/app/app_apply_test.go b/pkg/app/app_apply_test.go
index 057cd683..8f60aa49 100644
--- a/pkg/app/app_apply_test.go
+++ b/pkg/app/app_apply_test.go
@@ -146,7 +146,7 @@ func TestApply_2(t *testing.T) {
skipNeeds: true,
},
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -177,8 +177,8 @@ releases:
{Name: "my-release", Flags: []string{"--kube-context", "default", "--namespace", "default"}},
},
diffs: map[exectest.DiffKey]error{
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^external-secrets$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -199,7 +199,7 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
skipNeeds: true,
},
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -234,8 +234,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: nil,
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: nil,
},
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
concurrency: 1,
@@ -250,7 +250,7 @@ releases:
},
error: ``,
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -278,9 +278,9 @@ releases:
selectors: []string{"app=test"},
upgraded: []exectest.Release{},
diffs: map[exectest.DiffKey]error{
- {Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace kube-system --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace kube-system --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^kubernetes-external-secrets$", Flags: listFlags("kube-system", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -306,7 +306,7 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
},
error: ``,
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -334,9 +334,9 @@ releases:
selectors: []string{"app=test"},
upgraded: []exectest.Release{},
diffs: map[exectest.DiffKey]error{
- {Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace kube-system --detailed-exitcode --reset-values"}: nil,
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "kubernetes-external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace kube-system --reset-values --detailed-exitcode"}: nil,
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^external-secrets$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -359,7 +359,7 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
},
error: ``,
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -399,8 +399,8 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
concurrency: 1,
@@ -415,7 +415,7 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
},
error: ``,
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -453,8 +453,8 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
concurrency: 1,
@@ -470,7 +470,7 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
},
error: ``,
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -494,9 +494,9 @@ releases:
selectors: []string{"name=serviceA"},
upgraded: []exectest.Release{},
diffs: map[exectest.DiffKey]error{
- {Name: "serviceA", Chart: "my/chart", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "serviceB", Chart: "my/chart", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "serviceC", Chart: "my/chart", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "serviceA", Chart: "my/chart", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "serviceB", Chart: "my/chart", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "serviceC", Chart: "my/chart", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^serviceA$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -517,7 +517,7 @@ serviceC 4 Fri Nov 1 08:40:07 2019 DEPLOYED chart-3.1.0 3.1.0 def
t.Run("bad --selector", func(t *testing.T) {
check(t, testcase{
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -547,72 +547,6 @@ releases:
error: "err: no releases found that matches specified selector(app=test_non_existent) and environment(default), in any helmfile",
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
concurrency: 1,
- log: `processing file "helmfile.yaml" in directory "."
-changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-merged environment: &{default map[] map[]}
-0 release(s) matching app=test_non_existent found in helmfile.yaml
-
-changing working directory back to "/path/to"
-`,
})
})
@@ -641,7 +575,7 @@ releases:
selectors: []string{"index=1"},
upgraded: []exectest.Release{},
diffs: map[exectest.DiffKey]error{
- {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -707,7 +641,7 @@ releases:
selectors: []string{"name=foo"},
upgraded: []exectest.Release{},
diffs: map[exectest.DiffKey]error{
- {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("default", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
diff --git a/pkg/app/app_diff_test.go b/pkg/app/app_diff_test.go
index ccf499f5..d9f7b691 100644
--- a/pkg/app/app_diff_test.go
+++ b/pkg/app/app_diff_test.go
@@ -280,8 +280,8 @@ releases:
},
selectors: []string{"app=test"},
diffed: []exectest.Release{
- {Name: "external-secrets", Flags: []string{"--kube-context", "default", "--namespace", "default", "--no-hooks", "--reset-values"}},
- {Name: "my-release", Flags: []string{"--kube-context", "default", "--namespace", "default", "--no-hooks", "--reset-values"}},
+ {Name: "external-secrets", Flags: []string{"--kube-context", "default", "--namespace", "default", "--reset-values", "--no-hooks"}},
+ {Name: "my-release", Flags: []string{"--kube-context", "default", "--namespace", "default", "--reset-values", "--no-hooks"}},
},
})
})
diff --git a/pkg/app/app_list_test.go b/pkg/app/app_list_test.go
index 38f4afe5..d7775a83 100644
--- a/pkg/app/app_list_test.go
+++ b/pkg/app/app_list_test.go
@@ -159,17 +159,17 @@ releases:
t.Run("default environment includes all releases", func(t *testing.T) {
check(t, testcase{
environment: "default",
- expected: `NAME NAMESPACE ENABLED INSTALLED LABELS CHART VERSION
-logging kube-system true true incubator/raw
-kubernetes-external-secrets kube-system true true incubator/raw
-external-secrets default true true app:test incubator/raw
-my-release default true true app:test incubator/raw
-disabled kube-system true false incubator/raw
-test2 true true incubator/raw
-test3 true true incubator/raw
-cache my-app true true app:test bitnami/redis 17.0.7
-database my-app true true bitnami/postgres 11.6.22
-global kube-system true true incubator/raw
+ expected: `NAME NAMESPACE ENABLED INSTALLED LABELS CHART VERSION
+logging kube-system true true chart:raw,name:logging,namespace:kube-system incubator/raw
+kubernetes-external-secrets kube-system true true chart:raw,name:kubernetes-external-secrets,namespace:kube-system incubator/raw
+external-secrets default true true app:test,chart:raw,name:external-secrets,namespace:default incubator/raw
+my-release default true true app:test,chart:raw,name:my-release,namespace:default incubator/raw
+disabled kube-system true false chart:raw,name:disabled,namespace:kube-system incubator/raw
+test2 true true chart:raw,name:test2,namespace: incubator/raw
+test3 true true chart:raw,name:test3,namespace: incubator/raw
+cache my-app true true app:test,chart:redis,name:cache,namespace:my-app bitnami/redis 17.0.7
+database my-app true true chart:postgres,name:database,namespace:my-app bitnami/postgres 11.6.22
+global kube-system true true chart:raw,name:global,namespace:kube-system incubator/raw
`,
}, cfg)
})
@@ -195,9 +195,9 @@ my-release default true true app:test,chart:raw,name:my-release,
t.Run("filters releases for environment used in one file only", func(t *testing.T) {
check(t, testcase{
environment: "test",
- expected: `NAME NAMESPACE ENABLED INSTALLED LABELS CHART VERSION
-cache my-app true true app:test bitnami/redis 17.0.7
-database my-app true true bitnami/postgres 11.6.22
+ expected: `NAME NAMESPACE ENABLED INSTALLED LABELS CHART VERSION
+cache my-app true true app:test,chart:redis,name:cache,namespace:my-app bitnami/redis 17.0.7
+database my-app true true chart:postgres,name:database,namespace:my-app bitnami/postgres 11.6.22
`,
}, cfg)
})
@@ -206,16 +206,16 @@ database my-app true true bitnami/postgres 11.6.22
check(t, testcase{
environment: "shared",
// 'global' release has no environments, so is still excluded
- expected: `NAME NAMESPACE ENABLED INSTALLED LABELS CHART VERSION
-logging kube-system true true incubator/raw
-kubernetes-external-secrets kube-system true true incubator/raw
-external-secrets default true true app:test incubator/raw
-my-release default true true app:test incubator/raw
-disabled kube-system true false incubator/raw
-test2 true true incubator/raw
-test3 true true incubator/raw
-cache my-app true true app:test bitnami/redis 17.0.7
-database my-app true true bitnami/postgres 11.6.22
+ expected: `NAME NAMESPACE ENABLED INSTALLED LABELS CHART VERSION
+logging kube-system true true chart:raw,name:logging,namespace:kube-system incubator/raw
+kubernetes-external-secrets kube-system true true chart:raw,name:kubernetes-external-secrets,namespace:kube-system incubator/raw
+external-secrets default true true app:test,chart:raw,name:external-secrets,namespace:default incubator/raw
+my-release default true true app:test,chart:raw,name:my-release,namespace:default incubator/raw
+disabled kube-system true false chart:raw,name:disabled,namespace:kube-system incubator/raw
+test2 true true chart:raw,name:test2,namespace: incubator/raw
+test3 true true chart:raw,name:test3,namespace: incubator/raw
+cache my-app true true app:test,chart:redis,name:cache,namespace:my-app bitnami/redis 17.0.7
+database my-app true true chart:postgres,name:database,namespace:my-app bitnami/postgres 11.6.22
`,
}, cfg)
})
@@ -240,6 +240,7 @@ environments:
values:
- myrelease2:
enabled: false
+---
releases:
- name: myrelease1
chart: mychart1
@@ -284,7 +285,7 @@ releases:
})
assert.NoError(t, err)
- expected := `[{"name":"myrelease1","namespace":"testNamespace","enabled":true,"installed":false,"labels":"id:myrelease1","chart":"mychart1","version":""},{"name":"myrelease2","namespace":"testNamespace","enabled":false,"installed":true,"labels":"","chart":"mychart1","version":""},{"name":"myrelease3","namespace":"testNamespace","enabled":true,"installed":true,"labels":"","chart":"mychart1","version":""},{"name":"myrelease4","namespace":"testNamespace","enabled":true,"installed":true,"labels":"id:myrelease1","chart":"mychart1","version":""}]
+ expected := `[{"name":"myrelease1","namespace":"testNamespace","enabled":true,"installed":false,"labels":"chart:mychart1,id:myrelease1,name:myrelease1,namespace:testNamespace","chart":"mychart1","version":""},{"name":"myrelease2","namespace":"testNamespace","enabled":false,"installed":true,"labels":"chart:mychart1,name:myrelease2,namespace:testNamespace","chart":"mychart1","version":""},{"name":"myrelease3","namespace":"testNamespace","enabled":true,"installed":true,"labels":"chart:mychart1,name:myrelease3,namespace:testNamespace","chart":"mychart1","version":""},{"name":"myrelease4","namespace":"testNamespace","enabled":true,"installed":true,"labels":"chart:mychart1,id:myrelease1,name:myrelease4,namespace:testNamespace","chart":"mychart1","version":""}]
`
assert.Equal(t, expected, out)
}
diff --git a/pkg/app/app_sync_test.go b/pkg/app/app_sync_test.go
index b138f2fb..5115db1c 100644
--- a/pkg/app/app_sync_test.go
+++ b/pkg/app/app_sync_test.go
@@ -142,7 +142,7 @@ func TestSync(t *testing.T) {
skipNeeds: true,
},
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -191,7 +191,7 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
skipNeeds: true,
},
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -249,7 +249,7 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
},
error: ``,
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -300,7 +300,7 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
},
error: ``,
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -348,7 +348,7 @@ serviceA 4 Fri Nov 1 08:40:07 2019 DEPLOYED chart-3.1.0 3.1.0 def
},
error: ``,
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -401,7 +401,7 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
},
error: ``,
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -447,7 +447,7 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
t.Run("bad --selector", func(t *testing.T) {
check(t, testcase{
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
diff --git a/pkg/app/app_template_test.go b/pkg/app/app_template_test.go
index cf09a932..e42122e1 100644
--- a/pkg/app/app_template_test.go
+++ b/pkg/app/app_template_test.go
@@ -24,6 +24,7 @@ func TestTemplate(t *testing.T) {
skipNeeds bool
includeNeeds bool
includeTransitiveNeeds bool
+ noHooks bool
showOnly []string
}
@@ -133,6 +134,7 @@ releases:
includeNeeds: tc.fields.includeNeeds,
includeTransitiveNeeds: tc.fields.includeTransitiveNeeds,
showOnly: tc.fields.showOnly,
+ noHooks: tc.fields.noHooks,
})
var gotErr string
@@ -236,7 +238,7 @@ releases:
},
selectors: []string{"name=test2"},
templated: []exectest.Release{
- {Name: "test2", Flags: []string{}},
+ {Name: "test2"},
},
})
})
@@ -249,8 +251,8 @@ releases:
},
selectors: []string{"name=test3"},
templated: []exectest.Release{
- {Name: "test2", Flags: []string{}},
- {Name: "test3", Flags: []string{}},
+ {Name: "test2"},
+ {Name: "test3"},
},
})
})
@@ -264,8 +266,8 @@ releases:
},
selectors: []string{"name=test3"},
templated: []exectest.Release{
- {Name: "test2", Flags: []string{}},
- {Name: "test3", Flags: []string{}},
+ {Name: "test2"},
+ {Name: "test3"},
},
})
})
@@ -279,7 +281,7 @@ releases:
},
selectors: []string{"name=test2"},
templated: []exectest.Release{
- {Name: "test2", Flags: []string{}},
+ {Name: "test2"},
},
})
})
@@ -293,8 +295,22 @@ releases:
},
selectors: []string{"name=test3"},
templated: []exectest.Release{
- {Name: "test2", Flags: []string{}},
- {Name: "test3", Flags: []string{}},
+ {Name: "test2"},
+ {Name: "test3"},
+ },
+ })
+ })
+
+ t.Run("no-hooks", func(t *testing.T) {
+ check(t, testcase{
+ fields: fields{
+ skipNeeds: true,
+ noHooks: true,
+ },
+ selectors: []string{"app=test"},
+ templated: []exectest.Release{
+ {Name: "external-secrets", Flags: []string{"--namespace", "default", "--no-hooks"}},
+ {Name: "my-release", Flags: []string{"--namespace", "default", "--no-hooks"}},
},
})
})
@@ -398,19 +414,19 @@ releases:
t.Run("fail due to unknown field with goccy/go-yaml", func(t *testing.T) {
check(t, testcase{
goccyGoYaml: true,
- error: `in ./helmfile.yaml: failed to read helmfile.yaml: reading document at index 1: [4:3] unknown field "foobar"
- 2 | releases:
- 3 | - name: app1
- > 4 | foobar: FOOBAR
- ^
- 5 | chart: incubator/raw`,
+ error: `in ./helmfile.yaml: failed to read helmfile.yaml: reading document at index 1. Started seeing this since Helmfile v1? Add the .gotmpl file extension: [4:3] unknown field "foobar"
+ 2 | releases:
+ 3 | - name: app1
+> 4 | foobar: FOOBAR
+ ^
+ 5 | chart: incubator/raw`,
})
})
t.Run("fail due to unknown field with gopkg.in/yaml.v2", func(t *testing.T) {
check(t, testcase{
goccyGoYaml: false,
- error: `in ./helmfile.yaml: failed to read helmfile.yaml: reading document at index 1: yaml: unmarshal errors:
+ error: `in ./helmfile.yaml: failed to read helmfile.yaml: reading document at index 1. Started seeing this since Helmfile v1? Add the .gotmpl file extension: yaml: unmarshal errors:
line 4: field foobar not found in type state.ReleaseSpec`,
})
})
diff --git a/pkg/app/app_test.go b/pkg/app/app_test.go
index 50770c2c..435ed7cf 100644
--- a/pkg/app/app_test.go
+++ b/pkg/app/app_test.go
@@ -135,6 +135,7 @@ environments:
default:
values:
- env.*.yaml
+---
releases:
- name: zipkin
chart: stable/zipkin
@@ -170,7 +171,7 @@ BAZ: 4
t.Errorf("unexpected error: %v", err)
}
- expectedOrder := []string{"helmfile.yaml", "/path/to/env.1.yaml", "/path/to/env.2.yaml", "/path/to/env.1.yaml", "/path/to/env.2.yaml"}
+ expectedOrder := []string{"helmfile.yaml", "/path/to/env.1.yaml", "/path/to/env.2.yaml"}
actualOrder := fs.SuccessfulReads()
if !reflect.DeepEqual(actualOrder, expectedOrder) {
t.Errorf("unexpected order of processed state files: expected=%v, actual=%v", expectedOrder, actualOrder)
@@ -184,6 +185,7 @@ environments:
default:
values:
- env.*.yaml
+---
releases:
- name: zipkin
chart: stable/zipkin
@@ -230,6 +232,7 @@ bases:
- base.yaml
environments:
test:
+---
releases:
- name: zipkin
chart: stable/zipkin
@@ -281,6 +284,7 @@ environments:
missingFileHandler: %s
values:
- %s
+---
releases:
- name: zipkin
chart: stable/zipkin
@@ -393,7 +397,7 @@ helmfiles:
"/path/to/helmfile.d/a1.yaml": `
environments:
prod:
-
+---
releases:
- name: zipkin
chart: stable/zipkin
@@ -799,41 +803,44 @@ func runFilterSubHelmFilesTests(testcases []struct {
func TestVisitDesiredStatesWithReleasesFiltered_EmbeddedNestedStateAdditionalEnvValues(t *testing.T) {
files := map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
helmfiles:
-- path: helmfile.d/a*.yaml
+- path: helmfile.d/a*.yaml.gotmpl
values:
- env.values.yaml
-- helmfile.d/b*.yaml
-- path: helmfile.d/c*.yaml
+- helmfile.d/b*.yaml.gotmpl
+- path: helmfile.d/c*.yaml.gotmpl
values:
- env.values.yaml
`,
- "/path/to/helmfile.d/a1.yaml": `
+ "/path/to/helmfile.d/a1.yaml.gotmpl": `
environments:
default:
values:
- ns: INLINE_NS
+---
releases:
- name: foo
chart: stable/zipkin
namespace: {{ .Environment.Values.ns }}
`,
- "/path/to/helmfile.d/b.yaml": `
+ "/path/to/helmfile.d/b.yaml.gotmpl": `
environments:
default:
values:
- ns: INLINE_NS
+---
releases:
- name: bar
chart: stable/grafana
namespace: {{ .Environment.Values.ns }}
`,
- "/path/to/helmfile.d/c.yaml": `
+ "/path/to/helmfile.d/c.yaml.gotmpl": `
environments:
default:
values:
- ns: INLINE_NS
+---
releases:
- name: baz
chart: stable/envoy
@@ -851,7 +858,7 @@ ns: INLINE_NS
Namespace: "",
Selectors: []string{},
Env: "default",
- FileOrDir: "/path/to/helmfile.yaml",
+ FileOrDir: "/path/to/helmfile.yaml.gotmpl",
}, files)
expectNoCallsToHelm(app)
@@ -977,7 +984,7 @@ releases:
func TestVisitDesiredStatesWithReleasesFiltered_EnvironmentValueOverrides(t *testing.T) {
files := map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
environments:
default:
values:
@@ -1021,7 +1028,7 @@ bar: "bar1"
Env: "default",
ValuesFiles: []string{"overrides.yaml"},
Set: map[string]any{"bar": "bar2", "baz": "baz1"},
- FileOrDir: "helmfile.yaml",
+ FileOrDir: "helmfile.yaml.gotmpl",
}, files)
expectNoCallsToHelm(app)
@@ -1075,7 +1082,7 @@ func TestVisitDesiredStatesWithReleasesFiltered_StateValueOverrides(t *testing.T
testcase := testcases[i]
t.Run(fmt.Sprintf("case %d", i), func(t *testing.T) {
files := map[string]string{
- "/path/to/helmfile.yaml": fmt.Sprintf(`
+ "/path/to/helmfile.yaml.gotmpl": fmt.Sprintf(`
# The top-level "values" are "base" values has inherited to state values with the lowest priority.
# The lowest priority results in environment-specific values to override values defined in the base.
values:
@@ -1142,7 +1149,7 @@ x:
Env: testcase.env,
ValuesFiles: []string{"overrides.yaml"},
Set: map[string]any{"x": map[string]any{"hoge": "hoge_set", "fuga": "fuga_set"}},
- FileOrDir: "helmfile.yaml",
+ FileOrDir: "helmfile.yaml.gotmpl",
}, files)
expectNoCallsToHelm(app)
@@ -1442,7 +1449,7 @@ func TestLoadDesiredStateFromYaml_DuplicateReleaseName(t *testing.T) {
}
func TestLoadDesiredStateFromYaml_Bases(t *testing.T) {
- yamlFile := "/path/to/yaml/file"
+ yamlFile := "/path/to/yaml/file.gotmpl"
yamlContent := `bases:
- ../base.yaml
- ../base.gotmpl
@@ -1513,7 +1520,7 @@ helmDefaults:
}
func TestLoadDesiredStateFromYaml_MultiPartTemplate(t *testing.T) {
- yamlFile := "/path/to/yaml/file"
+ yamlFile := "/path/to/yaml/file.gotmpl"
yamlContent := `bases:
- ../base.yaml
---
@@ -1719,7 +1726,7 @@ foo: FOO
}
func TestLoadDesiredStateFromYaml_MultiPartTemplate_WithNonDefaultEnv(t *testing.T) {
- yamlFile := "/path/to/yaml/file"
+ yamlFile := "/path/to/yaml/file.gotmpl"
yamlContent := `bases:
- ../base.yaml
---
@@ -1810,7 +1817,7 @@ helmDefaults:
}
func TestLoadDesiredStateFromYaml_MultiPartTemplate_WithReverse(t *testing.T) {
- yamlFile := "/path/to/yaml/file"
+ yamlFile := "/path/to/yaml/file.gotmpl"
yamlContent := `
{{ readFile "templates.yaml" }}
@@ -1868,7 +1875,7 @@ releases:
// See https://github.com/roboll/helmfile/issues/615
func TestLoadDesiredStateFromYaml_MultiPartTemplate_NoMergeArrayInEnvVal(t *testing.T) {
- statePath := "/path/to/helmfile.yaml"
+ statePath := "/path/to/helmfile.yaml.gotmpl"
stateContent := `
environments:
default:
@@ -1933,7 +1940,7 @@ func TestLoadDesiredStateFromYaml_MultiPartTemplate_MergeMapsVariousKeys(t *test
}
for i := range testcases {
tc := testcases[i]
- statePath := "/path/to/helmfile.yaml"
+ statePath := "/path/to/helmfile.yaml.gotmpl"
stateContent := `
environments:
default:
@@ -2050,7 +2057,7 @@ releases:
}
for i := range testcases {
tc := testcases[i]
- statePath := "/path/to/helmfile.yaml"
+ statePath := "/path/to/helmfile.yaml.gotmpl"
stateContent := fmt.Sprintf(tc.state, tc.expr)
testFs := testhelper.NewTestFs(map[string]string{
statePath: stateContent,
@@ -2085,14 +2092,17 @@ services:
}
type configImpl struct {
- selectors []string
- set []string
- output string
- includeCRDs bool
- skipCleanup bool
- skipCRDs bool
- skipDeps bool
- skipTests bool
+ selectors []string
+ set []string
+ output string
+ noHooks bool
+ includeCRDs bool
+ skipCleanup bool
+ skipCRDs bool
+ skipDeps bool
+ skipTests bool
+ skipSchemaValidation bool
+ skipRefresh bool
skipNeeds bool
includeNeeds bool
@@ -2133,6 +2143,10 @@ func (c configImpl) SkipDeps() bool {
return c.skipDeps
}
+func (c configImpl) SkipRefresh() bool {
+ return c.skipRefresh
+}
+
func (c configImpl) SkipNeeds() bool {
return c.skipNeeds
}
@@ -2161,6 +2175,10 @@ func (c configImpl) IncludeCRDs() bool {
return c.includeCRDs
}
+func (c configImpl) NoHooks() bool {
+ return c.noHooks
+}
+
func (c configImpl) Concurrency() int {
return 1
}
@@ -2189,6 +2207,10 @@ func (c configImpl) KubeVersion() string {
return c.kubeVersion
}
+func (c configImpl) SkipSchemaValidation() bool {
+ return c.skipSchemaValidation
+}
+
func (c configImpl) ShowOnly() []string {
return nil
}
@@ -2198,14 +2220,12 @@ type applyConfig struct {
cascade string
values []string
- // TODO: Remove this function once Helmfile v0.x
- retainValuesFiles bool
-
set []string
validate bool
skipCleanup bool
skipCRDs bool
skipDeps bool
+ skipRefresh bool
skipNeeds bool
includeNeeds bool
includeTransitiveNeeds bool
@@ -2228,14 +2248,18 @@ type applyConfig struct {
diffArgs string
logger *zap.SugaredLogger
wait bool
+ waitRetries int
waitForJobs bool
reuseValues bool
postRenderer string
postRendererArgs []string
+ skipSchemaValidation bool
kubeVersion string
suppressOutputLineRegex []string
showOnly []string
hideNotes bool
+ takeOwnership bool
+ syncReleaseLabels bool
// template-only options
includeCRDs, skipTests bool
@@ -2254,6 +2278,10 @@ func (a applyConfig) Wait() bool {
return a.wait
}
+func (a applyConfig) WaitRetries() int {
+ return a.waitRetries
+}
+
func (a applyConfig) WaitForJobs() bool {
return a.waitForJobs
}
@@ -2282,6 +2310,10 @@ func (a applyConfig) SkipDeps() bool {
return a.skipDeps
}
+func (a applyConfig) SkipRefresh() bool {
+ return a.skipRefresh
+}
+
func (a applyConfig) SkipNeeds() bool {
return a.skipNeeds
}
@@ -2354,11 +2386,6 @@ func (a applyConfig) Logger() *zap.SugaredLogger {
return a.logger
}
-// TODO: Remove this function once Helmfile v0.x
-func (a applyConfig) RetainValuesFiles() bool {
- return a.retainValuesFiles
-}
-
func (a applyConfig) SkipDiffOnInstall() bool {
return a.skipDiffOnInstall
}
@@ -2372,7 +2399,6 @@ func (a applyConfig) DiffArgs() string {
}
// helmfile-template-only flags
-
func (a applyConfig) IncludeCRDs() bool {
return a.includeCRDs
}
@@ -2412,6 +2438,10 @@ func (a applyConfig) KubeVersion() string {
return a.kubeVersion
}
+func (a applyConfig) SkipSchemaValidation() bool {
+ return a.skipSchemaValidation
+}
+
func (a applyConfig) ShowOnly() []string {
return a.showOnly
}
@@ -2420,6 +2450,14 @@ func (a applyConfig) HideNotes() bool {
return a.hideNotes
}
+func (a applyConfig) TakeOwnership() bool {
+ return a.takeOwnership
+}
+
+func (a applyConfig) SyncReleaseLabels() bool {
+ return a.syncReleaseLabels
+}
+
type depsConfig struct {
skipRepos bool
includeTransitiveNeeds bool
@@ -2754,8 +2792,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: nil,
- {Name: "foo_notFound", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: nil,
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: nil,
+ {Name: "foo_notFound", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: nil,
},
lists: map[exectest.ListKey]string{},
upgraded: []exectest.Release{},
@@ -2827,16 +2865,16 @@ releases:
},
diffs: map[exectest.DiffKey]error{
// noop on frontend-v2
- {Name: "frontend-v2", Chart: "charts/frontend", Flags: "--kube-context default --detailed-exitcode --reset-values"}: nil,
+ {Name: "frontend-v2", Chart: "charts/frontend", Flags: "--kube-context default --reset-values --detailed-exitcode"}: nil,
// install frontend-v3
- {Name: "frontend-v3", Chart: "charts/frontend", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "frontend-v3", Chart: "charts/frontend", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
// upgrades
- {Name: "logging", Chart: "charts/fluent-bit", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "front-proxy", Chart: "stable/envoy", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "servicemesh", Chart: "charts/istio", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "database", Chart: "charts/mysql", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "backend-v2", Chart: "charts/backend", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "anotherbackend", Chart: "charts/anotherbackend", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "logging", Chart: "charts/fluent-bit", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "front-proxy", Chart: "stable/envoy", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "servicemesh", Chart: "charts/istio", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "database", Chart: "charts/mysql", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "backend-v2", Chart: "charts/backend", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "anotherbackend", Chart: "charts/anotherbackend", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
// delete frontend-v1 and backend-v1
@@ -2902,7 +2940,7 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: nil,
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: nil,
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: ``,
@@ -2933,9 +2971,9 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "baz", Chart: "stable/mychart3", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "baz", Chart: "stable/mychart3", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{},
upgraded: []exectest.Release{
@@ -2969,9 +3007,9 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "baz", Chart: "stable/mychart3", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "stable/mychart1", Flags: "--disable-validation --kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "bar", Chart: "stable/mychart2", Flags: "--disable-validation --kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {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")}: ``,
@@ -3014,8 +3052,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "baz", Chart: "stable/mychart3", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "bar", Chart: "stable/mychart2", Flags: "--disable-validation --kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {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")}: ``,
@@ -3052,8 +3090,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{
{Name: "bar", Flags: []string{}},
@@ -3075,8 +3113,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{
{Name: "foo", Flags: []string{}},
@@ -3099,8 +3137,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{
{Name: "bar", Flags: []string{}},
@@ -3123,8 +3161,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{
{Name: "foo", Flags: []string{}},
@@ -3148,8 +3186,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{
{Name: "bar", Flags: []string{"--kube-context", "default", "--namespace", "ns2"}},
@@ -3173,14 +3211,43 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{
{Name: "foo", Flags: []string{"--kube-context", "default", "--namespace", "ns1"}},
{Name: "bar", Flags: []string{"--kube-context", "default", "--namespace", "ns2"}},
},
},
+ {
+ name: "upgrade when ns1/foo needs ns1/bar and ns2/bar is disabled",
+ loc: location(),
+ files: map[string]string{
+ "/path/to/helmfile.yaml": `
+releases:
+- name: bar
+ chart: stable/mychart2
+ namespace: ns1
+- name: bar
+ chart: stable/mychart2
+ namespace: ns2
+ installed: false
+- name: foo
+ chart: stable/mychart1
+ namespace: ns1
+ needs:
+ - ns1/bar
+`,
+ },
+ diffs: map[exectest.DiffKey]error{
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ },
+ upgraded: []exectest.Release{
+ {Name: "bar", Flags: []string{"--kube-context", "default", "--namespace", "ns1"}},
+ {Name: "foo", Flags: []string{"--kube-context", "default", "--namespace", "ns1"}},
+ },
+ },
//
// deletes: deleting all releases in the correct order
//
@@ -3201,8 +3268,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -3234,8 +3301,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -3269,8 +3336,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -3303,8 +3370,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -3337,8 +3404,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -3371,8 +3438,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "stable/mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "stable/mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -3400,7 +3467,7 @@ bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 defau
skipNeeds: true,
},
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -3427,8 +3494,8 @@ releases:
},
selectors: []string{"app=test"},
diffs: map[exectest.DiffKey]error{
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{
{Name: "external-secrets", Flags: []string{"--kube-context", "default", "--namespace", "default"}},
@@ -3453,9 +3520,9 @@ my-release 4 Fri Nov 1 08:40:07 2019 DEPLOYED raw-3.1.0 3.1.0 def
skipNeeds: false,
includeNeeds: true,
},
- error: `in ./helmfile.yaml: release "default/default/external-secrets" depends on "default/kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`,
+ error: `in ./helmfile.yaml.gotmpl: release "default/default/external-secrets" depends on "default/kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`,
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -3482,8 +3549,8 @@ releases:
},
selectors: []string{"app=test"},
diffs: map[exectest.DiffKey]error{
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
@@ -3494,7 +3561,7 @@ releases:
name: "upgrades with bad selector",
loc: location(),
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -3546,8 +3613,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "baz", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "baz", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{},
upgraded: []exectest.Release{},
@@ -3571,8 +3638,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{},
upgraded: []exectest.Release{},
@@ -3600,8 +3667,8 @@ releases:
`,
},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{},
upgraded: []exectest.Release{},
@@ -3745,41 +3812,6 @@ releases:
`,
"/path/to/charts/example/Chart.yaml": `foo: FOO`,
},
- log: `processing file "helmfile.yaml" in directory "."
-changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: repositories:
- 2: - name: bitnami
- 3: url: https://charts.bitnami.com/bitnami/
- 4: releases:
- 5: - name: example
- 6: chart: /path/to/charts/example
- 7:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: repositories:
- 2: - name: bitnami
- 3: url: https://charts.bitnami.com/bitnami/
- 4: releases:
- 5: - name: example
- 6: chart: /path/to/charts/example
- 7:
-
-merged environment: &{default map[] map[]}
-There are no repositories defined in your helmfile.yaml.
-This means helmfile cannot update your dependencies or create a lock file.
-See https://github.com/roboll/helmfile/issues/878 for more information.
-changing working directory back to "/path/to"
-`,
charts: []string{"/path/to/charts/example"},
},
}
@@ -3827,8 +3859,9 @@ changing working directory back to "/path/to"
if tc.log != "" {
actual := bs.String()
-
assert.Equal(t, tc.log, actual)
+ } else {
+ assertLogEqualsToSnapshot(t, bs.String())
}
})
}
@@ -3933,6 +3966,7 @@ environments:
values:
- myrelease2:
enabled: false
+---
releases:
- name: myrelease1
chart: mychart1
@@ -3977,15 +4011,82 @@ releases:
})
assert.NoError(t, err)
- expected := `NAME NAMESPACE ENABLED INSTALLED LABELS CHART VERSION
-myrelease1 testNamespace true false common:label,id:myrelease1 mychart1
-myrelease2 testNamespace false true common:label mychart1
-myrelease3 testNamespace true true mychart1
-myrelease4 testNamespace true true id:myrelease1 mychart1
+ expected := `NAME NAMESPACE ENABLED INSTALLED LABELS CHART VERSION
+myrelease1 testNamespace true false chart:mychart1,common:label,id:myrelease1,name:myrelease1,namespace:testNamespace mychart1
+myrelease2 testNamespace false true chart:mychart1,common:label,name:myrelease2,namespace:testNamespace mychart1
+myrelease3 testNamespace true true chart:mychart1,name:myrelease3,namespace:testNamespace mychart1
+myrelease4 testNamespace true true chart:mychart1,id:myrelease1,name:myrelease4,namespace:testNamespace mychart1
`
assert.Equal(t, expected, out)
}
+func testSetStringValuesTemplate(t *testing.T, goccyGoYaml bool) {
+ t.Helper()
+
+ v := runtime.GoccyGoYaml
+ runtime.GoccyGoYaml = goccyGoYaml
+ t.Cleanup(func() {
+ runtime.GoccyGoYaml = v
+ })
+
+ files := map[string]string{
+ "/path/to/helmfile.yaml.gotmpl": `
+releases:
+- name: zipkin
+ chart: stable/zipkin
+ values:
+ - val2: "val2"
+ valuesTemplate:
+ - val1: '{{"{{ .Release.Name }}"}}'
+ setString:
+ - name: "name"
+ value: "val"
+`,
+ }
+ expectedValues := []any{
+ map[string]any{"val1": "zipkin"},
+ map[string]any{"val2": "val2"}}
+ expectedSetValues := []state.SetValue{
+ {Name: "name", Value: "val"}}
+
+ app := appWithFs(&App{
+ OverrideHelmBinary: DefaultHelmBinary,
+ OverrideKubeContext: "default",
+ Logger: newAppTestLogger(),
+ Env: "default",
+ FileOrDir: "helmfile.yaml.gotmpl",
+ }, files)
+
+ expectNoCallsToHelm(app)
+
+ var specs []state.ReleaseSpec
+ collectReleases := func(run *Run) (bool, []error) {
+ specs = append(specs, run.state.Releases...)
+ return false, nil
+ }
+
+ err := app.ForEachState(
+ collectReleases,
+ false,
+ SetFilter(true),
+ )
+ if err != nil {
+ t.Fatalf("unexpected error: %v", err)
+ }
+
+ if len(specs) != 1 {
+ t.Fatalf("expected 1 release; got %d releases", len(specs))
+ }
+ actualValues := specs[0].Values
+ actualSetStringValues := specs[0].SetStringValues
+
+ if !reflect.DeepEqual(expectedValues, actualValues) {
+ t.Errorf("expected values: %v; got values: %v", expectedValues, actualValues)
+ }
+ if !reflect.DeepEqual(expectedSetValues, actualSetStringValues) {
+ t.Errorf("expected set-string: %v; got set: %v", expectedValues, actualValues)
+ }
+}
func testSetValuesTemplate(t *testing.T, goccyGoYaml bool) {
t.Helper()
@@ -3997,7 +4098,7 @@ func testSetValuesTemplate(t *testing.T, goccyGoYaml bool) {
})
files := map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
releases:
- name: zipkin
chart: stable/zipkin
@@ -4025,7 +4126,7 @@ releases:
OverrideKubeContext: "default",
Logger: newAppTestLogger(),
Env: "default",
- FileOrDir: "helmfile.yaml",
+ FileOrDir: "helmfile.yaml.gotmpl",
}, files)
expectNoCallsToHelm(app)
@@ -4069,6 +4170,16 @@ func TestSetValuesTemplate(t *testing.T) {
})
}
+func TestSetStringValuesTemplate(t *testing.T) {
+ t.Run("with goccy/go-yaml", func(t *testing.T) {
+ testSetStringValuesTemplate(t, true)
+ })
+
+ t.Run("with gopkg.in/yaml.v2", func(t *testing.T) {
+ testSetStringValuesTemplate(t, false)
+ })
+}
+
func location() string {
_, fn, line, _ := goruntime.Caller(1)
return fmt.Sprintf("%s:%d", filepath.Base(fn), line)
diff --git a/pkg/app/ask.go b/pkg/app/ask.go
index ad3425d9..52161a1c 100644
--- a/pkg/app/ask.go
+++ b/pkg/app/ask.go
@@ -24,9 +24,10 @@ func AskForConfirmation(s string) bool {
response = strings.ToLower(strings.TrimSpace(response))
- if response == "y" || response == "yes" {
+ switch response {
+ case "y", "yes":
return true
- } else if response == "n" || response == "no" {
+ case "n", "no":
return false
}
}
diff --git a/pkg/app/config.go b/pkg/app/config.go
index 9d9b377b..34dff76d 100644
--- a/pkg/app/config.go
+++ b/pkg/app/config.go
@@ -10,6 +10,7 @@ type ConfigProvider interface {
StripArgsValuesOnExitError() bool
DisableForceUpdate() bool
SkipDeps() bool
+ SkipRefresh() bool
FileOrDir() string
KubeContext() string
@@ -24,15 +25,6 @@ type ConfigProvider interface {
loggingConfig
}
-// TODO: Remove this function once Helmfile v0.x
-type DeprecatedChartsConfigProvider interface {
- Values() []string
-
- concurrencyConfig
- loggingConfig
- IncludeTransitiveNeeds() bool
-}
-
type DepsConfigProvider interface {
Args() string
SkipRepos() bool
@@ -50,15 +42,19 @@ type ApplyConfigProvider interface {
Args() string
PostRenderer() string
PostRendererArgs() []string
+ SkipSchemaValidation() bool
Cascade() string
HideNotes() bool
+ TakeOwnership() bool
SuppressOutputLineRegex() []string
Values() []string
Set() []string
SkipCRDs() bool
SkipDeps() bool
+ SkipRefresh() bool
Wait() bool
+ WaitRetries() int
WaitForJobs() bool
IncludeTests() bool
@@ -77,9 +73,6 @@ type ApplyConfigProvider interface {
Context() int
DiffOutput() string
- // TODO: Remove this function once Helmfile v0.x
- RetainValuesFiles() bool
-
Validate() bool
SkipCleanup() bool
SkipDiffOnInstall() bool
@@ -87,6 +80,8 @@ type ApplyConfigProvider interface {
DiffArgs() string
SyncArgs() string
+ SyncReleaseLabels() bool
+
DAGConfig
concurrencyConfig
@@ -98,15 +93,19 @@ type ApplyConfigProvider interface {
type SyncConfigProvider interface {
Args() string
PostRenderer() string
+ SkipSchemaValidation() bool
PostRendererArgs() []string
HideNotes() bool
+ TakeOwnership() bool
Cascade() string
Values() []string
Set() []string
SkipCRDs() bool
SkipDeps() bool
+ SkipRefresh() bool
Wait() bool
+ WaitRetries() int
WaitForJobs() bool
SyncArgs() string
@@ -115,6 +114,9 @@ type SyncConfigProvider interface {
SkipNeeds() bool
IncludeNeeds() bool
IncludeTransitiveNeeds() bool
+
+ SyncReleaseLabels() bool
+
DAGConfig
concurrencyConfig
@@ -127,6 +129,7 @@ type DiffConfigProvider interface {
Args() string
PostRenderer() string
PostRendererArgs() []string
+ SkipSchemaValidation() bool
SuppressOutputLineRegex() []string
Values() []string
@@ -134,6 +137,7 @@ type DiffConfigProvider interface {
Validate() bool
SkipCRDs() bool
SkipDeps() bool
+ SkipRefresh() bool
IncludeTests() bool
@@ -158,27 +162,12 @@ type DiffConfigProvider interface {
valuesControlMode
}
-// TODO: Remove this function once Helmfile v0.x
-type DeleteConfigProvider interface {
- Args() string
- Cascade() string
-
- Purge() bool
- SkipDeps() bool
- SkipCharts() bool
- DeleteWait() bool
- DeleteTimeout() int
-
- interactive
- loggingConfig
- concurrencyConfig
-}
-
type DestroyConfigProvider interface {
Args() string
Cascade() string
SkipDeps() bool
+ SkipRefresh() bool
SkipCharts() bool
DeleteWait() bool
DeleteTimeout() int
@@ -192,6 +181,7 @@ type TestConfigProvider interface {
Args() string
SkipDeps() bool
+ SkipRefresh() bool
Timeout() int
Cleanup() bool
Logs() bool
@@ -205,6 +195,7 @@ type LintConfigProvider interface {
Values() []string
Set() []string
SkipDeps() bool
+ SkipRefresh() bool
SkipCleanup() bool
DAGConfig
@@ -214,6 +205,7 @@ type LintConfigProvider interface {
type FetchConfigProvider interface {
SkipDeps() bool
+ SkipRefresh() bool
OutputDir() string
OutputDirTemplate() string
@@ -224,16 +216,19 @@ type TemplateConfigProvider interface {
Args() string
PostRenderer() string
PostRendererArgs() []string
+ SkipSchemaValidation() bool
Values() []string
Set() []string
OutputDirTemplate() string
Validate() bool
SkipDeps() bool
+ SkipRefresh() bool
SkipCleanup() bool
SkipTests() bool
OutputDir() string
IncludeCRDs() bool
+ NoHooks() bool
KubeVersion() string
ShowOnly() []string
@@ -253,6 +248,7 @@ type WriteValuesConfigProvider interface {
Set() []string
OutputFileTemplate() string
SkipDeps() bool
+ SkipRefresh() bool
SkipCleanup() bool
IncludeTransitiveNeeds() bool
diff --git a/pkg/app/constants.go b/pkg/app/constants.go
index 63fd3af7..38d06ce0 100644
--- a/pkg/app/constants.go
+++ b/pkg/app/constants.go
@@ -8,10 +8,7 @@ import (
)
const (
- DefaultHelmfile = "helmfile.yaml"
- // TODO: Remove this function once Helmfile v0.x
- DeprecatedHelmfile = "charts.yaml"
-
+ DefaultHelmfile = "helmfile.yaml"
DefaultHelmfileDirectory = "helmfile.d"
ExperimentalSelectorExplicit = "explicit-selector-inheritance" // value to remove default selector inheritance to sub-helmfiles and use the explicit one
)
diff --git a/pkg/app/desired_state_file_loader.go b/pkg/app/desired_state_file_loader.go
index a72d3e6d..90986023 100644
--- a/pkg/app/desired_state_file_loader.go
+++ b/pkg/app/desired_state_file_loader.go
@@ -15,7 +15,6 @@ import (
"github.com/helmfile/helmfile/pkg/helmexec"
"github.com/helmfile/helmfile/pkg/policy"
"github.com/helmfile/helmfile/pkg/remote"
- "github.com/helmfile/helmfile/pkg/runtime"
"github.com/helmfile/helmfile/pkg/state"
)
@@ -162,21 +161,14 @@ func (a *desiredStateLoader) underlying() *state.StateCreator {
func (a *desiredStateLoader) rawLoad(yaml []byte, baseDir, file string, evaluateBases bool, env, overrodeEnv *environment.Environment) (*state.HelmState, error) {
var st *state.HelmState
var err error
- if runtime.V1Mode {
- st, err = a.underlying().ParseAndLoad(yaml, baseDir, file, a.env, false, evaluateBases, env, overrodeEnv)
- if err != nil {
- return nil, err
- }
- } else {
- merged, err := env.Merge(overrodeEnv)
- if err != nil {
- return nil, err
- }
+ merged, err := env.Merge(overrodeEnv)
+ if err != nil {
+ return nil, err
+ }
- st, err = a.underlying().ParseAndLoad(yaml, baseDir, file, a.env, false, evaluateBases, merged, nil)
- if err != nil {
- return nil, err
- }
+ st, err = a.underlying().ParseAndLoad(yaml, baseDir, file, a.env, false, evaluateBases, merged, nil)
+ if err != nil {
+ return nil, err
}
helmfiles, err := st.ExpandedHelmfiles()
if err != nil {
@@ -207,7 +199,7 @@ func (ld *desiredStateLoader) load(env, overrodeEnv *environment.Environment, ba
var rawContent []byte
- if filepath.Ext(filename) == ".gotmpl" || !runtime.V1Mode {
+ if filepath.Ext(filename) == ".gotmpl" {
var yamlBuf *bytes.Buffer
var err error
@@ -249,6 +241,14 @@ func (ld *desiredStateLoader) load(env, overrodeEnv *environment.Environment, ba
finalState.RenderedValues = currentState.RenderedValues
}
+ if len(finalState.HelmDefaults.PostRendererArgs) > 0 {
+ for i := range finalState.Releases {
+ if len(finalState.Releases[i].PostRendererArgs) == 0 {
+ finalState.Releases[i].PostRendererArgs = finalState.HelmDefaults.PostRendererArgs
+ }
+ }
+ finalState.HelmDefaults.PostRendererArgs = nil
+ }
env = &finalState.Env
ld.logger.Debugf("merged environment: %v", env)
diff --git a/pkg/app/destroy_test.go b/pkg/app/destroy_test.go
index 4f815469..4d578851 100644
--- a/pkg/app/destroy_test.go
+++ b/pkg/app/destroy_test.go
@@ -38,6 +38,7 @@ type destroyConfig struct {
concurrency int
interactive bool
skipDeps bool
+ skipRefresh bool
logger *zap.SugaredLogger
includeTransitiveNeeds bool
skipCharts bool
@@ -73,6 +74,10 @@ func (d destroyConfig) SkipDeps() bool {
return d.skipDeps
}
+func (d destroyConfig) SkipRefresh() bool {
+ return d.skipRefresh
+}
+
func (d destroyConfig) IncludeTransitiveNeeds() bool {
return d.includeTransitiveNeeds
}
diff --git a/pkg/app/diff_nokubectx_test.go b/pkg/app/diff_nokubectx_test.go
index cd0239ad..e2dee162 100644
--- a/pkg/app/diff_nokubectx_test.go
+++ b/pkg/app/diff_nokubectx_test.go
@@ -104,16 +104,16 @@ releases:
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
// noop on frontend-v2
- {Name: "frontend-v2", Chart: "charts/frontend", Flags: "--detailed-exitcode --reset-values"}: nil,
+ {Name: "frontend-v2", Chart: "charts/frontend", Flags: "--reset-values --detailed-exitcode"}: nil,
// install frontend-v3
- {Name: "frontend-v3", Chart: "charts/frontend", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "frontend-v3", Chart: "charts/frontend", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
// upgrades
- {Name: "logging", Chart: "charts/fluent-bit", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "front-proxy", Chart: "stable/envoy", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "servicemesh", Chart: "charts/istio", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "database", Chart: "charts/mysql", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "backend-v2", Chart: "charts/backend", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "anotherbackend", Chart: "charts/anotherbackend", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "logging", Chart: "charts/fluent-bit", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "front-proxy", Chart: "stable/envoy", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "servicemesh", Chart: "charts/istio", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "database", Chart: "charts/mysql", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "backend-v2", Chart: "charts/backend", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "anotherbackend", Chart: "charts/anotherbackend", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
// delete frontend-v1 and backend-v1
@@ -150,7 +150,7 @@ releases:
detailedExitcode: true,
error: "",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: nil,
+ {Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: nil,
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: ``,
@@ -183,9 +183,9 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "baz", Chart: "mychart3", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "baz", Chart: "mychart3", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{},
upgraded: []exectest.Release{},
@@ -212,8 +212,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
},
@@ -234,8 +234,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
},
@@ -257,8 +257,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
},
@@ -280,8 +280,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
},
@@ -304,8 +304,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
},
@@ -328,8 +328,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
},
@@ -352,8 +352,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
@@ -381,8 +381,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -413,8 +413,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -447,8 +447,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -479,8 +479,8 @@ releases:
detailedExitcode: true,
error: `in ./helmfile.yaml: release "foo" depends on "bar" which does not match the selectors. Please add a selector like "--selector name=bar", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`,
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -514,8 +514,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -549,8 +549,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -581,8 +581,8 @@ releases:
detailedExitcode: true,
error: `in ./helmfile.yaml: release "bar" depends on "foo" which does not match the selectors. Please add a selector like "--selector name=foo", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`,
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -613,8 +613,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: helmV3ListFlagsWithoutKubeContext}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -636,7 +636,7 @@ bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 defau
loc: location(),
flags: flags{skipNeeds: true},
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -664,8 +664,8 @@ releases:
selectors: []string{"app=test"},
detailedExitcode: true,
diffs: map[exectest.DiffKey]error{
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
@@ -677,7 +677,7 @@ releases:
loc: location(),
flags: flags{skipNeeds: false},
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -705,87 +705,20 @@ releases:
selectors: []string{"app=test"},
detailedExitcode: true,
diffs: map[exectest.DiffKey]error{
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
concurrency: 1,
- error: `in ./helmfile.yaml: release "default/external-secrets" depends on "kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`,
- log: `processing file "helmfile.yaml" in directory "."
-changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-merged environment: &{default map[] map[]}
-2 release(s) matching app=test found in helmfile.yaml
-
-err: release "default/external-secrets" depends on "kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies
-changing working directory back to "/path/to"
-`,
+ error: `in ./helmfile.yaml.gotmpl: release "default/external-secrets" depends on "kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`,
},
{
// see https://github.com/roboll/helmfile/issues/919#issuecomment-549831747
name: "upgrades with bad selector",
loc: location(),
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -817,72 +750,6 @@ releases:
error: "err: no releases found that matches specified selector(app=test_non_existent) and environment(default), in any helmfile",
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
concurrency: 1,
- log: `processing file "helmfile.yaml" in directory "."
-changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-merged environment: &{default map[] map[]}
-0 release(s) matching app=test_non_existent found in helmfile.yaml
-
-changing working directory back to "/path/to"
-`,
},
//
// error cases
@@ -904,54 +771,14 @@ releases:
},
detailedExitcode: true,
diffs: map[exectest.DiffKey]error{
- {Name: "baz", Chart: "mychart3", Flags: "--namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "baz", Chart: "mychart3", Flags: "--namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{},
upgraded: []exectest.Release{},
deleted: []exectest.Release{},
concurrency: 1,
error: `in ./helmfile.yaml: release(s) "foo" depend(s) on an undefined release "bar". Perhaps you made a typo in "needs" or forgot defining a release named "bar" with appropriate "namespace" and "kubeContext"?`,
- log: `processing file "helmfile.yaml" in directory "."
-changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: namespace: ns1
- 4: chart: mychart3
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: namespace: ns1
- 4: chart: mychart3
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
-merged environment: &{default map[] map[]}
-WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
-2 release(s) found in helmfile.yaml
-
-err: release(s) "foo" depend(s) on an undefined release "bar". Perhaps you made a typo in "needs" or forgot defining a release named "bar" with appropriate "namespace" and "kubeContext"?
-changing working directory back to "/path/to"
-`,
},
}
diff --git a/pkg/app/diff_test.go b/pkg/app/diff_test.go
index f33c04a6..2e60b3df 100644
--- a/pkg/app/diff_test.go
+++ b/pkg/app/diff_test.go
@@ -24,6 +24,7 @@ type diffConfig struct {
validate bool
skipCRDs bool
skipDeps bool
+ skipRefresh bool
includeTests bool
skipNeeds bool
includeNeeds bool
@@ -42,6 +43,7 @@ type diffConfig struct {
stripTrailingCR bool
interactive bool
skipDiffOnInstall bool
+ skipSchemaValidation bool
reuseValues bool
logger *zap.SugaredLogger
}
@@ -74,6 +76,10 @@ func (a diffConfig) SkipDeps() bool {
return a.skipDeps
}
+func (a diffConfig) SkipRefresh() bool {
+ return a.skipRefresh
+}
+
func (a diffConfig) IncludeTests() bool {
return a.includeTests
}
@@ -170,6 +176,10 @@ func (a diffConfig) PostRendererArgs() []string {
return nil
}
+func (a diffConfig) SkipSchemaValidation() bool {
+ return a.skipSchemaValidation
+}
+
func (a diffConfig) SuppressOutputLineRegex() []string {
return a.suppressOutputLineRegex
}
@@ -266,16 +276,16 @@ releases:
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
// noop on frontend-v2
- {Name: "frontend-v2", Chart: "charts/frontend", Flags: "--kube-context default --detailed-exitcode --reset-values"}: nil,
+ {Name: "frontend-v2", Chart: "charts/frontend", Flags: "--kube-context default --reset-values --detailed-exitcode"}: nil,
// install frontend-v3
- {Name: "frontend-v3", Chart: "charts/frontend", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "frontend-v3", Chart: "charts/frontend", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
// upgrades
- {Name: "logging", Chart: "charts/fluent-bit", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "front-proxy", Chart: "stable/envoy", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "servicemesh", Chart: "charts/istio", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "database", Chart: "charts/mysql", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "backend-v2", Chart: "charts/backend", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "anotherbackend", Chart: "charts/anotherbackend", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "logging", Chart: "charts/fluent-bit", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "front-proxy", Chart: "stable/envoy", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "servicemesh", Chart: "charts/istio", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "database", Chart: "charts/mysql", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "backend-v2", Chart: "charts/backend", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "anotherbackend", Chart: "charts/anotherbackend", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
// delete frontend-v1 and backend-v1
@@ -312,7 +322,7 @@ releases:
detailedExitcode: true,
error: "",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: nil,
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: nil,
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: ``,
@@ -345,9 +355,9 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "baz", Chart: "mychart3", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "baz", Chart: "mychart3", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{},
upgraded: []exectest.Release{},
@@ -374,8 +384,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
},
@@ -399,8 +409,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context hello/world --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context hello/world --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context hello/world --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context hello/world --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
},
@@ -426,8 +436,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "releaseB", Chart: "mychart2", Flags: "--kube-context arn:aws:eks:us-east-1:1234567890:cluster/myekscluster --namespace namespaceA --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "releaseA", Chart: "mychart1", Flags: "--kube-context arn:aws:eks:us-east-1:1234567890:cluster/myekscluster --namespace namespaceA --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "releaseB", Chart: "mychart2", Flags: "--kube-context arn:aws:eks:us-east-1:1234567890:cluster/myekscluster --namespace namespaceA --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "releaseA", Chart: "mychart1", Flags: "--kube-context arn:aws:eks:us-east-1:1234567890:cluster/myekscluster --namespace namespaceA --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
},
@@ -448,8 +458,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
},
@@ -471,8 +481,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
},
@@ -494,8 +504,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace testNamespace --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace testNamespace --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
},
@@ -518,8 +528,36 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ },
+ upgraded: []exectest.Release{},
+ },
+ {
+ name: "upgrade when ns1/foo needs ns1/bar and ns2/bar is disabled",
+ loc: location(),
+ files: map[string]string{
+ "/path/to/helmfile.yaml": `
+releases:
+- name: bar
+ chart: mychart2
+ namespace: ns1
+- name: bar
+ chart: mychart2
+ namespace: ns2
+ installed: false
+- name: foo
+ chart: mychart1
+ namespace: ns1
+ needs:
+ - ns1/bar
+`,
+ },
+ detailedExitcode: true,
+ error: "Identified at least one change",
+ diffs: map[exectest.DiffKey]error{
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
},
@@ -543,8 +581,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
},
@@ -567,8 +605,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace ns2 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --namespace ns2 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
@@ -596,8 +634,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -628,8 +666,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -662,8 +700,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -694,8 +732,8 @@ releases:
detailedExitcode: true,
error: `in ./helmfile.yaml: release "default//foo" depends on "default//bar" which does not match the selectors. Please add a selector like "--selector name=bar", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`,
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -729,8 +767,8 @@ releases:
},
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -764,8 +802,8 @@ releases:
},
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -796,8 +834,8 @@ releases:
detailedExitcode: true,
error: `in ./helmfile.yaml: release "default//bar" depends on "default//foo" which does not match the selectors. Please add a selector like "--selector name=foo", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`,
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -831,8 +869,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -866,8 +904,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -898,8 +936,8 @@ releases:
detailedExitcode: true,
error: "Identified at least one change",
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart2", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{
{Filter: "^foo$", Flags: listFlags("", "default")}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
@@ -921,7 +959,7 @@ bar 4 Fri Nov 1 08:40:07 2019 DEPLOYED mychart2-3.1.0 3.1.0 defau
loc: location(),
flags: flags{skipNeeds: true},
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -949,8 +987,8 @@ releases:
selectors: []string{"app=test"},
detailedExitcode: true,
diffs: map[exectest.DiffKey]error{
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
@@ -962,7 +1000,7 @@ releases:
loc: location(),
flags: flags{skipNeeds: false},
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -990,87 +1028,20 @@ releases:
selectors: []string{"app=test"},
detailedExitcode: true,
diffs: map[exectest.DiffKey]error{
- {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "external-secrets", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "my-release", Chart: "incubator/raw", Flags: "--kube-context default --namespace default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
upgraded: []exectest.Release{},
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
concurrency: 1,
- error: `in ./helmfile.yaml: release "default/default/external-secrets" depends on "default/kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`,
- log: `processing file "helmfile.yaml" in directory "."
-changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-merged environment: &{default map[] map[]}
-2 release(s) matching app=test found in helmfile.yaml
-
-err: release "default/default/external-secrets" depends on "default/kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies
-changing working directory back to "/path/to"
-`,
+ error: `in ./helmfile.yaml.gotmpl: release "default/default/external-secrets" depends on "default/kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`,
},
{
// see https://github.com/roboll/helmfile/issues/919#issuecomment-549831747
name: "upgrades with bad selector",
loc: location(),
files: map[string]string{
- "/path/to/helmfile.yaml": `
+ "/path/to/helmfile.yaml.gotmpl": `
{{ $mark := "a" }}
releases:
@@ -1102,72 +1073,6 @@ releases:
error: "err: no releases found that matches specified selector(app=test_non_existent) and environment(default), in any helmfile",
// as we check for log output, set concurrency to 1 to avoid non-deterministic test result
concurrency: 1,
- log: `processing file "helmfile.yaml" in directory "."
-changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-merged environment: &{default map[] map[]}
-0 release(s) matching app=test_non_existent found in helmfile.yaml
-
-changing working directory back to "/path/to"
-`,
},
//
// error cases
@@ -1190,51 +1095,14 @@ releases:
detailedExitcode: true,
selectors: []string{"name=foo"},
diffs: map[exectest.DiffKey]error{
- {Name: "bar", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "bar", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{},
upgraded: []exectest.Release{},
deleted: []exectest.Release{},
concurrency: 1,
error: `in ./helmfile.yaml: release "default//foo" depends on "default//bar" which does not match the selectors. Please add a selector like "--selector name=bar", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies`,
- log: `processing file "helmfile.yaml" in directory "."
-changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart3
- 4: - name: foo
- 5: chart: mychart1
- 6: needs:
- 7: - bar
- 8:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart3
- 4: - name: foo
- 5: chart: mychart1
- 6: needs:
- 7: - bar
- 8:
-
-merged environment: &{default map[] map[]}
-1 release(s) matching name=foo found in helmfile.yaml
-
-err: release "default//foo" depends on "default//bar" which does not match the selectors. Please add a selector like "--selector name=bar", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies
-changing working directory back to "/path/to"
-`,
},
{
name: "non-existent release in needs",
@@ -1253,54 +1121,14 @@ releases:
},
detailedExitcode: true,
diffs: map[exectest.DiffKey]error{
- {Name: "baz", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
- {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --detailed-exitcode --reset-values"}: helmexec.ExitError{Code: 2},
+ {Name: "baz", Chart: "mychart3", Flags: "--kube-context default --namespace ns1 --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
+ {Name: "foo", Chart: "mychart1", Flags: "--kube-context default --reset-values --detailed-exitcode"}: helmexec.ExitError{Code: 2},
},
lists: map[exectest.ListKey]string{},
upgraded: []exectest.Release{},
deleted: []exectest.Release{},
concurrency: 1,
error: `in ./helmfile.yaml: release(s) "default//foo" depend(s) on an undefined release "default//bar". Perhaps you made a typo in "needs" or forgot defining a release named "bar" with appropriate "namespace" and "kubeContext"?`,
- log: `processing file "helmfile.yaml" in directory "."
-changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: namespace: ns1
- 4: chart: mychart3
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: namespace: ns1
- 4: chart: mychart3
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
-merged environment: &{default map[] map[]}
-WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
-2 release(s) found in helmfile.yaml
-
-err: release(s) "default//foo" depend(s) on an undefined release "default//bar". Perhaps you made a typo in "needs" or forgot defining a release named "bar" with appropriate "namespace" and "kubeContext"?
-changing working directory back to "/path/to"
-`,
},
}
diff --git a/pkg/app/init.go b/pkg/app/init.go
index 1cdfaad2..f7cc3add 100644
--- a/pkg/app/init.go
+++ b/pkg/app/init.go
@@ -17,12 +17,12 @@ import (
)
const (
- HelmRequiredVersion = "v3.15.4"
- HelmRecommendedVersion = "v3.16.1"
- HelmDiffRecommendedVersion = "v3.9.11"
- HelmSecretsRecommendedVersion = "v4.6.0"
- HelmGitRecommendedVersion = "v0.15.1"
- HelmS3RecommendedVersion = "v0.16.0"
+ HelmRequiredVersion = "v3.16.4"
+ HelmRecommendedVersion = "v3.17.3"
+ HelmDiffRecommendedVersion = "v3.11.0"
+ HelmSecretsRecommendedVersion = "v4.6.3"
+ HelmGitRecommendedVersion = "v1.3.0"
+ HelmS3RecommendedVersion = "v0.16.3"
HelmInstallCommand = "https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3"
)
diff --git a/pkg/app/init_test.go b/pkg/app/init_test.go
index f9f40b3e..59d9124d 100644
--- a/pkg/app/init_test.go
+++ b/pkg/app/init_test.go
@@ -8,27 +8,28 @@ import (
"path/filepath"
"regexp"
"testing"
+
+ "github.com/stretchr/testify/assert"
)
func TestDownloadfile(t *testing.T) {
- var ts *httptest.Server
cases := []struct {
name string
handler func(http.ResponseWriter, *http.Request)
- url string
filepath string
wantContent string
wantError string
}{
{
- name: "download success",
+ name: "successful download of file content",
handler: func(w http.ResponseWriter, r *http.Request) {
+ w.WriteHeader(http.StatusOK)
fmt.Fprint(w, "helmfile")
},
wantContent: "helmfile",
},
{
- name: "download 404",
+ name: "404 error when file not found",
handler: func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
fmt.Fprint(w, "not found")
@@ -36,7 +37,7 @@ func TestDownloadfile(t *testing.T) {
wantError: "download .*? error, code: 404",
},
{
- name: "download 500",
+ name: "500 error on server failure",
handler: func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
fmt.Fprint(w, "server error")
@@ -44,14 +45,16 @@ func TestDownloadfile(t *testing.T) {
wantError: "download .*? error, code: 500",
},
{
- name: "download path error",
+ name: "error due to invalid file path",
handler: func(w http.ResponseWriter, r *http.Request) {
+ w.WriteHeader(http.StatusOK)
fmt.Fprint(w, "helmfile")
},
filepath: "abc/down.txt",
wantError: "open .*? no such file or directory",
},
}
+
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
dir := t.TempDir()
@@ -60,30 +63,24 @@ func TestDownloadfile(t *testing.T) {
downfile = filepath.Join(dir, c.filepath)
}
- ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- c.handler(w, r)
- }))
+ ts := httptest.NewServer(http.HandlerFunc(c.handler))
defer ts.Close()
- url := ts.URL
- if c.url != "" {
- url = c.url
- }
- err := downloadfile(downfile, url)
+
+ err := downloadfile(downfile, ts.URL)
+
if c.wantError != "" {
- if err == nil {
- t.Errorf("download got no error, want error: %v", c.wantError)
- } else if matched, regexErr := regexp.MatchString(c.wantError, err.Error()); regexErr != nil || !matched {
- t.Errorf("download got error: %v, want error: %v", err, c.wantError)
+ assert.Error(t, err)
+ if err != nil {
+ matched, regexErr := regexp.MatchString(c.wantError, err.Error())
+ assert.NoError(t, regexErr)
+ assert.True(t, matched, "expected error message to match regex: %s", c.wantError)
}
return
}
+
content, err := os.ReadFile(downfile)
- if err != nil {
- t.Errorf("read download file error: %v", err)
- }
- if string(content) != c.wantContent {
- t.Errorf("download file content got: %v, want content: %v", string(content), c.wantContent)
- }
+ assert.NoError(t, err)
+ assert.Equal(t, c.wantContent, string(content), "unexpected content in downloaded file")
})
}
}
diff --git a/pkg/app/run.go b/pkg/app/run.go
index a9d77e08..e617c0f7 100644
--- a/pkg/app/run.go
+++ b/pkg/app/run.go
@@ -7,6 +7,8 @@ import (
"sort"
"strings"
+ "github.com/fatih/color"
+
"github.com/helmfile/helmfile/pkg/helmexec"
"github.com/helmfile/helmfile/pkg/state"
)
@@ -139,17 +141,6 @@ func (r *Run) Repos(c ReposConfigProvider) error {
return r.ctx.SyncReposOnce(r.state, r.helm)
}
-// TODO: Remove this function once Helmfile v0.x
-func (r *Run) DeprecatedSyncCharts(c DeprecatedChartsConfigProvider) []error {
- st := r.state
- helm := r.helm
-
- affectedReleases := state.AffectedReleases{}
- errs := st.SyncReleases(&affectedReleases, helm, c.Values(), c.Concurrency())
- affectedReleases.DisplayAffectedReleases(c.Logger())
- return errs
-}
-
func (r *Run) diff(triggerCleanupEvent bool, detailedExitCode bool, c DiffConfigProvider, diffOpts *state.DiffOpts) (*string, map[string]state.ReleaseSpec, map[string]state.ReleaseSpec, []error) {
st := r.state
helm := r.helm
@@ -220,7 +211,11 @@ func (r *Run) diff(triggerCleanupEvent bool, detailedExitCode bool, c DiffConfig
names = append(names, fmt.Sprintf(" %s (%s) UPDATED", r.Name, r.Chart))
}
for _, r := range releasesToBeDeleted {
- names = append(names, fmt.Sprintf(" %s (%s) DELETED", r.Name, r.Chart))
+ releaseToBeDeleted := fmt.Sprintf(" %s (%s) DELETED", r.Name, r.Chart)
+ if c.Color() {
+ releaseToBeDeleted = color.RedString(releaseToBeDeleted)
+ }
+ names = append(names, releaseToBeDeleted)
}
// Make the output deterministic for testing purpose
sort.Strings(names)
diff --git a/pkg/app/testdata/app_diff_test/bad_selector b/pkg/app/testdata/app_diff_test/bad_selector
index 9a3ab785..7d03a1f4 100644
--- a/pkg/app/testdata/app_diff_test/bad_selector
+++ b/pkg/app/testdata/app_diff_test/bad_selector
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
0 release(s) matching app=test_non_existent found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test/fail_on_unselected_need_by_default b/pkg/app/testdata/app_diff_test/fail_on_unselected_need_by_default
index a0113f65..ab53c3ad 100644
--- a/pkg/app/testdata/app_diff_test/fail_on_unselected_need_by_default
+++ b/pkg/app/testdata/app_diff_test/fail_on_unselected_need_by_default
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
2 release(s) matching app=test found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test/include-needs b/pkg/app/testdata/app_diff_test/include-needs
index 892b6ea0..58fa9cab 100644
--- a/pkg/app/testdata/app_diff_test/include-needs
+++ b/pkg/app/testdata/app_diff_test/include-needs
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
2 release(s) matching app=test found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test/include-needs_should_not_fail_on_disabled_direct_need b/pkg/app/testdata/app_diff_test/include-needs_should_not_fail_on_disabled_direct_need
index 9154b011..368cb842 100644
--- a/pkg/app/testdata/app_diff_test/include-needs_should_not_fail_on_disabled_direct_need
+++ b/pkg/app/testdata/app_diff_test/include-needs_should_not_fail_on_disabled_direct_need
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=test2 found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test/include-needs_should_not_fail_on_disabled_transitive_need b/pkg/app/testdata/app_diff_test/include-needs_should_not_fail_on_disabled_transitive_need
index 84a81703..0396ca0d 100644
--- a/pkg/app/testdata/app_diff_test/include-needs_should_not_fail_on_disabled_transitive_need
+++ b/pkg/app/testdata/app_diff_test/include-needs_should_not_fail_on_disabled_transitive_need
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=test3 found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_direct_need b/pkg/app/testdata/app_diff_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_direct_need
index 9154b011..368cb842 100644
--- a/pkg/app/testdata/app_diff_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_direct_need
+++ b/pkg/app/testdata/app_diff_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_direct_need
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=test2 found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_transitive_need b/pkg/app/testdata/app_diff_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_transitive_need
index 84a81703..0396ca0d 100644
--- a/pkg/app/testdata/app_diff_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_transitive_need
+++ b/pkg/app/testdata/app_diff_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_transitive_need
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=test3 found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test/include-transitive-needs b/pkg/app/testdata/app_diff_test/include-transitive-needs
index 892b6ea0..58fa9cab 100644
--- a/pkg/app/testdata/app_diff_test/include-transitive-needs
+++ b/pkg/app/testdata/app_diff_test/include-transitive-needs
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
2 release(s) matching app=test found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test/include-transitive-needs_should_not_fail_on_disabled_transitive_need b/pkg/app/testdata/app_diff_test/include-transitive-needs_should_not_fail_on_disabled_transitive_need
index 84a81703..0396ca0d 100644
--- a/pkg/app/testdata/app_diff_test/include-transitive-needs_should_not_fail_on_disabled_transitive_need
+++ b/pkg/app/testdata/app_diff_test/include-transitive-needs_should_not_fail_on_disabled_transitive_need
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=test3 found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test/no-hooks b/pkg/app/testdata/app_diff_test/no-hooks
index 67ee2936..ceb99f63 100644
--- a/pkg/app/testdata/app_diff_test/no-hooks
+++ b/pkg/app/testdata/app_diff_test/no-hooks
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
2 release(s) matching app=test found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test/show_diff_on_changed_selected_release b/pkg/app/testdata/app_diff_test/show_diff_on_changed_selected_release
index a695f222..66b419fa 100644
--- a/pkg/app/testdata/app_diff_test/show_diff_on_changed_selected_release
+++ b/pkg/app/testdata/app_diff_test/show_diff_on_changed_selected_release
@@ -1,34 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: a
- 3: chart: incubator/raw
- 4: namespace: default
- 5: - name: b
- 6: chart: incubator/raw
- 7: namespace: default
- 8:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: a
- 3: chart: incubator/raw
- 4: namespace: default
- 5: - name: b
- 6: chart: incubator/raw
- 7: namespace: default
- 8:
-
merged environment: &{default map[] map[]}
1 release(s) matching name=a found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test/shows_no_diff_on_already_uninstalled_selected_release b/pkg/app/testdata/app_diff_test/shows_no_diff_on_already_uninstalled_selected_release
index a0a45f09..58d51e49 100644
--- a/pkg/app/testdata/app_diff_test/shows_no_diff_on_already_uninstalled_selected_release
+++ b/pkg/app/testdata/app_diff_test/shows_no_diff_on_already_uninstalled_selected_release
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: a
- 3: chart: incubator/raw
- 4: installed: false
- 5: namespace: default
- 6: - name: b
- 7: chart: incubator/raw
- 8: namespace: default
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: a
- 3: chart: incubator/raw
- 4: installed: false
- 5: namespace: default
- 6: - name: b
- 7: chart: incubator/raw
- 8: namespace: default
- 9:
-
merged environment: &{default map[] map[]}
1 release(s) matching name=a found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test/skip-needs b/pkg/app/testdata/app_diff_test/skip-needs
index 67ee2936..ceb99f63 100644
--- a/pkg/app/testdata/app_diff_test/skip-needs
+++ b/pkg/app/testdata/app_diff_test/skip-needs
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
2 release(s) matching app=test found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/bar b/pkg/app/testdata/app_diff_test_1/bar
index cf0a0bb0..26cad101 100644
--- a/pkg/app/testdata/app_diff_test_1/bar
+++ b/pkg/app/testdata/app_diff_test_1/bar
@@ -1,38 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: namespace: ns1
- 5: needs:
- 6: - ns2/bar
- 7: - name: bar
- 8: chart: mychart2
- 9: namespace: ns2
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: namespace: ns1
- 5: needs:
- 6: - ns2/bar
- 7: - name: bar
- 8: chart: mychart2
- 9: namespace: ns2
-10:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/bar_is_disabled b/pkg/app/testdata/app_diff_test_1/bar_is_disabled
new file mode 100644
index 00000000..219f70e2
--- /dev/null
+++ b/pkg/app/testdata/app_diff_test_1/bar_is_disabled
@@ -0,0 +1,18 @@
+processing file "helmfile.yaml" in directory "."
+changing working directory to "/path/to"
+merged environment: &{default map[] map[]}
+3 release(s) found in helmfile.yaml
+
+processing 2 groups of releases in this order:
+GROUP RELEASES
+1 default/ns1/bar
+2 default/ns1/foo
+
+processing releases in group 1/2: default/ns1/bar
+processing releases in group 2/2: default/ns1/foo
+Affected releases are:
+ bar (mychart2) DELETED
+ bar (mychart2) UPDATED
+ foo (mychart1) UPDATED
+
+changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/app_diff_test_1/delete_bar_when_bar_needs_foo b/pkg/app/testdata/app_diff_test_1/delete_bar_when_bar_needs_foo
index 993d71e8..96453206 100644
--- a/pkg/app/testdata/app_diff_test_1/delete_bar_when_bar_needs_foo
+++ b/pkg/app/testdata/app_diff_test_1/delete_bar_when_bar_needs_foo
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: - name: bar
- 5: chart: mychart2
- 6: installed: false
- 7: needs:
- 8: - foo
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: - name: bar
- 5: chart: mychart2
- 6: installed: false
- 7: needs:
- 8: - foo
- 9:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/delete_bar_when_foo_needs_bar b/pkg/app/testdata/app_diff_test_1/delete_bar_when_foo_needs_bar
index febbbebd..9afd557d 100644
--- a/pkg/app/testdata/app_diff_test_1/delete_bar_when_foo_needs_bar
+++ b/pkg/app/testdata/app_diff_test_1/delete_bar_when_foo_needs_bar
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/delete_bar_when_foo_needs_bar_with_include-needs b/pkg/app/testdata/app_diff_test_1/delete_bar_when_foo_needs_bar_with_include-needs
index 1ac8c2d3..820af517 100644
--- a/pkg/app/testdata/app_diff_test_1/delete_bar_when_foo_needs_bar_with_include-needs
+++ b/pkg/app/testdata/app_diff_test_1/delete_bar_when_foo_needs_bar_with_include-needs
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/delete_bar_when_foo_needs_bar_with_skip-needs b/pkg/app/testdata/app_diff_test_1/delete_bar_when_foo_needs_bar_with_skip-needs
index 2cae2be4..b79babf5 100644
--- a/pkg/app/testdata/app_diff_test_1/delete_bar_when_foo_needs_bar_with_skip-needs
+++ b/pkg/app/testdata/app_diff_test_1/delete_bar_when_foo_needs_bar_with_skip-needs
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/delete_foo_and_bar_when_bar_needs_foo b/pkg/app/testdata/app_diff_test_1/delete_foo_and_bar_when_bar_needs_foo
index db62f332..126b04b4 100644
--- a/pkg/app/testdata/app_diff_test_1/delete_foo_and_bar_when_bar_needs_foo
+++ b/pkg/app/testdata/app_diff_test_1/delete_foo_and_bar_when_bar_needs_foo
@@ -1,40 +1,6 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: needs:
- 6: - foo
- 7: - name: foo
- 8: chart: mychart1
- 9: installed: false
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: needs:
- 6: - foo
- 7: - name: foo
- 8: chart: mychart1
- 9: installed: false
-10:
-
merged environment: &{default map[] map[]}
-WARNING: release bar needs foo, but foo is not installed due to installed: false. Either mark foo as installed or remove foo from bar's needs
2 release(s) found in helmfile.yaml
Affected releases are:
diff --git a/pkg/app/testdata/app_diff_test_1/delete_foo_and_bar_when_foo_needs_bar b/pkg/app/testdata/app_diff_test_1/delete_foo_and_bar_when_foo_needs_bar
index 7268940e..126b04b4 100644
--- a/pkg/app/testdata/app_diff_test_1/delete_foo_and_bar_when_foo_needs_bar
+++ b/pkg/app/testdata/app_diff_test_1/delete_foo_and_bar_when_foo_needs_bar
@@ -1,40 +1,6 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: installed: false
- 8: needs:
- 9: - bar
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: installed: false
- 8: needs:
- 9: - bar
-10:
-
merged environment: &{default map[] map[]}
-WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
2 release(s) found in helmfile.yaml
Affected releases are:
diff --git a/pkg/app/testdata/app_diff_test_1/delete_foo_when_bar_needs_foo b/pkg/app/testdata/app_diff_test_1/delete_foo_when_bar_needs_foo
index b10dd133..fb673733 100644
--- a/pkg/app/testdata/app_diff_test_1/delete_foo_when_bar_needs_foo
+++ b/pkg/app/testdata/app_diff_test_1/delete_foo_when_bar_needs_foo
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: installed: false
- 5: - name: bar
- 6: chart: mychart2
- 7: needs:
- 8: - foo
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: installed: false
- 5: - name: bar
- 6: chart: mychart2
- 7: needs:
- 8: - foo
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release bar needs foo, but foo is not installed due to installed: false. Either mark foo as installed or remove foo from bar's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/delete_foo_when_bar_needs_foo_with_include-needs b/pkg/app/testdata/app_diff_test_1/delete_foo_when_bar_needs_foo_with_include-needs
index c34f7b46..3456f070 100644
--- a/pkg/app/testdata/app_diff_test_1/delete_foo_when_bar_needs_foo_with_include-needs
+++ b/pkg/app/testdata/app_diff_test_1/delete_foo_when_bar_needs_foo_with_include-needs
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: installed: false
- 5: - name: bar
- 6: chart: mychart2
- 7: needs:
- 8: - foo
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: installed: false
- 5: - name: bar
- 6: chart: mychart2
- 7: needs:
- 8: - foo
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release bar needs foo, but foo is not installed due to installed: false. Either mark foo as installed or remove foo from bar's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/delete_foo_when_bar_needs_foo_with_skip-needs b/pkg/app/testdata/app_diff_test_1/delete_foo_when_bar_needs_foo_with_skip-needs
index 60002d0c..13f06734 100644
--- a/pkg/app/testdata/app_diff_test_1/delete_foo_when_bar_needs_foo_with_skip-needs
+++ b/pkg/app/testdata/app_diff_test_1/delete_foo_when_bar_needs_foo_with_skip-needs
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: installed: false
- 5: - name: bar
- 6: chart: mychart2
- 7: needs:
- 8: - foo
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: installed: false
- 5: - name: bar
- 6: chart: mychart2
- 7: needs:
- 8: - foo
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release bar needs foo, but foo is not installed due to installed: false. Either mark foo as installed or remove foo from bar's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/delete_foo_when_foo_needs_bar b/pkg/app/testdata/app_diff_test_1/delete_foo_when_foo_needs_bar
index f2e49270..cb7b8fc7 100644
--- a/pkg/app/testdata/app_diff_test_1/delete_foo_when_foo_needs_bar
+++ b/pkg/app/testdata/app_diff_test_1/delete_foo_when_foo_needs_bar
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: installed: false
- 7: needs:
- 8: - bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: installed: false
- 7: needs:
- 8: - bar
- 9:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/helm3_upgrade_when_ns2_bar_needs_ns1_foo b/pkg/app/testdata/app_diff_test_1/helm3_upgrade_when_ns2_bar_needs_ns1_foo
index 2c4a2fef..bb76a70e 100644
--- a/pkg/app/testdata/app_diff_test_1/helm3_upgrade_when_ns2_bar_needs_ns1_foo
+++ b/pkg/app/testdata/app_diff_test_1/helm3_upgrade_when_ns2_bar_needs_ns1_foo
@@ -1,38 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: namespace: ns2
- 5: needs:
- 6: - ns1/foo
- 7: - name: foo
- 8: chart: mychart1
- 9: namespace: ns1
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: namespace: ns2
- 5: needs:
- 6: - ns1/foo
- 7: - name: foo
- 8: chart: mychart1
- 9: namespace: ns1
-10:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/install b/pkg/app/testdata/app_diff_test_1/install
index bc8c2830..ba4ef00f 100644
--- a/pkg/app/testdata/app_diff_test_1/install
+++ b/pkg/app/testdata/app_diff_test_1/install
@@ -1,38 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: chart: mychart3
- 4: - name: foo
- 5: chart: mychart1
- 6: needs:
- 7: - bar
- 8: - name: bar
- 9: chart: mychart2
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: chart: mychart3
- 4: - name: foo
- 5: chart: mychart1
- 6: needs:
- 7: - bar
- 8: - name: bar
- 9: chart: mychart2
-10:
-
merged environment: &{default map[] map[]}
3 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/non-existent_release_in_needs b/pkg/app/testdata/app_diff_test_1/non-existent_release_in_needs
new file mode 100644
index 00000000..60dead90
--- /dev/null
+++ b/pkg/app/testdata/app_diff_test_1/non-existent_release_in_needs
@@ -0,0 +1,8 @@
+processing file "helmfile.yaml" in directory "."
+changing working directory to "/path/to"
+merged environment: &{default map[] map[]}
+WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
+2 release(s) found in helmfile.yaml
+
+err: release(s) "default//foo" depend(s) on an undefined release "default//bar". Perhaps you made a typo in "needs" or forgot defining a release named "bar" with appropriate "namespace" and "kubeContext"?
+changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/app_diff_test_1/noop b/pkg/app/testdata/app_diff_test_1/noop
index 5c2c5753..beea0d82 100644
--- a/pkg/app/testdata/app_diff_test_1/noop
+++ b/pkg/app/testdata/app_diff_test_1/noop
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: installed: false
- 7: needs:
- 8: - bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: installed: false
- 7: needs:
- 8: - bar
- 9:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/smoke b/pkg/app/testdata/app_diff_test_1/smoke
index 3cd9cd5a..bf85c9e5 100644
--- a/pkg/app/testdata/app_diff_test_1/smoke
+++ b/pkg/app/testdata/app_diff_test_1/smoke
@@ -1,128 +1,6 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: database
- 3: chart: charts/mysql
- 4: needs:
- 5: - logging
- 6: - name: frontend-v1
- 7: chart: charts/frontend
- 8: installed: false
- 9: needs:
-10: - servicemesh
-11: - logging
-12: - backend-v1
-13: - name: frontend-v2
-14: chart: charts/frontend
-15: needs:
-16: - servicemesh
-17: - logging
-18: - backend-v2
-19: - name: frontend-v3
-20: chart: charts/frontend
-21: needs:
-22: - servicemesh
-23: - logging
-24: - backend-v2
-25: - name: backend-v1
-26: chart: charts/backend
-27: installed: false
-28: needs:
-29: - servicemesh
-30: - logging
-31: - database
-32: - anotherbackend
-33: - name: backend-v2
-34: chart: charts/backend
-35: needs:
-36: - servicemesh
-37: - logging
-38: - database
-39: - anotherbackend
-40: - name: anotherbackend
-41: chart: charts/anotherbackend
-42: needs:
-43: - servicemesh
-44: - logging
-45: - database
-46: - name: servicemesh
-47: chart: charts/istio
-48: needs:
-49: - logging
-50: - name: logging
-51: chart: charts/fluent-bit
-52: - name: front-proxy
-53: chart: stable/envoy
-54:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: database
- 3: chart: charts/mysql
- 4: needs:
- 5: - logging
- 6: - name: frontend-v1
- 7: chart: charts/frontend
- 8: installed: false
- 9: needs:
-10: - servicemesh
-11: - logging
-12: - backend-v1
-13: - name: frontend-v2
-14: chart: charts/frontend
-15: needs:
-16: - servicemesh
-17: - logging
-18: - backend-v2
-19: - name: frontend-v3
-20: chart: charts/frontend
-21: needs:
-22: - servicemesh
-23: - logging
-24: - backend-v2
-25: - name: backend-v1
-26: chart: charts/backend
-27: installed: false
-28: needs:
-29: - servicemesh
-30: - logging
-31: - database
-32: - anotherbackend
-33: - name: backend-v2
-34: chart: charts/backend
-35: needs:
-36: - servicemesh
-37: - logging
-38: - database
-39: - anotherbackend
-40: - name: anotherbackend
-41: chart: charts/anotherbackend
-42: needs:
-43: - servicemesh
-44: - logging
-45: - database
-46: - name: servicemesh
-47: chart: charts/istio
-48: needs:
-49: - logging
-50: - name: logging
-51: chart: charts/fluent-bit
-52: - name: front-proxy
-53: chart: stable/envoy
-54:
-
merged environment: &{default map[] map[]}
-WARNING: release frontend-v1 needs backend-v1, but backend-v1 is not installed due to installed: false. Either mark backend-v1 as installed or remove backend-v1 from frontend-v1's needs
10 release(s) found in helmfile.yaml
processing 5 groups of releases in this order:
diff --git a/pkg/app/testdata/app_diff_test_1/unselected_release_in_needs b/pkg/app/testdata/app_diff_test_1/unselected_release_in_needs
new file mode 100644
index 00000000..d82f9d50
--- /dev/null
+++ b/pkg/app/testdata/app_diff_test_1/unselected_release_in_needs
@@ -0,0 +1,7 @@
+processing file "helmfile.yaml" in directory "."
+changing working directory to "/path/to"
+merged environment: &{default map[] map[]}
+1 release(s) matching name=foo found in helmfile.yaml
+
+err: release "default//foo" depends on "default//bar" which does not match the selectors. Please add a selector like "--selector name=bar", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies
+changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/app_diff_test_1/upgrade_when_bar_needs_foo b/pkg/app/testdata/app_diff_test_1/upgrade_when_bar_needs_foo
index 20aae345..e1ade01c 100644
--- a/pkg/app/testdata/app_diff_test_1/upgrade_when_bar_needs_foo
+++ b/pkg/app/testdata/app_diff_test_1/upgrade_when_bar_needs_foo
@@ -1,34 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: - name: bar
- 5: chart: mychart2
- 6: needs:
- 7: - foo
- 8:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: - name: bar
- 5: chart: mychart2
- 6: needs:
- 7: - foo
- 8:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/upgrade_when_bar_needs_foo,_with_ns_override b/pkg/app/testdata/app_diff_test_1/upgrade_when_bar_needs_foo,_with_ns_override
index f78c15ac..37ac4517 100644
--- a/pkg/app/testdata/app_diff_test_1/upgrade_when_bar_needs_foo,_with_ns_override
+++ b/pkg/app/testdata/app_diff_test_1/upgrade_when_bar_needs_foo,_with_ns_override
@@ -1,34 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: - name: bar
- 5: chart: mychart2
- 6: needs:
- 7: - foo
- 8:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: - name: bar
- 5: chart: mychart2
- 6: needs:
- 7: - foo
- 8:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/upgrade_when_foo_needs_bar b/pkg/app/testdata/app_diff_test_1/upgrade_when_foo_needs_bar
index b87bccce..4add017f 100644
--- a/pkg/app/testdata/app_diff_test_1/upgrade_when_foo_needs_bar
+++ b/pkg/app/testdata/app_diff_test_1/upgrade_when_foo_needs_bar
@@ -1,34 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: needs:
- 7: - bar
- 8:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: needs:
- 7: - bar
- 8:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/upgrade_when_foo_needs_bar,_with_ns_override b/pkg/app/testdata/app_diff_test_1/upgrade_when_foo_needs_bar,_with_ns_override
index e0d964ad..f54ab275 100644
--- a/pkg/app/testdata/app_diff_test_1/upgrade_when_foo_needs_bar,_with_ns_override
+++ b/pkg/app/testdata/app_diff_test_1/upgrade_when_foo_needs_bar,_with_ns_override
@@ -1,34 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: needs:
- 7: - bar
- 8:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: needs:
- 7: - bar
- 8:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/upgrade_when_foo_needs_bar_with_context_override b/pkg/app/testdata/app_diff_test_1/upgrade_when_foo_needs_bar_with_context_override
index bbdfc3d1..358aaaf6 100644
--- a/pkg/app/testdata/app_diff_test_1/upgrade_when_foo_needs_bar_with_context_override
+++ b/pkg/app/testdata/app_diff_test_1/upgrade_when_foo_needs_bar_with_context_override
@@ -1,38 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: helmDefaults:
- 2: kubeContext: hello/world
- 3: releases:
- 4: - name: bar
- 5: chart: mychart2
- 6: - name: foo
- 7: chart: mychart1
- 8: needs:
- 9: - bar
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: helmDefaults:
- 2: kubeContext: hello/world
- 3: releases:
- 4: - name: bar
- 5: chart: mychart2
- 6: - name: foo
- 7: chart: mychart1
- 8: needs:
- 9: - bar
-10:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/upgrade_when_releaseb_needs_releasea_with_aws_context b/pkg/app/testdata/app_diff_test_1/upgrade_when_releaseb_needs_releasea_with_aws_context
index e6383a6a..1ca95228 100644
--- a/pkg/app/testdata/app_diff_test_1/upgrade_when_releaseb_needs_releasea_with_aws_context
+++ b/pkg/app/testdata/app_diff_test_1/upgrade_when_releaseb_needs_releasea_with_aws_context
@@ -1,42 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: releaseA
- 3: chart: mychart1
- 4: namespace: namespaceA
- 5: kubeContext: arn:aws:eks:us-east-1:1234567890:cluster/myekscluster
- 6: - name: releaseB
- 7: chart: mychart2
- 8: namespace: namespaceA
- 9: kubeContext: arn:aws:eks:us-east-1:1234567890:cluster/myekscluster
-10: needs:
-11: - arn:aws:eks:us-east-1:1234567890:cluster/myekscluster/namespaceA/releaseA
-12:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: releaseA
- 3: chart: mychart1
- 4: namespace: namespaceA
- 5: kubeContext: arn:aws:eks:us-east-1:1234567890:cluster/myekscluster
- 6: - name: releaseB
- 7: chart: mychart2
- 8: namespace: namespaceA
- 9: kubeContext: arn:aws:eks:us-east-1:1234567890:cluster/myekscluster
-10: needs:
-11: - arn:aws:eks:us-east-1:1234567890:cluster/myekscluster/namespaceA/releaseA
-12:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/upgrade_when_tns1_ns1_foo_needs_tns2_ns2_bar b/pkg/app/testdata/app_diff_test_1/upgrade_when_tns1_ns1_foo_needs_tns2_ns2_bar
index cf0a0bb0..26cad101 100644
--- a/pkg/app/testdata/app_diff_test_1/upgrade_when_tns1_ns1_foo_needs_tns2_ns2_bar
+++ b/pkg/app/testdata/app_diff_test_1/upgrade_when_tns1_ns1_foo_needs_tns2_ns2_bar
@@ -1,38 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: namespace: ns1
- 5: needs:
- 6: - ns2/bar
- 7: - name: bar
- 8: chart: mychart2
- 9: namespace: ns2
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: namespace: ns1
- 5: needs:
- 6: - ns2/bar
- 7: - name: bar
- 8: chart: mychart2
- 9: namespace: ns2
-10:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_1/upgrades_with_bad_selector b/pkg/app/testdata/app_diff_test_1/upgrades_with_bad_selector
new file mode 100644
index 00000000..8e3e99cf
--- /dev/null
+++ b/pkg/app/testdata/app_diff_test_1/upgrades_with_bad_selector
@@ -0,0 +1,33 @@
+processing file "helmfile.yaml.gotmpl" in directory "."
+changing working directory to "/path/to"
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
+ 0:
+ 1:
+ 2:
+ 3: releases:
+ 4: - name: kubernetes-external-secrets
+ 5: chart: incubator/raw
+ 6: namespace: kube-system
+ 7:
+ 8: - name: external-secrets
+ 9: chart: incubator/raw
+10: namespace: default
+11: labels:
+12: app: test
+13: needs:
+14: - kube-system/kubernetes-external-secrets
+15:
+16: - name: my-release
+17: chart: incubator/raw
+18: namespace: default
+19: labels:
+20: app: test
+21: needs:
+22: - default/external-secrets
+23:
+
+merged environment: &{default map[] map[]}
+0 release(s) matching app=test_non_existent found in helmfile.yaml.gotmpl
+
+changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/app_diff_test_1/upgrades_with_good_selector_with_--skip-needs=false b/pkg/app/testdata/app_diff_test_1/upgrades_with_good_selector_with_--skip-needs=false
new file mode 100644
index 00000000..f29aa140
--- /dev/null
+++ b/pkg/app/testdata/app_diff_test_1/upgrades_with_good_selector_with_--skip-needs=false
@@ -0,0 +1,34 @@
+processing file "helmfile.yaml.gotmpl" in directory "."
+changing working directory to "/path/to"
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
+ 0:
+ 1:
+ 2:
+ 3: releases:
+ 4: - name: kubernetes-external-secrets
+ 5: chart: incubator/raw
+ 6: namespace: kube-system
+ 7:
+ 8: - name: external-secrets
+ 9: chart: incubator/raw
+10: namespace: default
+11: labels:
+12: app: test
+13: needs:
+14: - kube-system/kubernetes-external-secrets
+15:
+16: - name: my-release
+17: chart: incubator/raw
+18: namespace: default
+19: labels:
+20: app: test
+21: needs:
+22: - default/external-secrets
+23:
+
+merged environment: &{default map[] map[]}
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
+
+err: release "default/default/external-secrets" depends on "default/kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies
+changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/app_diff_test_1/upgrades_with_good_selector_with_--skip-needs=true b/pkg/app/testdata/app_diff_test_1/upgrades_with_good_selector_with_--skip-needs=true
index 427f901f..6e264062 100644
--- a/pkg/app/testdata/app_diff_test_1/upgrades_with_good_selector_with_--skip-needs=true
+++ b/pkg/app/testdata/app_diff_test_1/upgrades_with_good_selector_with_--skip-needs=true
@@ -1,39 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -60,7 +28,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
23:
merged environment: &{default map[] map[]}
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
processing 2 groups of releases in this order:
GROUP RELEASES
diff --git a/pkg/app/testdata/app_diff_test_2/bar b/pkg/app/testdata/app_diff_test_2/bar
index 91ee7d7e..f5cea33b 100644
--- a/pkg/app/testdata/app_diff_test_2/bar
+++ b/pkg/app/testdata/app_diff_test_2/bar
@@ -1,38 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: namespace: ns1
- 5: needs:
- 6: - ns2/bar
- 7: - name: bar
- 8: chart: mychart2
- 9: namespace: ns2
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: namespace: ns1
- 5: needs:
- 6: - ns2/bar
- 7: - name: bar
- 8: chart: mychart2
- 9: namespace: ns2
-10:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_2/delete_bar_when_bar_needs_foo b/pkg/app/testdata/app_diff_test_2/delete_bar_when_bar_needs_foo
index 4e540849..7867ad46 100644
--- a/pkg/app/testdata/app_diff_test_2/delete_bar_when_bar_needs_foo
+++ b/pkg/app/testdata/app_diff_test_2/delete_bar_when_bar_needs_foo
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: - name: bar
- 5: chart: mychart2
- 6: installed: false
- 7: needs:
- 8: - foo
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: - name: bar
- 5: chart: mychart2
- 6: installed: false
- 7: needs:
- 8: - foo
- 9:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_2/delete_bar_when_foo_needs_bar b/pkg/app/testdata/app_diff_test_2/delete_bar_when_foo_needs_bar
index f3a1cd0f..e0bc8dea 100644
--- a/pkg/app/testdata/app_diff_test_2/delete_bar_when_foo_needs_bar
+++ b/pkg/app/testdata/app_diff_test_2/delete_bar_when_foo_needs_bar
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_2/delete_bar_when_foo_needs_bar_with_include-needs b/pkg/app/testdata/app_diff_test_2/delete_bar_when_foo_needs_bar_with_include-needs
index 451d5aba..f08db1b7 100644
--- a/pkg/app/testdata/app_diff_test_2/delete_bar_when_foo_needs_bar_with_include-needs
+++ b/pkg/app/testdata/app_diff_test_2/delete_bar_when_foo_needs_bar_with_include-needs
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_2/delete_bar_when_foo_needs_bar_with_skip-needs b/pkg/app/testdata/app_diff_test_2/delete_bar_when_foo_needs_bar_with_skip-needs
index a54fce36..03791661 100644
--- a/pkg/app/testdata/app_diff_test_2/delete_bar_when_foo_needs_bar_with_skip-needs
+++ b/pkg/app/testdata/app_diff_test_2/delete_bar_when_foo_needs_bar_with_skip-needs
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - bar
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_2/delete_foo_and_bar_when_bar_needs_foo b/pkg/app/testdata/app_diff_test_2/delete_foo_and_bar_when_bar_needs_foo
index db62f332..126b04b4 100644
--- a/pkg/app/testdata/app_diff_test_2/delete_foo_and_bar_when_bar_needs_foo
+++ b/pkg/app/testdata/app_diff_test_2/delete_foo_and_bar_when_bar_needs_foo
@@ -1,40 +1,6 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: needs:
- 6: - foo
- 7: - name: foo
- 8: chart: mychart1
- 9: installed: false
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: needs:
- 6: - foo
- 7: - name: foo
- 8: chart: mychart1
- 9: installed: false
-10:
-
merged environment: &{default map[] map[]}
-WARNING: release bar needs foo, but foo is not installed due to installed: false. Either mark foo as installed or remove foo from bar's needs
2 release(s) found in helmfile.yaml
Affected releases are:
diff --git a/pkg/app/testdata/app_diff_test_2/delete_foo_and_bar_when_foo_needs_bar b/pkg/app/testdata/app_diff_test_2/delete_foo_and_bar_when_foo_needs_bar
index 7268940e..126b04b4 100644
--- a/pkg/app/testdata/app_diff_test_2/delete_foo_and_bar_when_foo_needs_bar
+++ b/pkg/app/testdata/app_diff_test_2/delete_foo_and_bar_when_foo_needs_bar
@@ -1,40 +1,6 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: installed: false
- 8: needs:
- 9: - bar
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: mychart1
- 7: installed: false
- 8: needs:
- 9: - bar
-10:
-
merged environment: &{default map[] map[]}
-WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
2 release(s) found in helmfile.yaml
Affected releases are:
diff --git a/pkg/app/testdata/app_diff_test_2/delete_foo_when_bar_needs_foo b/pkg/app/testdata/app_diff_test_2/delete_foo_when_bar_needs_foo
index f4cc93bd..52e9c63e 100644
--- a/pkg/app/testdata/app_diff_test_2/delete_foo_when_bar_needs_foo
+++ b/pkg/app/testdata/app_diff_test_2/delete_foo_when_bar_needs_foo
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: installed: false
- 5: - name: bar
- 6: chart: mychart2
- 7: needs:
- 8: - foo
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: installed: false
- 5: - name: bar
- 6: chart: mychart2
- 7: needs:
- 8: - foo
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release bar needs foo, but foo is not installed due to installed: false. Either mark foo as installed or remove foo from bar's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_2/delete_foo_when_foo_needs_bar b/pkg/app/testdata/app_diff_test_2/delete_foo_when_foo_needs_bar
index 8c2fb60c..b897150f 100644
--- a/pkg/app/testdata/app_diff_test_2/delete_foo_when_foo_needs_bar
+++ b/pkg/app/testdata/app_diff_test_2/delete_foo_when_foo_needs_bar
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: installed: false
- 7: needs:
- 8: - bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: installed: false
- 7: needs:
- 8: - bar
- 9:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_2/foo b/pkg/app/testdata/app_diff_test_2/foo
index 7cdf3a2e..2638d8ff 100644
--- a/pkg/app/testdata/app_diff_test_2/foo
+++ b/pkg/app/testdata/app_diff_test_2/foo
@@ -1,38 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: namespace: ns2
- 5: needs:
- 6: - ns1/foo
- 7: - name: foo
- 8: chart: mychart1
- 9: namespace: ns1
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: namespace: ns2
- 5: needs:
- 6: - ns1/foo
- 7: - name: foo
- 8: chart: mychart1
- 9: namespace: ns1
-10:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_2/helm3_upgrade_when_ns2_bar_needs_ns1_foo b/pkg/app/testdata/app_diff_test_2/helm3_upgrade_when_ns2_bar_needs_ns1_foo
index 7cdf3a2e..2638d8ff 100644
--- a/pkg/app/testdata/app_diff_test_2/helm3_upgrade_when_ns2_bar_needs_ns1_foo
+++ b/pkg/app/testdata/app_diff_test_2/helm3_upgrade_when_ns2_bar_needs_ns1_foo
@@ -1,38 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: namespace: ns2
- 5: needs:
- 6: - ns1/foo
- 7: - name: foo
- 8: chart: mychart1
- 9: namespace: ns1
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: namespace: ns2
- 5: needs:
- 6: - ns1/foo
- 7: - name: foo
- 8: chart: mychart1
- 9: namespace: ns1
-10:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_2/install b/pkg/app/testdata/app_diff_test_2/install
index 95591b3a..55f951fc 100644
--- a/pkg/app/testdata/app_diff_test_2/install
+++ b/pkg/app/testdata/app_diff_test_2/install
@@ -1,38 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: chart: mychart3
- 4: - name: foo
- 5: chart: mychart1
- 6: needs:
- 7: - bar
- 8: - name: bar
- 9: chart: mychart2
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: chart: mychart3
- 4: - name: foo
- 5: chart: mychart1
- 6: needs:
- 7: - bar
- 8: - name: bar
- 9: chart: mychart2
-10:
-
merged environment: &{default map[] map[]}
3 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_2/non-existent_release_in_needs b/pkg/app/testdata/app_diff_test_2/non-existent_release_in_needs
new file mode 100644
index 00000000..34aaed69
--- /dev/null
+++ b/pkg/app/testdata/app_diff_test_2/non-existent_release_in_needs
@@ -0,0 +1,8 @@
+processing file "helmfile.yaml" in directory "."
+changing working directory to "/path/to"
+merged environment: &{default map[] map[]}
+WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
+2 release(s) found in helmfile.yaml
+
+err: release(s) "foo" depend(s) on an undefined release "bar". Perhaps you made a typo in "needs" or forgot defining a release named "bar" with appropriate "namespace" and "kubeContext"?
+changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/app_diff_test_2/noop b/pkg/app/testdata/app_diff_test_2/noop
index 4bb79c7f..3f843e50 100644
--- a/pkg/app/testdata/app_diff_test_2/noop
+++ b/pkg/app/testdata/app_diff_test_2/noop
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: installed: false
- 7: needs:
- 8: - bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: installed: false
- 7: needs:
- 8: - bar
- 9:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_2/smoke b/pkg/app/testdata/app_diff_test_2/smoke
index fcaf8164..d77b29ed 100644
--- a/pkg/app/testdata/app_diff_test_2/smoke
+++ b/pkg/app/testdata/app_diff_test_2/smoke
@@ -1,128 +1,6 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: database
- 3: chart: charts/mysql
- 4: needs:
- 5: - logging
- 6: - name: frontend-v1
- 7: chart: charts/frontend
- 8: installed: false
- 9: needs:
-10: - servicemesh
-11: - logging
-12: - backend-v1
-13: - name: frontend-v2
-14: chart: charts/frontend
-15: needs:
-16: - servicemesh
-17: - logging
-18: - backend-v2
-19: - name: frontend-v3
-20: chart: charts/frontend
-21: needs:
-22: - servicemesh
-23: - logging
-24: - backend-v2
-25: - name: backend-v1
-26: chart: charts/backend
-27: installed: false
-28: needs:
-29: - servicemesh
-30: - logging
-31: - database
-32: - anotherbackend
-33: - name: backend-v2
-34: chart: charts/backend
-35: needs:
-36: - servicemesh
-37: - logging
-38: - database
-39: - anotherbackend
-40: - name: anotherbackend
-41: chart: charts/anotherbackend
-42: needs:
-43: - servicemesh
-44: - logging
-45: - database
-46: - name: servicemesh
-47: chart: charts/istio
-48: needs:
-49: - logging
-50: - name: logging
-51: chart: charts/fluent-bit
-52: - name: front-proxy
-53: chart: stable/envoy
-54:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: database
- 3: chart: charts/mysql
- 4: needs:
- 5: - logging
- 6: - name: frontend-v1
- 7: chart: charts/frontend
- 8: installed: false
- 9: needs:
-10: - servicemesh
-11: - logging
-12: - backend-v1
-13: - name: frontend-v2
-14: chart: charts/frontend
-15: needs:
-16: - servicemesh
-17: - logging
-18: - backend-v2
-19: - name: frontend-v3
-20: chart: charts/frontend
-21: needs:
-22: - servicemesh
-23: - logging
-24: - backend-v2
-25: - name: backend-v1
-26: chart: charts/backend
-27: installed: false
-28: needs:
-29: - servicemesh
-30: - logging
-31: - database
-32: - anotherbackend
-33: - name: backend-v2
-34: chart: charts/backend
-35: needs:
-36: - servicemesh
-37: - logging
-38: - database
-39: - anotherbackend
-40: - name: anotherbackend
-41: chart: charts/anotherbackend
-42: needs:
-43: - servicemesh
-44: - logging
-45: - database
-46: - name: servicemesh
-47: chart: charts/istio
-48: needs:
-49: - logging
-50: - name: logging
-51: chart: charts/fluent-bit
-52: - name: front-proxy
-53: chart: stable/envoy
-54:
-
merged environment: &{default map[] map[]}
-WARNING: release frontend-v1 needs backend-v1, but backend-v1 is not installed due to installed: false. Either mark backend-v1 as installed or remove backend-v1 from frontend-v1's needs
10 release(s) found in helmfile.yaml
processing 5 groups of releases in this order:
diff --git a/pkg/app/testdata/app_diff_test_2/upgrade_when_bar_needs_foo b/pkg/app/testdata/app_diff_test_2/upgrade_when_bar_needs_foo
index 6b69bd73..2239c0c5 100644
--- a/pkg/app/testdata/app_diff_test_2/upgrade_when_bar_needs_foo
+++ b/pkg/app/testdata/app_diff_test_2/upgrade_when_bar_needs_foo
@@ -1,34 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: - name: bar
- 5: chart: mychart2
- 6: needs:
- 7: - foo
- 8:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: - name: bar
- 5: chart: mychart2
- 6: needs:
- 7: - foo
- 8:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_2/upgrade_when_bar_needs_foo,_with_ns_override b/pkg/app/testdata/app_diff_test_2/upgrade_when_bar_needs_foo,_with_ns_override
index 87892d12..0841c62e 100644
--- a/pkg/app/testdata/app_diff_test_2/upgrade_when_bar_needs_foo,_with_ns_override
+++ b/pkg/app/testdata/app_diff_test_2/upgrade_when_bar_needs_foo,_with_ns_override
@@ -1,34 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: - name: bar
- 5: chart: mychart2
- 6: needs:
- 7: - foo
- 8:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: mychart1
- 4: - name: bar
- 5: chart: mychart2
- 6: needs:
- 7: - foo
- 8:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_2/upgrade_when_foo_needs_bar b/pkg/app/testdata/app_diff_test_2/upgrade_when_foo_needs_bar
index 7ea553a7..0a5c6018 100644
--- a/pkg/app/testdata/app_diff_test_2/upgrade_when_foo_needs_bar
+++ b/pkg/app/testdata/app_diff_test_2/upgrade_when_foo_needs_bar
@@ -1,34 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: needs:
- 7: - bar
- 8:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: needs:
- 7: - bar
- 8:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_2/upgrade_when_foo_needs_bar,_with_ns_override b/pkg/app/testdata/app_diff_test_2/upgrade_when_foo_needs_bar,_with_ns_override
index 49bb72fe..686dabf1 100644
--- a/pkg/app/testdata/app_diff_test_2/upgrade_when_foo_needs_bar,_with_ns_override
+++ b/pkg/app/testdata/app_diff_test_2/upgrade_when_foo_needs_bar,_with_ns_override
@@ -1,34 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: needs:
- 7: - bar
- 8:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: mychart2
- 4: - name: foo
- 5: chart: mychart1
- 6: needs:
- 7: - bar
- 8:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/app_diff_test_2/upgrades_with_bad_selector b/pkg/app/testdata/app_diff_test_2/upgrades_with_bad_selector
new file mode 100644
index 00000000..8e3e99cf
--- /dev/null
+++ b/pkg/app/testdata/app_diff_test_2/upgrades_with_bad_selector
@@ -0,0 +1,33 @@
+processing file "helmfile.yaml.gotmpl" in directory "."
+changing working directory to "/path/to"
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
+ 0:
+ 1:
+ 2:
+ 3: releases:
+ 4: - name: kubernetes-external-secrets
+ 5: chart: incubator/raw
+ 6: namespace: kube-system
+ 7:
+ 8: - name: external-secrets
+ 9: chart: incubator/raw
+10: namespace: default
+11: labels:
+12: app: test
+13: needs:
+14: - kube-system/kubernetes-external-secrets
+15:
+16: - name: my-release
+17: chart: incubator/raw
+18: namespace: default
+19: labels:
+20: app: test
+21: needs:
+22: - default/external-secrets
+23:
+
+merged environment: &{default map[] map[]}
+0 release(s) matching app=test_non_existent found in helmfile.yaml.gotmpl
+
+changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/app_diff_test_2/upgrades_with_good_selector_with_--skip-needs=false b/pkg/app/testdata/app_diff_test_2/upgrades_with_good_selector_with_--skip-needs=false
new file mode 100644
index 00000000..3be41c57
--- /dev/null
+++ b/pkg/app/testdata/app_diff_test_2/upgrades_with_good_selector_with_--skip-needs=false
@@ -0,0 +1,34 @@
+processing file "helmfile.yaml.gotmpl" in directory "."
+changing working directory to "/path/to"
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
+ 0:
+ 1:
+ 2:
+ 3: releases:
+ 4: - name: kubernetes-external-secrets
+ 5: chart: incubator/raw
+ 6: namespace: kube-system
+ 7:
+ 8: - name: external-secrets
+ 9: chart: incubator/raw
+10: namespace: default
+11: labels:
+12: app: test
+13: needs:
+14: - kube-system/kubernetes-external-secrets
+15:
+16: - name: my-release
+17: chart: incubator/raw
+18: namespace: default
+19: labels:
+20: app: test
+21: needs:
+22: - default/external-secrets
+23:
+
+merged environment: &{default map[] map[]}
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
+
+err: release "default/external-secrets" depends on "kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies
+changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/app_diff_test_2/upgrades_with_good_selector_with_--skip-needs=true b/pkg/app/testdata/app_diff_test_2/upgrades_with_good_selector_with_--skip-needs=true
index 926e26fd..e61b33e8 100644
--- a/pkg/app/testdata/app_diff_test_2/upgrades_with_good_selector_with_--skip-needs=true
+++ b/pkg/app/testdata/app_diff_test_2/upgrades_with_good_selector_with_--skip-needs=true
@@ -1,39 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -60,7 +28,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
23:
merged environment: &{default map[] map[]}
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
processing 2 groups of releases in this order:
GROUP RELEASES
diff --git a/pkg/app/testdata/app_lint_test/bad_selector b/pkg/app/testdata/app_lint_test/bad_selector
index 9a3ab785..7d03a1f4 100644
--- a/pkg/app/testdata/app_lint_test/bad_selector
+++ b/pkg/app/testdata/app_lint_test/bad_selector
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
0 release(s) matching app=test_non_existent found in helmfile.yaml
diff --git a/pkg/app/testdata/app_lint_test/fail_on_unselected_need_by_default b/pkg/app/testdata/app_lint_test/fail_on_unselected_need_by_default
index a0113f65..ab53c3ad 100644
--- a/pkg/app/testdata/app_lint_test/fail_on_unselected_need_by_default
+++ b/pkg/app/testdata/app_lint_test/fail_on_unselected_need_by_default
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
2 release(s) matching app=test found in helmfile.yaml
diff --git a/pkg/app/testdata/app_lint_test/include-needs b/pkg/app/testdata/app_lint_test/include-needs
index 892b6ea0..58fa9cab 100644
--- a/pkg/app/testdata/app_lint_test/include-needs
+++ b/pkg/app/testdata/app_lint_test/include-needs
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
2 release(s) matching app=test found in helmfile.yaml
diff --git a/pkg/app/testdata/app_lint_test/include-needs_should_not_fail_on_disabled_direct_need b/pkg/app/testdata/app_lint_test/include-needs_should_not_fail_on_disabled_direct_need
index ad93dd62..54c6135e 100644
--- a/pkg/app/testdata/app_lint_test/include-needs_should_not_fail_on_disabled_direct_need
+++ b/pkg/app/testdata/app_lint_test/include-needs_should_not_fail_on_disabled_direct_need
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=test2 found in helmfile.yaml
diff --git a/pkg/app/testdata/app_lint_test/include-needs_should_not_fail_on_disabled_transitive_need b/pkg/app/testdata/app_lint_test/include-needs_should_not_fail_on_disabled_transitive_need
index c51d74d8..f2ad0c8f 100644
--- a/pkg/app/testdata/app_lint_test/include-needs_should_not_fail_on_disabled_transitive_need
+++ b/pkg/app/testdata/app_lint_test/include-needs_should_not_fail_on_disabled_transitive_need
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=test3 found in helmfile.yaml
diff --git a/pkg/app/testdata/app_lint_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_direct_need b/pkg/app/testdata/app_lint_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_direct_need
index ad93dd62..54c6135e 100644
--- a/pkg/app/testdata/app_lint_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_direct_need
+++ b/pkg/app/testdata/app_lint_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_direct_need
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=test2 found in helmfile.yaml
diff --git a/pkg/app/testdata/app_lint_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_transitive_need b/pkg/app/testdata/app_lint_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_transitive_need
index c51d74d8..f2ad0c8f 100644
--- a/pkg/app/testdata/app_lint_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_transitive_need
+++ b/pkg/app/testdata/app_lint_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_transitive_need
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=test3 found in helmfile.yaml
diff --git a/pkg/app/testdata/app_lint_test/include-transitive-needs b/pkg/app/testdata/app_lint_test/include-transitive-needs
index 892b6ea0..58fa9cab 100644
--- a/pkg/app/testdata/app_lint_test/include-transitive-needs
+++ b/pkg/app/testdata/app_lint_test/include-transitive-needs
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
2 release(s) matching app=test found in helmfile.yaml
diff --git a/pkg/app/testdata/app_lint_test/include-transitive-needs_should_not_fail_on_disabled_transitive_need b/pkg/app/testdata/app_lint_test/include-transitive-needs_should_not_fail_on_disabled_transitive_need
index c51d74d8..f2ad0c8f 100644
--- a/pkg/app/testdata/app_lint_test/include-transitive-needs_should_not_fail_on_disabled_transitive_need
+++ b/pkg/app/testdata/app_lint_test/include-transitive-needs_should_not_fail_on_disabled_transitive_need
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=test3 found in helmfile.yaml
diff --git a/pkg/app/testdata/app_lint_test/skip-needs b/pkg/app/testdata/app_lint_test/skip-needs
index 67ee2936..ceb99f63 100644
--- a/pkg/app/testdata/app_lint_test/skip-needs
+++ b/pkg/app/testdata/app_lint_test/skip-needs
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
2 release(s) matching app=test found in helmfile.yaml
diff --git a/pkg/app/testdata/app_list_test/default_environment_includes_all_releases b/pkg/app/testdata/app_list_test/default_environment_includes_all_releases
index 5dd4bb4a..75efff96 100644
--- a/pkg/app/testdata/app_list_test/default_environment_includes_all_releases
+++ b/pkg/app/testdata/app_list_test/default_environment_includes_all_releases
@@ -1,221 +1,16 @@
found 3 helmfile state files in helmfile.d: /path/to/helmfile.d/helmfile_1.yaml, /path/to/helmfile.d/helmfile_2.yaml, /path/to/helmfile.d/helmfile_3.yaml
processing file "helmfile_1.yaml" in directory "/path/to/helmfile.d"
changing working directory to "/path/to/helmfile.d"
-first-pass rendering starting for "helmfile_1.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile_1.yaml.part.0":
- 0:
- 1: environments:
- 2: development: {}
- 3: shared: {}
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile_1.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_1.yaml.part.0":
- 0:
- 1: environments:
- 2: development: {}
- 3: shared: {}
-
merged environment: &{default map[] map[]}
-first-pass rendering starting for "helmfile_1.yaml.part.1": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile_1.yaml.part.1":
- 0: releases:
- 1: - name: logging
- 2: chart: incubator/raw
- 3: namespace: kube-system
- 4:
- 5: - name: kubernetes-external-secrets
- 6: chart: incubator/raw
- 7: namespace: kube-system
- 8: needs:
- 9: - kube-system/logging
-10:
-11: - name: external-secrets
-12: chart: incubator/raw
-13: namespace: default
-14: labels:
-15: app: test
-16: needs:
-17: - kube-system/kubernetes-external-secrets
-18:
-19: - name: my-release
-20: chart: incubator/raw
-21: namespace: default
-22: labels:
-23: app: test
-24: needs:
-25: - default/external-secrets
-26:
-27:
-28: # Disabled releases are treated as missing
-29: - name: disabled
-30: chart: incubator/raw
-31: namespace: kube-system
-32: installed: false
-33:
-34: - name: test2
-35: chart: incubator/raw
-36: needs:
-37: - kube-system/disabled
-38:
-39: - name: test3
-40: chart: incubator/raw
-41: needs:
-42: - test2
-43:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile_1.yaml.part.1": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_1.yaml.part.1":
- 0: releases:
- 1: - name: logging
- 2: chart: incubator/raw
- 3: namespace: kube-system
- 4:
- 5: - name: kubernetes-external-secrets
- 6: chart: incubator/raw
- 7: namespace: kube-system
- 8: needs:
- 9: - kube-system/logging
-10:
-11: - name: external-secrets
-12: chart: incubator/raw
-13: namespace: default
-14: labels:
-15: app: test
-16: needs:
-17: - kube-system/kubernetes-external-secrets
-18:
-19: - name: my-release
-20: chart: incubator/raw
-21: namespace: default
-22: labels:
-23: app: test
-24: needs:
-25: - default/external-secrets
-26:
-27:
-28: # Disabled releases are treated as missing
-29: - name: disabled
-30: chart: incubator/raw
-31: namespace: kube-system
-32: installed: false
-33:
-34: - name: test2
-35: chart: incubator/raw
-36: needs:
-37: - kube-system/disabled
-38:
-39: - name: test3
-40: chart: incubator/raw
-41: needs:
-42: - test2
-43:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
changing working directory back to "/path/to"
processing file "helmfile_2.yaml" in directory "/path/to/helmfile.d"
changing working directory to "/path/to/helmfile.d"
-first-pass rendering starting for "helmfile_2.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile_2.yaml.part.0":
- 0:
- 1: environments:
- 2: test: {}
- 3: shared: {}
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile_2.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_2.yaml.part.0":
- 0:
- 1: environments:
- 2: test: {}
- 3: shared: {}
-
merged environment: &{default map[] map[]}
-first-pass rendering starting for "helmfile_2.yaml.part.1": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile_2.yaml.part.1":
- 0: repositories:
- 1: - name: bitnami
- 2: url: https://charts.bitnami.com/bitnami
- 3:
- 4: releases:
- 5: - name: cache
- 6: namespace: my-app
- 7: chart: bitnami/redis
- 8: version: 17.0.7
- 9: labels:
-10: app: test
-11:
-12: - name: database
-13: namespace: my-app
-14: chart: bitnami/postgres
-15: version: 11.6.22
-16:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile_2.yaml.part.1": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_2.yaml.part.1":
- 0: repositories:
- 1: - name: bitnami
- 2: url: https://charts.bitnami.com/bitnami
- 3:
- 4: releases:
- 5: - name: cache
- 6: namespace: my-app
- 7: chart: bitnami/redis
- 8: version: 17.0.7
- 9: labels:
-10: app: test
-11:
-12: - name: database
-13: namespace: my-app
-14: chart: bitnami/postgres
-15: version: 11.6.22
-16:
-
merged environment: &{default map[] map[]}
changing working directory back to "/path/to"
processing file "helmfile_3.yaml" in directory "/path/to/helmfile.d"
changing working directory to "/path/to/helmfile.d"
-first-pass rendering starting for "helmfile_3.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile_3.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: global
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile_3.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_3.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: global
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
-
merged environment: &{default map[] map[]}
changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/app_list_test/fail_on_unknown_environment b/pkg/app/testdata/app_list_test/fail_on_unknown_environment
index 040b2ebe..9eccd0c3 100644
--- a/pkg/app/testdata/app_list_test/fail_on_unknown_environment
+++ b/pkg/app/testdata/app_list_test/fail_on_unknown_environment
@@ -1,74 +1,13 @@
found 3 helmfile state files in helmfile.d: /path/to/helmfile.d/helmfile_1.yaml, /path/to/helmfile.d/helmfile_2.yaml, /path/to/helmfile.d/helmfile_3.yaml
processing file "helmfile_1.yaml" in directory "/path/to/helmfile.d"
changing working directory to "/path/to/helmfile.d"
-first-pass rendering starting for "helmfile_1.yaml.part.0": inherited=&{staging map[] map[]}, overrode=
-first-pass uses: &{staging map[] map[]}
-first-pass rendering output of "helmfile_1.yaml.part.0":
- 0:
- 1: environments:
- 2: development: {}
- 3: shared: {}
-
-first-pass produced: &{staging map[] map[]}
-first-pass rendering result of "helmfile_1.yaml.part.0": {staging map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_1.yaml.part.0":
- 0:
- 1: environments:
- 2: development: {}
- 3: shared: {}
-
merged environment: &{staging map[] map[]}
changing working directory back to "/path/to"
processing file "helmfile_2.yaml" in directory "/path/to/helmfile.d"
changing working directory to "/path/to/helmfile.d"
-first-pass rendering starting for "helmfile_2.yaml.part.0": inherited=&{staging map[] map[]}, overrode=
-first-pass uses: &{staging map[] map[]}
-first-pass rendering output of "helmfile_2.yaml.part.0":
- 0:
- 1: environments:
- 2: test: {}
- 3: shared: {}
-
-first-pass produced: &{staging map[] map[]}
-first-pass rendering result of "helmfile_2.yaml.part.0": {staging map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_2.yaml.part.0":
- 0:
- 1: environments:
- 2: test: {}
- 3: shared: {}
-
merged environment: &{staging map[] map[]}
changing working directory back to "/path/to"
processing file "helmfile_3.yaml" in directory "/path/to/helmfile.d"
changing working directory to "/path/to/helmfile.d"
-first-pass rendering starting for "helmfile_3.yaml.part.0": inherited=&{staging map[] map[]}, overrode=
-first-pass uses: &{staging map[] map[]}
-first-pass rendering output of "helmfile_3.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: global
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
-
-first-pass produced: &{staging map[] map[]}
-first-pass rendering result of "helmfile_3.yaml.part.0": {staging map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_3.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: global
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
-
merged environment: &{staging map[] map[]}
changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/app_list_test/filters_releases_for_environment_used_in_multiple_files b/pkg/app/testdata/app_list_test/filters_releases_for_environment_used_in_multiple_files
index 8350e3c8..b161220b 100644
--- a/pkg/app/testdata/app_list_test/filters_releases_for_environment_used_in_multiple_files
+++ b/pkg/app/testdata/app_list_test/filters_releases_for_environment_used_in_multiple_files
@@ -1,221 +1,16 @@
found 3 helmfile state files in helmfile.d: /path/to/helmfile.d/helmfile_1.yaml, /path/to/helmfile.d/helmfile_2.yaml, /path/to/helmfile.d/helmfile_3.yaml
processing file "helmfile_1.yaml" in directory "/path/to/helmfile.d"
changing working directory to "/path/to/helmfile.d"
-first-pass rendering starting for "helmfile_1.yaml.part.0": inherited=&{shared map[] map[]}, overrode=
-first-pass uses: &{shared map[] map[]}
-first-pass rendering output of "helmfile_1.yaml.part.0":
- 0:
- 1: environments:
- 2: development: {}
- 3: shared: {}
-
-first-pass produced: &{shared map[] map[]}
-first-pass rendering result of "helmfile_1.yaml.part.0": {shared map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_1.yaml.part.0":
- 0:
- 1: environments:
- 2: development: {}
- 3: shared: {}
-
merged environment: &{shared map[] map[]}
-first-pass rendering starting for "helmfile_1.yaml.part.1": inherited=&{shared map[] map[]}, overrode=
-first-pass uses: &{shared map[] map[]}
-first-pass rendering output of "helmfile_1.yaml.part.1":
- 0: releases:
- 1: - name: logging
- 2: chart: incubator/raw
- 3: namespace: kube-system
- 4:
- 5: - name: kubernetes-external-secrets
- 6: chart: incubator/raw
- 7: namespace: kube-system
- 8: needs:
- 9: - kube-system/logging
-10:
-11: - name: external-secrets
-12: chart: incubator/raw
-13: namespace: default
-14: labels:
-15: app: test
-16: needs:
-17: - kube-system/kubernetes-external-secrets
-18:
-19: - name: my-release
-20: chart: incubator/raw
-21: namespace: default
-22: labels:
-23: app: test
-24: needs:
-25: - default/external-secrets
-26:
-27:
-28: # Disabled releases are treated as missing
-29: - name: disabled
-30: chart: incubator/raw
-31: namespace: kube-system
-32: installed: false
-33:
-34: - name: test2
-35: chart: incubator/raw
-36: needs:
-37: - kube-system/disabled
-38:
-39: - name: test3
-40: chart: incubator/raw
-41: needs:
-42: - test2
-43:
-
-first-pass produced: &{shared map[] map[]}
-first-pass rendering result of "helmfile_1.yaml.part.1": {shared map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_1.yaml.part.1":
- 0: releases:
- 1: - name: logging
- 2: chart: incubator/raw
- 3: namespace: kube-system
- 4:
- 5: - name: kubernetes-external-secrets
- 6: chart: incubator/raw
- 7: namespace: kube-system
- 8: needs:
- 9: - kube-system/logging
-10:
-11: - name: external-secrets
-12: chart: incubator/raw
-13: namespace: default
-14: labels:
-15: app: test
-16: needs:
-17: - kube-system/kubernetes-external-secrets
-18:
-19: - name: my-release
-20: chart: incubator/raw
-21: namespace: default
-22: labels:
-23: app: test
-24: needs:
-25: - default/external-secrets
-26:
-27:
-28: # Disabled releases are treated as missing
-29: - name: disabled
-30: chart: incubator/raw
-31: namespace: kube-system
-32: installed: false
-33:
-34: - name: test2
-35: chart: incubator/raw
-36: needs:
-37: - kube-system/disabled
-38:
-39: - name: test3
-40: chart: incubator/raw
-41: needs:
-42: - test2
-43:
-
merged environment: &{shared map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
changing working directory back to "/path/to"
processing file "helmfile_2.yaml" in directory "/path/to/helmfile.d"
changing working directory to "/path/to/helmfile.d"
-first-pass rendering starting for "helmfile_2.yaml.part.0": inherited=&{shared map[] map[]}, overrode=
-first-pass uses: &{shared map[] map[]}
-first-pass rendering output of "helmfile_2.yaml.part.0":
- 0:
- 1: environments:
- 2: test: {}
- 3: shared: {}
-
-first-pass produced: &{shared map[] map[]}
-first-pass rendering result of "helmfile_2.yaml.part.0": {shared map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_2.yaml.part.0":
- 0:
- 1: environments:
- 2: test: {}
- 3: shared: {}
-
merged environment: &{shared map[] map[]}
-first-pass rendering starting for "helmfile_2.yaml.part.1": inherited=&{shared map[] map[]}, overrode=
-first-pass uses: &{shared map[] map[]}
-first-pass rendering output of "helmfile_2.yaml.part.1":
- 0: repositories:
- 1: - name: bitnami
- 2: url: https://charts.bitnami.com/bitnami
- 3:
- 4: releases:
- 5: - name: cache
- 6: namespace: my-app
- 7: chart: bitnami/redis
- 8: version: 17.0.7
- 9: labels:
-10: app: test
-11:
-12: - name: database
-13: namespace: my-app
-14: chart: bitnami/postgres
-15: version: 11.6.22
-16:
-
-first-pass produced: &{shared map[] map[]}
-first-pass rendering result of "helmfile_2.yaml.part.1": {shared map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_2.yaml.part.1":
- 0: repositories:
- 1: - name: bitnami
- 2: url: https://charts.bitnami.com/bitnami
- 3:
- 4: releases:
- 5: - name: cache
- 6: namespace: my-app
- 7: chart: bitnami/redis
- 8: version: 17.0.7
- 9: labels:
-10: app: test
-11:
-12: - name: database
-13: namespace: my-app
-14: chart: bitnami/postgres
-15: version: 11.6.22
-16:
-
merged environment: &{shared map[] map[]}
changing working directory back to "/path/to"
processing file "helmfile_3.yaml" in directory "/path/to/helmfile.d"
changing working directory to "/path/to/helmfile.d"
-first-pass rendering starting for "helmfile_3.yaml.part.0": inherited=&{shared map[] map[]}, overrode=
-first-pass uses: &{shared map[] map[]}
-first-pass rendering output of "helmfile_3.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: global
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
-
-first-pass produced: &{shared map[] map[]}
-first-pass rendering result of "helmfile_3.yaml.part.0": {shared map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_3.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: global
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
-
merged environment: &{shared map[] map[]}
changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/app_list_test/filters_releases_for_environment_used_in_one_file_only b/pkg/app/testdata/app_list_test/filters_releases_for_environment_used_in_one_file_only
index 927ee649..a214f41f 100644
--- a/pkg/app/testdata/app_list_test/filters_releases_for_environment_used_in_one_file_only
+++ b/pkg/app/testdata/app_list_test/filters_releases_for_environment_used_in_one_file_only
@@ -1,120 +1,14 @@
found 3 helmfile state files in helmfile.d: /path/to/helmfile.d/helmfile_1.yaml, /path/to/helmfile.d/helmfile_2.yaml, /path/to/helmfile.d/helmfile_3.yaml
processing file "helmfile_1.yaml" in directory "/path/to/helmfile.d"
changing working directory to "/path/to/helmfile.d"
-first-pass rendering starting for "helmfile_1.yaml.part.0": inherited=&{test map[] map[]}, overrode=
-first-pass uses: &{test map[] map[]}
-first-pass rendering output of "helmfile_1.yaml.part.0":
- 0:
- 1: environments:
- 2: development: {}
- 3: shared: {}
-
-first-pass produced: &{test map[] map[]}
-first-pass rendering result of "helmfile_1.yaml.part.0": {test map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_1.yaml.part.0":
- 0:
- 1: environments:
- 2: development: {}
- 3: shared: {}
-
merged environment: &{test map[] map[]}
changing working directory back to "/path/to"
processing file "helmfile_2.yaml" in directory "/path/to/helmfile.d"
changing working directory to "/path/to/helmfile.d"
-first-pass rendering starting for "helmfile_2.yaml.part.0": inherited=&{test map[] map[]}, overrode=
-first-pass uses: &{test map[] map[]}
-first-pass rendering output of "helmfile_2.yaml.part.0":
- 0:
- 1: environments:
- 2: test: {}
- 3: shared: {}
-
-first-pass produced: &{test map[] map[]}
-first-pass rendering result of "helmfile_2.yaml.part.0": {test map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_2.yaml.part.0":
- 0:
- 1: environments:
- 2: test: {}
- 3: shared: {}
-
merged environment: &{test map[] map[]}
-first-pass rendering starting for "helmfile_2.yaml.part.1": inherited=&{test map[] map[]}, overrode=
-first-pass uses: &{test map[] map[]}
-first-pass rendering output of "helmfile_2.yaml.part.1":
- 0: repositories:
- 1: - name: bitnami
- 2: url: https://charts.bitnami.com/bitnami
- 3:
- 4: releases:
- 5: - name: cache
- 6: namespace: my-app
- 7: chart: bitnami/redis
- 8: version: 17.0.7
- 9: labels:
-10: app: test
-11:
-12: - name: database
-13: namespace: my-app
-14: chart: bitnami/postgres
-15: version: 11.6.22
-16:
-
-first-pass produced: &{test map[] map[]}
-first-pass rendering result of "helmfile_2.yaml.part.1": {test map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_2.yaml.part.1":
- 0: repositories:
- 1: - name: bitnami
- 2: url: https://charts.bitnami.com/bitnami
- 3:
- 4: releases:
- 5: - name: cache
- 6: namespace: my-app
- 7: chart: bitnami/redis
- 8: version: 17.0.7
- 9: labels:
-10: app: test
-11:
-12: - name: database
-13: namespace: my-app
-14: chart: bitnami/postgres
-15: version: 11.6.22
-16:
-
merged environment: &{test map[] map[]}
changing working directory back to "/path/to"
processing file "helmfile_3.yaml" in directory "/path/to/helmfile.d"
changing working directory to "/path/to/helmfile.d"
-first-pass rendering starting for "helmfile_3.yaml.part.0": inherited=&{test map[] map[]}, overrode=
-first-pass uses: &{test map[] map[]}
-first-pass rendering output of "helmfile_3.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: global
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
-
-first-pass produced: &{test map[] map[]}
-first-pass rendering result of "helmfile_3.yaml.part.0": {test map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_3.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: global
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
-
merged environment: &{test map[] map[]}
changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/app_list_test/list_releases_matching_selector_and_environment b/pkg/app/testdata/app_list_test/list_releases_matching_selector_and_environment
index 4d332f10..41a5321e 100644
--- a/pkg/app/testdata/app_list_test/list_releases_matching_selector_and_environment
+++ b/pkg/app/testdata/app_list_test/list_releases_matching_selector_and_environment
@@ -1,175 +1,15 @@
found 3 helmfile state files in helmfile.d: /path/to/helmfile.d/helmfile_1.yaml, /path/to/helmfile.d/helmfile_2.yaml, /path/to/helmfile.d/helmfile_3.yaml
processing file "helmfile_1.yaml" in directory "/path/to/helmfile.d"
changing working directory to "/path/to/helmfile.d"
-first-pass rendering starting for "helmfile_1.yaml.part.0": inherited=&{development map[] map[]}, overrode=
-first-pass uses: &{development map[] map[]}
-first-pass rendering output of "helmfile_1.yaml.part.0":
- 0:
- 1: environments:
- 2: development: {}
- 3: shared: {}
-
-first-pass produced: &{development map[] map[]}
-first-pass rendering result of "helmfile_1.yaml.part.0": {development map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_1.yaml.part.0":
- 0:
- 1: environments:
- 2: development: {}
- 3: shared: {}
-
merged environment: &{development map[] map[]}
-first-pass rendering starting for "helmfile_1.yaml.part.1": inherited=&{development map[] map[]}, overrode=
-first-pass uses: &{development map[] map[]}
-first-pass rendering output of "helmfile_1.yaml.part.1":
- 0: releases:
- 1: - name: logging
- 2: chart: incubator/raw
- 3: namespace: kube-system
- 4:
- 5: - name: kubernetes-external-secrets
- 6: chart: incubator/raw
- 7: namespace: kube-system
- 8: needs:
- 9: - kube-system/logging
-10:
-11: - name: external-secrets
-12: chart: incubator/raw
-13: namespace: default
-14: labels:
-15: app: test
-16: needs:
-17: - kube-system/kubernetes-external-secrets
-18:
-19: - name: my-release
-20: chart: incubator/raw
-21: namespace: default
-22: labels:
-23: app: test
-24: needs:
-25: - default/external-secrets
-26:
-27:
-28: # Disabled releases are treated as missing
-29: - name: disabled
-30: chart: incubator/raw
-31: namespace: kube-system
-32: installed: false
-33:
-34: - name: test2
-35: chart: incubator/raw
-36: needs:
-37: - kube-system/disabled
-38:
-39: - name: test3
-40: chart: incubator/raw
-41: needs:
-42: - test2
-43:
-
-first-pass produced: &{development map[] map[]}
-first-pass rendering result of "helmfile_1.yaml.part.1": {development map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_1.yaml.part.1":
- 0: releases:
- 1: - name: logging
- 2: chart: incubator/raw
- 3: namespace: kube-system
- 4:
- 5: - name: kubernetes-external-secrets
- 6: chart: incubator/raw
- 7: namespace: kube-system
- 8: needs:
- 9: - kube-system/logging
-10:
-11: - name: external-secrets
-12: chart: incubator/raw
-13: namespace: default
-14: labels:
-15: app: test
-16: needs:
-17: - kube-system/kubernetes-external-secrets
-18:
-19: - name: my-release
-20: chart: incubator/raw
-21: namespace: default
-22: labels:
-23: app: test
-24: needs:
-25: - default/external-secrets
-26:
-27:
-28: # Disabled releases are treated as missing
-29: - name: disabled
-30: chart: incubator/raw
-31: namespace: kube-system
-32: installed: false
-33:
-34: - name: test2
-35: chart: incubator/raw
-36: needs:
-37: - kube-system/disabled
-38:
-39: - name: test3
-40: chart: incubator/raw
-41: needs:
-42: - test2
-43:
-
merged environment: &{development map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
changing working directory back to "/path/to"
processing file "helmfile_2.yaml" in directory "/path/to/helmfile.d"
changing working directory to "/path/to/helmfile.d"
-first-pass rendering starting for "helmfile_2.yaml.part.0": inherited=&{development map[] map[]}, overrode=
-first-pass uses: &{development map[] map[]}
-first-pass rendering output of "helmfile_2.yaml.part.0":
- 0:
- 1: environments:
- 2: test: {}
- 3: shared: {}
-
-first-pass produced: &{development map[] map[]}
-first-pass rendering result of "helmfile_2.yaml.part.0": {development map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_2.yaml.part.0":
- 0:
- 1: environments:
- 2: test: {}
- 3: shared: {}
-
merged environment: &{development map[] map[]}
changing working directory back to "/path/to"
processing file "helmfile_3.yaml" in directory "/path/to/helmfile.d"
changing working directory to "/path/to/helmfile.d"
-first-pass rendering starting for "helmfile_3.yaml.part.0": inherited=&{development map[] map[]}, overrode=
-first-pass uses: &{development map[] map[]}
-first-pass rendering output of "helmfile_3.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: global
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
-
-first-pass produced: &{development map[] map[]}
-first-pass rendering result of "helmfile_3.yaml.part.0": {development map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile_3.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: global
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
-
merged environment: &{development map[] map[]}
changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/app_template_test/bad_selector b/pkg/app/testdata/app_template_test/bad_selector
index 9a3ab785..7d03a1f4 100644
--- a/pkg/app/testdata/app_template_test/bad_selector
+++ b/pkg/app/testdata/app_template_test/bad_selector
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
0 release(s) matching app=test_non_existent found in helmfile.yaml
diff --git a/pkg/app/testdata/app_template_test/fail_on_unselected_need_by_default b/pkg/app/testdata/app_template_test/fail_on_unselected_need_by_default
index a0113f65..ab53c3ad 100644
--- a/pkg/app/testdata/app_template_test/fail_on_unselected_need_by_default
+++ b/pkg/app/testdata/app_template_test/fail_on_unselected_need_by_default
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
2 release(s) matching app=test found in helmfile.yaml
diff --git a/pkg/app/testdata/app_template_test/include-needs b/pkg/app/testdata/app_template_test/include-needs
index 892b6ea0..58fa9cab 100644
--- a/pkg/app/testdata/app_template_test/include-needs
+++ b/pkg/app/testdata/app_template_test/include-needs
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
2 release(s) matching app=test found in helmfile.yaml
diff --git a/pkg/app/testdata/app_template_test/include-needs_should_not_fail_on_disabled_direct_need b/pkg/app/testdata/app_template_test/include-needs_should_not_fail_on_disabled_direct_need
index 5b8e896d..ebd01666 100644
--- a/pkg/app/testdata/app_template_test/include-needs_should_not_fail_on_disabled_direct_need
+++ b/pkg/app/testdata/app_template_test/include-needs_should_not_fail_on_disabled_direct_need
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=test2 found in helmfile.yaml
diff --git a/pkg/app/testdata/app_template_test/include-needs_should_not_fail_on_disabled_transitive_need b/pkg/app/testdata/app_template_test/include-needs_should_not_fail_on_disabled_transitive_need
index 47172c7e..29ad4ef5 100644
--- a/pkg/app/testdata/app_template_test/include-needs_should_not_fail_on_disabled_transitive_need
+++ b/pkg/app/testdata/app_template_test/include-needs_should_not_fail_on_disabled_transitive_need
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=test3 found in helmfile.yaml
diff --git a/pkg/app/testdata/app_template_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_direct_need b/pkg/app/testdata/app_template_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_direct_need
index 5b8e896d..ebd01666 100644
--- a/pkg/app/testdata/app_template_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_direct_need
+++ b/pkg/app/testdata/app_template_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_direct_need
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=test2 found in helmfile.yaml
diff --git a/pkg/app/testdata/app_template_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_transitive_need b/pkg/app/testdata/app_template_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_transitive_need
index 47172c7e..29ad4ef5 100644
--- a/pkg/app/testdata/app_template_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_transitive_need
+++ b/pkg/app/testdata/app_template_test/include-needs_with_include-transitive-needs_should_not_fail_on_disabled_transitive_need
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=test3 found in helmfile.yaml
diff --git a/pkg/app/testdata/app_template_test/include-transitive-needs b/pkg/app/testdata/app_template_test/include-transitive-needs
index 892b6ea0..58fa9cab 100644
--- a/pkg/app/testdata/app_template_test/include-transitive-needs
+++ b/pkg/app/testdata/app_template_test/include-transitive-needs
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
2 release(s) matching app=test found in helmfile.yaml
diff --git a/pkg/app/testdata/app_template_test/include-transitive-needs_should_not_fail_on_disabled_transitive_need b/pkg/app/testdata/app_template_test/include-transitive-needs_should_not_fail_on_disabled_transitive_need
index 47172c7e..29ad4ef5 100644
--- a/pkg/app/testdata/app_template_test/include-transitive-needs_should_not_fail_on_disabled_transitive_need
+++ b/pkg/app/testdata/app_template_test/include-transitive-needs_should_not_fail_on_disabled_transitive_need
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=test3 found in helmfile.yaml
diff --git a/pkg/app/testdata/app_template_test/no-hooks b/pkg/app/testdata/app_template_test/no-hooks
new file mode 100644
index 00000000..ceb99f63
--- /dev/null
+++ b/pkg/app/testdata/app_template_test/no-hooks
@@ -0,0 +1,14 @@
+processing file "helmfile.yaml" in directory "."
+changing working directory to "/path/to"
+merged environment: &{default map[] map[]}
+WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
+2 release(s) matching app=test found in helmfile.yaml
+
+processing 2 groups of releases in this order:
+GROUP RELEASES
+1 default/default/external-secrets
+2 default/default/my-release
+
+processing releases in group 1/2: default/default/external-secrets
+processing releases in group 2/2: default/default/my-release
+changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/app_template_test/show-only b/pkg/app/testdata/app_template_test/show-only
index 16806eb9..e528ba50 100644
--- a/pkg/app/testdata/app_template_test/show-only
+++ b/pkg/app/testdata/app_template_test/show-only
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
1 release(s) matching name=logging found in helmfile.yaml
diff --git a/pkg/app/testdata/app_template_test/skip-needs b/pkg/app/testdata/app_template_test/skip-needs
index 67ee2936..ceb99f63 100644
--- a/pkg/app/testdata/app_template_test/skip-needs
+++ b/pkg/app/testdata/app_template_test/skip-needs
@@ -1,106 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: logging
- 3: chart: incubator/raw
- 4: namespace: kube-system
- 5:
- 6: - name: kubernetes-external-secrets
- 7: chart: incubator/raw
- 8: namespace: kube-system
- 9: needs:
-10: - kube-system/logging
-11:
-12: - name: external-secrets
-13: chart: incubator/raw
-14: namespace: default
-15: labels:
-16: app: test
-17: needs:
-18: - kube-system/kubernetes-external-secrets
-19:
-20: - name: my-release
-21: chart: incubator/raw
-22: namespace: default
-23: labels:
-24: app: test
-25: needs:
-26: - default/external-secrets
-27:
-28:
-29: # Disabled releases are treated as missing
-30: - name: disabled
-31: chart: incubator/raw
-32: namespace: kube-system
-33: installed: false
-34:
-35: - name: test2
-36: chart: incubator/raw
-37: needs:
-38: - kube-system/disabled
-39:
-40: - name: test3
-41: chart: incubator/raw
-42: needs:
-43: - test2
-44:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
2 release(s) matching app=test found in helmfile.yaml
diff --git a/pkg/app/testdata/dag_test/dag_lists_dependencies_in_order b/pkg/app/testdata/dag_test/dag_lists_dependencies_in_order
index c64a76f9..6b1135ae 100644
--- a/pkg/app/testdata/dag_test/dag_lists_dependencies_in_order
+++ b/pkg/app/testdata/dag_test/dag_lists_dependencies_in_order
@@ -1,120 +1,6 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: environments:
- 2: development: {}
- 3: shared: {}
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: environments:
- 2: development: {}
- 3: shared: {}
-
merged environment: &{default map[] map[]}
-first-pass rendering starting for "helmfile.yaml.part.1": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.1":
- 0: releases:
- 1: - name: logging
- 2: chart: incubator/raw
- 3: namespace: kube-system
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7: needs:
- 8: - kube-system/logging
- 9: - name: external-secrets
-10: chart: incubator/raw
-11: namespace: default
-12: labels:
-13: app: test
-14: needs:
-15: - kube-system/kubernetes-external-secrets
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23: # Disabled releases are treated as missing
-24: - name: disabled
-25: chart: incubator/raw
-26: namespace: kube-system
-27: installed: false
-28: - name: test2
-29: chart: incubator/raw
-30: needs:
-31: - kube-system/disabled
-32: - name: test3
-33: chart: incubator/raw
-34: needs:
-35: - test2
-36: - name: test4
-37: chart: incubator/raw
-38: needs:
-39: - test2
-40: - test3
-41:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.1": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.1":
- 0: releases:
- 1: - name: logging
- 2: chart: incubator/raw
- 3: namespace: kube-system
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7: needs:
- 8: - kube-system/logging
- 9: - name: external-secrets
-10: chart: incubator/raw
-11: namespace: default
-12: labels:
-13: app: test
-14: needs:
-15: - kube-system/kubernetes-external-secrets
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23: # Disabled releases are treated as missing
-24: - name: disabled
-25: chart: incubator/raw
-26: namespace: kube-system
-27: installed: false
-28: - name: test2
-29: chart: incubator/raw
-30: needs:
-31: - kube-system/disabled
-32: - name: test3
-33: chart: incubator/raw
-34: needs:
-35: - test2
-36: - name: test4
-37: chart: incubator/raw
-38: needs:
-39: - test2
-40: - test3
-41:
-
merged environment: &{default map[] map[]}
WARNING: release test2 needs disabled, but disabled is not installed due to installed: false. Either mark disabled as installed or remove disabled from test2's needs
changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/testapply/delete_bar_when_bar_needs_foo/log b/pkg/app/testdata/testapply/delete_bar_when_bar_needs_foo/log
index 3ee09b86..7999740f 100644
--- a/pkg/app/testdata/testapply/delete_bar_when_bar_needs_foo/log
+++ b/pkg/app/testdata/testapply/delete_bar_when_bar_needs_foo/log
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: stable/mychart1
- 4: - name: bar
- 5: chart: stable/mychart2
- 6: installed: false
- 7: needs:
- 8: - foo
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: stable/mychart1
- 4: - name: bar
- 5: chart: stable/mychart2
- 6: installed: false
- 7: needs:
- 8: - foo
- 9:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/delete_bar_when_foo_needs_bar/log b/pkg/app/testdata/testapply/delete_bar_when_foo_needs_bar/log
index 02d852b3..63e24849 100644
--- a/pkg/app/testdata/testapply/delete_bar_when_foo_needs_bar/log
+++ b/pkg/app/testdata/testapply/delete_bar_when_foo_needs_bar/log
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: stable/mychart1
- 7: needs:
- 8: - bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: stable/mychart1
- 7: needs:
- 8: - bar
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/delete_foo_and_bar_when_bar_needs_foo/log b/pkg/app/testdata/testapply/delete_foo_and_bar_when_bar_needs_foo/log
index f3377bd1..11813de1 100644
--- a/pkg/app/testdata/testapply/delete_foo_and_bar_when_bar_needs_foo/log
+++ b/pkg/app/testdata/testapply/delete_foo_and_bar_when_bar_needs_foo/log
@@ -1,40 +1,6 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: installed: false
- 5: needs:
- 6: - foo
- 7: - name: foo
- 8: chart: stable/mychart1
- 9: installed: false
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: installed: false
- 5: needs:
- 6: - foo
- 7: - name: foo
- 8: chart: stable/mychart1
- 9: installed: false
-10:
-
merged environment: &{default map[] map[]}
-WARNING: release bar needs foo, but foo is not installed due to installed: false. Either mark foo as installed or remove foo from bar's needs
2 release(s) found in helmfile.yaml
Affected releases are:
diff --git a/pkg/app/testdata/testapply/delete_foo_and_bar_when_foo_needs_bar/log b/pkg/app/testdata/testapply/delete_foo_and_bar_when_foo_needs_bar/log
index e8850438..abbb3ddf 100644
--- a/pkg/app/testdata/testapply/delete_foo_and_bar_when_foo_needs_bar/log
+++ b/pkg/app/testdata/testapply/delete_foo_and_bar_when_foo_needs_bar/log
@@ -1,40 +1,6 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: stable/mychart1
- 7: installed: false
- 8: needs:
- 9: - bar
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: installed: false
- 5: - name: foo
- 6: chart: stable/mychart1
- 7: installed: false
- 8: needs:
- 9: - bar
-10:
-
merged environment: &{default map[] map[]}
-WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
2 release(s) found in helmfile.yaml
Affected releases are:
diff --git a/pkg/app/testdata/testapply/delete_foo_when_bar_needs_foo/log b/pkg/app/testdata/testapply/delete_foo_when_bar_needs_foo/log
index 25bb1eef..1dc037b0 100644
--- a/pkg/app/testdata/testapply/delete_foo_when_bar_needs_foo/log
+++ b/pkg/app/testdata/testapply/delete_foo_when_bar_needs_foo/log
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: stable/mychart1
- 4: installed: false
- 5: - name: bar
- 6: chart: stable/mychart2
- 7: needs:
- 8: - foo
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: stable/mychart1
- 4: installed: false
- 5: - name: bar
- 6: chart: stable/mychart2
- 7: needs:
- 8: - foo
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release bar needs foo, but foo is not installed due to installed: false. Either mark foo as installed or remove foo from bar's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/delete_foo_when_foo_needs_bar/log b/pkg/app/testdata/testapply/delete_foo_when_foo_needs_bar/log
index 38541ce3..3f58a191 100644
--- a/pkg/app/testdata/testapply/delete_foo_when_foo_needs_bar/log
+++ b/pkg/app/testdata/testapply/delete_foo_when_foo_needs_bar/log
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: - name: foo
- 5: chart: stable/mychart1
- 6: installed: false
- 7: needs:
- 8: - bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: - name: foo
- 5: chart: stable/mychart1
- 6: installed: false
- 7: needs:
- 8: - bar
- 9:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/duplicate_releases/log b/pkg/app/testdata/testapply/duplicate_releases/log
index 5a14f57e..ccdf69e2 100644
--- a/pkg/app/testdata/testapply/duplicate_releases/log
+++ b/pkg/app/testdata/testapply/duplicate_releases/log
@@ -1,44 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: namespace: ns1
- 4: chart: mychart3
- 5: - name: foo
- 6: chart: mychart2
- 7: needs:
- 8: - ns1/bar
- 9: - name: foo
-10: chart: mychart1
-11: needs:
-12: - ns1/bar
-13:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: namespace: ns1
- 4: chart: mychart3
- 5: - name: foo
- 6: chart: mychart2
- 7: needs:
- 8: - ns1/bar
- 9: - name: foo
-10: chart: mychart1
-11: needs:
-12: - ns1/bar
-13:
-
merged environment: &{default map[] map[]}
err: found 2 duplicate releases with ID "default//foo"
changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/testapply/helm-status-check-to-release-existence/log b/pkg/app/testdata/testapply/helm-status-check-to-release-existence/log
index 223b67ad..3dd5b87b 100644
--- a/pkg/app/testdata/testapply/helm-status-check-to-release-existence/log
+++ b/pkg/app/testdata/testapply/helm-status-check-to-release-existence/log
@@ -1,32 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: - name: foo_notFound
- 5: chart: stable/mychart1
- 6: installed: false
- 7:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: - name: foo_notFound
- 5: chart: stable/mychart1
- 6: installed: false
- 7:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/install-with-upgrade-with-skip-diff-on-install/log b/pkg/app/testdata/testapply/install-with-upgrade-with-skip-diff-on-install/log
index e309756f..c5e811d4 100644
--- a/pkg/app/testdata/testapply/install-with-upgrade-with-skip-diff-on-install/log
+++ b/pkg/app/testdata/testapply/install-with-upgrade-with-skip-diff-on-install/log
@@ -1,44 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: chart: stable/mychart3
- 4: disableValidationOnInstall: true
- 5: - name: foo
- 6: chart: stable/mychart1
- 7: disableValidationOnInstall: true
- 8: needs:
- 9: - bar
-10: - name: bar
-11: chart: stable/mychart2
-12: disableValidation: true
-13:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: chart: stable/mychart3
- 4: disableValidationOnInstall: true
- 5: - name: foo
- 6: chart: stable/mychart1
- 7: disableValidationOnInstall: true
- 8: needs:
- 9: - bar
-10: - name: bar
-11: chart: stable/mychart2
-12: disableValidation: true
-13:
-
merged environment: &{default map[] map[]}
3 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/install-with-upgrade-with-validation-control/log b/pkg/app/testdata/testapply/install-with-upgrade-with-validation-control/log
index e309756f..c5e811d4 100644
--- a/pkg/app/testdata/testapply/install-with-upgrade-with-validation-control/log
+++ b/pkg/app/testdata/testapply/install-with-upgrade-with-validation-control/log
@@ -1,44 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: chart: stable/mychart3
- 4: disableValidationOnInstall: true
- 5: - name: foo
- 6: chart: stable/mychart1
- 7: disableValidationOnInstall: true
- 8: needs:
- 9: - bar
-10: - name: bar
-11: chart: stable/mychart2
-12: disableValidation: true
-13:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: chart: stable/mychart3
- 4: disableValidationOnInstall: true
- 5: - name: foo
- 6: chart: stable/mychart1
- 7: disableValidationOnInstall: true
- 8: needs:
- 9: - bar
-10: - name: bar
-11: chart: stable/mychart2
-12: disableValidation: true
-13:
-
merged environment: &{default map[] map[]}
3 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/install/log b/pkg/app/testdata/testapply/install/log
index 288e71a2..b6766a38 100644
--- a/pkg/app/testdata/testapply/install/log
+++ b/pkg/app/testdata/testapply/install/log
@@ -1,38 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: chart: stable/mychart3
- 4: - name: foo
- 5: chart: stable/mychart1
- 6: needs:
- 7: - bar
- 8: - name: bar
- 9: chart: stable/mychart2
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: chart: stable/mychart3
- 4: - name: foo
- 5: chart: stable/mychart1
- 6: needs:
- 7: - bar
- 8: - name: bar
- 9: chart: stable/mychart2
-10:
-
merged environment: &{default map[] map[]}
3 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/non-existent_release_in_needs/log b/pkg/app/testdata/testapply/non-existent_release_in_needs/log
index b13e2b15..714f59fa 100644
--- a/pkg/app/testdata/testapply/non-existent_release_in_needs/log
+++ b/pkg/app/testdata/testapply/non-existent_release_in_needs/log
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: namespace: ns1
- 4: chart: mychart3
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - ns1/bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: baz
- 3: namespace: ns1
- 4: chart: mychart3
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - ns1/bar
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release foo needs bar, but bar is not installed due to installed: false. Either mark bar as installed or remove bar from foo's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/noop/log b/pkg/app/testdata/testapply/noop/log
index 89669abf..b9eb3b39 100644
--- a/pkg/app/testdata/testapply/noop/log
+++ b/pkg/app/testdata/testapply/noop/log
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: - name: foo
- 5: chart: stable/mychart1
- 6: installed: false
- 7: needs:
- 8: - bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: - name: foo
- 5: chart: stable/mychart1
- 6: installed: false
- 7: needs:
- 8: - bar
- 9:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/smoke/log b/pkg/app/testdata/testapply/smoke/log
index 6ef2316c..f94cd7c1 100644
--- a/pkg/app/testdata/testapply/smoke/log
+++ b/pkg/app/testdata/testapply/smoke/log
@@ -1,128 +1,6 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: database
- 3: chart: charts/mysql
- 4: needs:
- 5: - logging
- 6: - name: frontend-v1
- 7: chart: charts/frontend
- 8: installed: false
- 9: needs:
-10: - servicemesh
-11: - logging
-12: - backend-v1
-13: - name: frontend-v2
-14: chart: charts/frontend
-15: needs:
-16: - servicemesh
-17: - logging
-18: - backend-v2
-19: - name: frontend-v3
-20: chart: charts/frontend
-21: needs:
-22: - servicemesh
-23: - logging
-24: - backend-v2
-25: - name: backend-v1
-26: chart: charts/backend
-27: installed: false
-28: needs:
-29: - servicemesh
-30: - logging
-31: - database
-32: - anotherbackend
-33: - name: backend-v2
-34: chart: charts/backend
-35: needs:
-36: - servicemesh
-37: - logging
-38: - database
-39: - anotherbackend
-40: - name: anotherbackend
-41: chart: charts/anotherbackend
-42: needs:
-43: - servicemesh
-44: - logging
-45: - database
-46: - name: servicemesh
-47: chart: charts/istio
-48: needs:
-49: - logging
-50: - name: logging
-51: chart: charts/fluent-bit
-52: - name: front-proxy
-53: chart: stable/envoy
-54:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: database
- 3: chart: charts/mysql
- 4: needs:
- 5: - logging
- 6: - name: frontend-v1
- 7: chart: charts/frontend
- 8: installed: false
- 9: needs:
-10: - servicemesh
-11: - logging
-12: - backend-v1
-13: - name: frontend-v2
-14: chart: charts/frontend
-15: needs:
-16: - servicemesh
-17: - logging
-18: - backend-v2
-19: - name: frontend-v3
-20: chart: charts/frontend
-21: needs:
-22: - servicemesh
-23: - logging
-24: - backend-v2
-25: - name: backend-v1
-26: chart: charts/backend
-27: installed: false
-28: needs:
-29: - servicemesh
-30: - logging
-31: - database
-32: - anotherbackend
-33: - name: backend-v2
-34: chart: charts/backend
-35: needs:
-36: - servicemesh
-37: - logging
-38: - database
-39: - anotherbackend
-40: - name: anotherbackend
-41: chart: charts/anotherbackend
-42: needs:
-43: - servicemesh
-44: - logging
-45: - database
-46: - name: servicemesh
-47: chart: charts/istio
-48: needs:
-49: - logging
-50: - name: logging
-51: chart: charts/fluent-bit
-52: - name: front-proxy
-53: chart: stable/envoy
-54:
-
merged environment: &{default map[] map[]}
-WARNING: release frontend-v1 needs backend-v1, but backend-v1 is not installed due to installed: false. Either mark backend-v1 as installed or remove backend-v1 from frontend-v1's needs
10 release(s) found in helmfile.yaml
Affected releases are:
diff --git a/pkg/app/testdata/testapply/unselected_release_in_needs/log b/pkg/app/testdata/testapply/unselected_release_in_needs/log
index fd4dca83..9f34aacd 100644
--- a/pkg/app/testdata/testapply/unselected_release_in_needs/log
+++ b/pkg/app/testdata/testapply/unselected_release_in_needs/log
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: namespace: ns1
- 4: chart: mychart3
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - ns1/bar
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: namespace: ns1
- 4: chart: mychart3
- 5: - name: foo
- 6: chart: mychart1
- 7: needs:
- 8: - ns1/bar
- 9:
-
merged environment: &{default map[] map[]}
1 release(s) matching name=foo found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/upgrade_when_bar_needs_foo,_with_ns_override/log b/pkg/app/testdata/testapply/upgrade_when_bar_needs_foo,_with_ns_override/log
index 75c0b4ce..c216b8ee 100644
--- a/pkg/app/testdata/testapply/upgrade_when_bar_needs_foo,_with_ns_override/log
+++ b/pkg/app/testdata/testapply/upgrade_when_bar_needs_foo,_with_ns_override/log
@@ -1,34 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: stable/mychart1
- 4: - name: bar
- 5: chart: stable/mychart2
- 6: needs:
- 7: - foo
- 8:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: stable/mychart1
- 4: - name: bar
- 5: chart: stable/mychart2
- 6: needs:
- 7: - foo
- 8:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/upgrade_when_bar_needs_foo/log b/pkg/app/testdata/testapply/upgrade_when_bar_needs_foo/log
index 0854f6f9..06004eba 100644
--- a/pkg/app/testdata/testapply/upgrade_when_bar_needs_foo/log
+++ b/pkg/app/testdata/testapply/upgrade_when_bar_needs_foo/log
@@ -1,34 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: stable/mychart1
- 4: - name: bar
- 5: chart: stable/mychart2
- 6: needs:
- 7: - foo
- 8:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: stable/mychart1
- 4: - name: bar
- 5: chart: stable/mychart2
- 6: needs:
- 7: - foo
- 8:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/upgrade_when_foo_needs_bar,_with_ns_override/log b/pkg/app/testdata/testapply/upgrade_when_foo_needs_bar,_with_ns_override/log
index 18819452..f590244f 100644
--- a/pkg/app/testdata/testapply/upgrade_when_foo_needs_bar,_with_ns_override/log
+++ b/pkg/app/testdata/testapply/upgrade_when_foo_needs_bar,_with_ns_override/log
@@ -1,34 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: - name: foo
- 5: chart: stable/mychart1
- 6: needs:
- 7: - bar
- 8:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: - name: foo
- 5: chart: stable/mychart1
- 6: needs:
- 7: - bar
- 8:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/upgrade_when_foo_needs_bar/log b/pkg/app/testdata/testapply/upgrade_when_foo_needs_bar/log
index 38252743..53a2991c 100644
--- a/pkg/app/testdata/testapply/upgrade_when_foo_needs_bar/log
+++ b/pkg/app/testdata/testapply/upgrade_when_foo_needs_bar/log
@@ -1,34 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: - name: foo
- 5: chart: stable/mychart1
- 6: needs:
- 7: - bar
- 8:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: - name: foo
- 5: chart: stable/mychart1
- 6: needs:
- 7: - bar
- 8:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/upgrade_when_ns1/foo_needs_ns1/bar_and_ns2/bar_is_disabled/log b/pkg/app/testdata/testapply/upgrade_when_ns1/foo_needs_ns1/bar_and_ns2/bar_is_disabled/log
new file mode 100644
index 00000000..36eb250f
--- /dev/null
+++ b/pkg/app/testdata/testapply/upgrade_when_ns1/foo_needs_ns1/bar_and_ns2/bar_is_disabled/log
@@ -0,0 +1,43 @@
+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) DELETED
+ bar (stable/mychart2) UPDATED
+ foo (stable/mychart1) UPDATED
+
+invoking preapply hooks for 2 groups of releases in this order:
+GROUP RELEASES
+1 default/ns1/foo
+2 default/ns1/bar, default/ns2/bar
+
+invoking preapply hooks for releases in group 1/2: default/ns1/foo
+invoking preapply hooks for releases in group 2/2: default/ns1/bar, default/ns2/bar
+processing 1 groups of releases in this order:
+GROUP RELEASES
+1 default/ns2/bar
+
+processing releases in group 1/1: default/ns2/bar
+processing 2 groups of releases in this order:
+GROUP RELEASES
+1 default/ns1/bar
+2 default/ns1/foo
+
+processing releases in group 1/2: default/ns1/bar
+getting deployed release version failed: Failed to get the version for: mychart2
+processing releases in group 2/2: default/ns1/foo
+getting deployed release version failed: Failed to get the version for: mychart1
+
+UPDATED RELEASES:
+NAME NAMESPACE CHART VERSION DURATION
+bar ns1 stable/mychart2 0s
+foo ns1 stable/mychart1 0s
+
+
+DELETED RELEASES:
+NAME NAMESPACE DURATION
+bar ns2 0s
+
+changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/testapply/upgrade_when_ns1/foo_needs_ns2/bar/log b/pkg/app/testdata/testapply/upgrade_when_ns1/foo_needs_ns2/bar/log
index 6f129537..13ca7ee3 100644
--- a/pkg/app/testdata/testapply/upgrade_when_ns1/foo_needs_ns2/bar/log
+++ b/pkg/app/testdata/testapply/upgrade_when_ns1/foo_needs_ns2/bar/log
@@ -1,38 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: stable/mychart1
- 4: namespace: ns1
- 5: needs:
- 6: - ns2/bar
- 7: - name: bar
- 8: chart: stable/mychart2
- 9: namespace: ns2
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: stable/mychart1
- 4: namespace: ns1
- 5: needs:
- 6: - ns2/bar
- 7: - name: bar
- 8: chart: stable/mychart2
- 9: namespace: ns2
-10:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/upgrade_when_ns2/bar_needs_ns1/foo/log b/pkg/app/testdata/testapply/upgrade_when_ns2/bar_needs_ns1/foo/log
index 76015ef1..5e96b8fd 100644
--- a/pkg/app/testdata/testapply/upgrade_when_ns2/bar_needs_ns1/foo/log
+++ b/pkg/app/testdata/testapply/upgrade_when_ns2/bar_needs_ns1/foo/log
@@ -1,38 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: namespace: ns2
- 5: needs:
- 6: - ns1/foo
- 7: - name: foo
- 8: chart: stable/mychart1
- 9: namespace: ns1
-10:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: bar
- 3: chart: stable/mychart2
- 4: namespace: ns2
- 5: needs:
- 6: - ns1/foo
- 7: - name: foo
- 8: chart: stable/mychart1
- 9: namespace: ns1
-10:
-
merged environment: &{default map[] map[]}
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply/upgrades_with_bad_selector/log b/pkg/app/testdata/testapply/upgrades_with_bad_selector/log
index 37de515c..8e3e99cf 100644
--- a/pkg/app/testdata/testapply/upgrades_with_bad_selector/log
+++ b/pkg/app/testdata/testapply/upgrades_with_bad_selector/log
@@ -1,39 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -60,6 +28,6 @@ second-pass rendering result of "helmfile.yaml.part.0":
23:
merged environment: &{default map[] map[]}
-0 release(s) matching app=test_non_existent found in helmfile.yaml
+0 release(s) matching app=test_non_existent found in helmfile.yaml.gotmpl
changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/testapply/upgrades_with_good_selector_with_--skip-needs=false_--include-needs=true/log b/pkg/app/testdata/testapply/upgrades_with_good_selector_with_--skip-needs=false_--include-needs=true/log
index b286816b..f29aa140 100644
--- a/pkg/app/testdata/testapply/upgrades_with_good_selector_with_--skip-needs=false_--include-needs=true/log
+++ b/pkg/app/testdata/testapply/upgrades_with_good_selector_with_--skip-needs=false_--include-needs=true/log
@@ -1,39 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -60,7 +28,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
23:
merged environment: &{default map[] map[]}
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
err: release "default/default/external-secrets" depends on "default/kube-system/kubernetes-external-secrets" which does not match the selectors. Please add a selector like "--selector name=kubernetes-external-secrets", or indicate whether to skip (--skip-needs) or include (--include-needs) these dependencies
changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/testapply/upgrades_with_good_selector_with_--skip-needs=true/log b/pkg/app/testdata/testapply/upgrades_with_good_selector_with_--skip-needs=true/log
index d1a55a90..65c32bd4 100644
--- a/pkg/app/testdata/testapply/upgrades_with_good_selector_with_--skip-needs=true/log
+++ b/pkg/app/testdata/testapply/upgrades_with_good_selector_with_--skip-needs=true/log
@@ -1,39 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -60,7 +28,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
23:
merged environment: &{default map[] map[]}
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
Affected releases are:
external-secrets (incubator/raw) UPDATED
diff --git a/pkg/app/testdata/testapply_2/bad_--selector/log b/pkg/app/testdata/testapply_2/bad_--selector/log
new file mode 100644
index 00000000..8e3e99cf
--- /dev/null
+++ b/pkg/app/testdata/testapply_2/bad_--selector/log
@@ -0,0 +1,33 @@
+processing file "helmfile.yaml.gotmpl" in directory "."
+changing working directory to "/path/to"
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
+ 0:
+ 1:
+ 2:
+ 3: releases:
+ 4: - name: kubernetes-external-secrets
+ 5: chart: incubator/raw
+ 6: namespace: kube-system
+ 7:
+ 8: - name: external-secrets
+ 9: chart: incubator/raw
+10: namespace: default
+11: labels:
+12: app: test
+13: needs:
+14: - kube-system/kubernetes-external-secrets
+15:
+16: - name: my-release
+17: chart: incubator/raw
+18: namespace: default
+19: labels:
+20: app: test
+21: needs:
+22: - default/external-secrets
+23:
+
+merged environment: &{default map[] map[]}
+0 release(s) matching app=test_non_existent found in helmfile.yaml.gotmpl
+
+changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/testapply_2/deduplicate_by_--selector/log b/pkg/app/testdata/testapply_2/deduplicate_by_--selector/log
index dfde4bdd..6e400919 100644
--- a/pkg/app/testdata/testapply_2/deduplicate_by_--selector/log
+++ b/pkg/app/testdata/testapply_2/deduplicate_by_--selector/log
@@ -1,52 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: incubator/raw
- 4: namespace: default
- 5: labels:
- 6: app: test
- 7: component: raw
- 8: index: '1'
- 9:
-10: - name: foo
-11: chart: incubator/raw
-12: namespace: default
-13: labels:
-14: app: test
-15: component: raw
-16: index: '2'
-17:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: incubator/raw
- 4: namespace: default
- 5: labels:
- 6: app: test
- 7: component: raw
- 8: index: '1'
- 9:
-10: - name: foo
-11: chart: incubator/raw
-12: namespace: default
-13: labels:
-14: app: test
-15: component: raw
-16: index: '2'
-17:
-
merged environment: &{default map[] map[]}
1 release(s) matching index=1 found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply_2/include-transitive-needs=true/log b/pkg/app/testdata/testapply_2/include-transitive-needs=true/log
index 80fe6952..c4fd365e 100644
--- a/pkg/app/testdata/testapply_2/include-transitive-needs=true/log
+++ b/pkg/app/testdata/testapply_2/include-transitive-needs=true/log
@@ -1,35 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: serviceA
- 5: chart: my/chart
- 6: needs:
- 7: - serviceB
- 8:
- 9: - name: serviceB
-10: chart: my/chart
-11: needs:
-12: - serviceC
-13:
-14: - name: serviceC
-15: chart: my/chart
-16:
-17: - name: serviceD
-18: chart: my/chart
-19:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -52,7 +24,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
19:
merged environment: &{default map[] map[]}
-3 release(s) matching name=serviceA found in helmfile.yaml
+3 release(s) matching name=serviceA found in helmfile.yaml.gotmpl
Affected releases are:
serviceA (my/chart) UPDATED
diff --git a/pkg/app/testdata/testapply_2/select_non_existent_release_with_--allow-no-matching-release/log b/pkg/app/testdata/testapply_2/select_non_existent_release_with_--allow-no-matching-release/log
index ed58f794..2c735ba9 100644
--- a/pkg/app/testdata/testapply_2/select_non_existent_release_with_--allow-no-matching-release/log
+++ b/pkg/app/testdata/testapply_2/select_non_existent_release_with_--allow-no-matching-release/log
@@ -1,44 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: incubator/raw
- 4: namespace: default
- 5: labels:
- 6: app: test
- 7:
- 8: - name: bar
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: incubator/raw
- 4: namespace: default
- 5: labels:
- 6: app: test
- 7:
- 8: - name: bar
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13:
-
merged environment: &{default map[] map[]}
0 release(s) matching app=foo found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply_2/select_single_release_from_helmfile_with_two_duplicates/log b/pkg/app/testdata/testapply_2/select_single_release_from_helmfile_with_two_duplicates/log
index 5aad40b2..07be1f75 100644
--- a/pkg/app/testdata/testapply_2/select_single_release_from_helmfile_with_two_duplicates/log
+++ b/pkg/app/testdata/testapply_2/select_single_release_from_helmfile_with_two_duplicates/log
@@ -1,56 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: incubator/raw
- 4: namespace: default
- 5: labels:
- 6: app: test
- 7:
- 8: - name: bar
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: build
-13:
-14: - name: bar
-15: chart: incubator/raw
-16: namespace: default
-17: labels:
-18: app: test
-19:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: foo
- 3: chart: incubator/raw
- 4: namespace: default
- 5: labels:
- 6: app: test
- 7:
- 8: - name: bar
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: build
-13:
-14: - name: bar
-15: chart: incubator/raw
-16: namespace: default
-17: labels:
-18: app: test
-19:
-
merged environment: &{default map[] map[]}
1 release(s) matching name=foo found in helmfile.yaml
diff --git a/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true/log b/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true/log
index 0350fb56..fad7bdc6 100644
--- a/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true/log
+++ b/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true/log
@@ -1,39 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -60,7 +28,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
23:
merged environment: &{default map[] map[]}
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
Affected releases are:
external-secrets (incubator/raw) UPDATED
diff --git a/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true_but_no_diff_on_needed_release/log b/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true_but_no_diff_on_needed_release/log
index 2f1fa1f1..370e8e8e 100644
--- a/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true_but_no_diff_on_needed_release/log
+++ b/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true_but_no_diff_on_needed_release/log
@@ -1,39 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -60,7 +28,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
23:
merged environment: &{default map[] map[]}
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
Affected releases are:
external-secrets (incubator/raw) UPDATED
diff --git a/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true_with_installed_but_disabled_release/log b/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true_with_installed_but_disabled_release/log
index c6a51f3c..9998300d 100644
--- a/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true_with_installed_but_disabled_release/log
+++ b/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true_with_installed_but_disabled_release/log
@@ -1,40 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7: installed: false
- 8:
- 9: - name: external-secrets
-10: chart: incubator/raw
-11: namespace: default
-12: labels:
-13: app: test
-14: needs:
-15: - kube-system/kubernetes-external-secrets
-16:
-17: - name: my-release
-18: chart: incubator/raw
-19: namespace: default
-20: labels:
-21: app: test
-22: needs:
-23: - default/external-secrets
-24:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -63,7 +30,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
merged environment: &{default map[] map[]}
WARNING: release external-secrets needs kubernetes-external-secrets, but kubernetes-external-secrets is not installed due to installed: false. Either mark kubernetes-external-secrets as installed or remove kubernetes-external-secrets from external-secrets's needs
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
WARNING: release external-secrets needs kubernetes-external-secrets, but kubernetes-external-secrets is not installed due to installed: false. Either mark kubernetes-external-secrets as installed or remove kubernetes-external-secrets from external-secrets's needs
Affected releases are:
diff --git a/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true_with_not_installed_and_disabled_release/log b/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true_with_not_installed_and_disabled_release/log
index 13ca54dd..6bf96b12 100644
--- a/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true_with_not_installed_and_disabled_release/log
+++ b/pkg/app/testdata/testapply_2/skip-needs=false_include-needs=true_with_not_installed_and_disabled_release/log
@@ -1,40 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7: installed: false
- 8:
- 9: - name: external-secrets
-10: chart: incubator/raw
-11: namespace: default
-12: labels:
-13: app: test
-14: needs:
-15: - kube-system/kubernetes-external-secrets
-16:
-17: - name: my-release
-18: chart: incubator/raw
-19: namespace: default
-20: labels:
-21: app: test
-22: needs:
-23: - default/external-secrets
-24:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -63,7 +30,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
merged environment: &{default map[] map[]}
WARNING: release external-secrets needs kubernetes-external-secrets, but kubernetes-external-secrets is not installed due to installed: false. Either mark kubernetes-external-secrets as installed or remove kubernetes-external-secrets from external-secrets's needs
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
WARNING: release external-secrets needs kubernetes-external-secrets, but kubernetes-external-secrets is not installed due to installed: false. Either mark kubernetes-external-secrets as installed or remove kubernetes-external-secrets from external-secrets's needs
Affected releases are:
diff --git a/pkg/app/testdata/testapply_2/skip-needs=true/log b/pkg/app/testdata/testapply_2/skip-needs=true/log
index d1a55a90..65c32bd4 100644
--- a/pkg/app/testdata/testapply_2/skip-needs=true/log
+++ b/pkg/app/testdata/testapply_2/skip-needs=true/log
@@ -1,39 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -60,7 +28,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
23:
merged environment: &{default map[] map[]}
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
Affected releases are:
external-secrets (incubator/raw) UPDATED
diff --git a/pkg/app/testdata/testapply_2/skip-needs=true_with_no_diff_on_a_release/log b/pkg/app/testdata/testapply_2/skip-needs=true_with_no_diff_on_a_release/log
index 26968c1e..1f4c6d72 100644
--- a/pkg/app/testdata/testapply_2/skip-needs=true_with_no_diff_on_a_release/log
+++ b/pkg/app/testdata/testapply_2/skip-needs=true_with_no_diff_on_a_release/log
@@ -1,39 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -60,7 +28,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
23:
merged environment: &{default map[] map[]}
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
Affected releases are:
external-secrets (incubator/raw) UPDATED
diff --git a/pkg/app/testdata/testapply_3/bad_--selector/log b/pkg/app/testdata/testapply_3/bad_--selector/log
new file mode 100644
index 00000000..8e3e99cf
--- /dev/null
+++ b/pkg/app/testdata/testapply_3/bad_--selector/log
@@ -0,0 +1,33 @@
+processing file "helmfile.yaml.gotmpl" in directory "."
+changing working directory to "/path/to"
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
+ 0:
+ 1:
+ 2:
+ 3: releases:
+ 4: - name: kubernetes-external-secrets
+ 5: chart: incubator/raw
+ 6: namespace: kube-system
+ 7:
+ 8: - name: external-secrets
+ 9: chart: incubator/raw
+10: namespace: default
+11: labels:
+12: app: test
+13: needs:
+14: - kube-system/kubernetes-external-secrets
+15:
+16: - name: my-release
+17: chart: incubator/raw
+18: namespace: default
+19: labels:
+20: app: test
+21: needs:
+22: - default/external-secrets
+23:
+
+merged environment: &{default map[] map[]}
+0 release(s) matching app=test_non_existent found in helmfile.yaml.gotmpl
+
+changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true/log b/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true/log
index 4193cc54..4245010a 100644
--- a/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true/log
+++ b/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true/log
@@ -1,39 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -60,7 +28,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
23:
merged environment: &{default map[] map[]}
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
Affected releases are:
external-secrets (incubator/raw) UPDATED
diff --git a/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true_but_no_diff_on_needed_release/log b/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true_but_no_diff_on_needed_release/log
index 1b585c5b..653c58c2 100644
--- a/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true_but_no_diff_on_needed_release/log
+++ b/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true_but_no_diff_on_needed_release/log
@@ -1,39 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -60,7 +28,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
23:
merged environment: &{default map[] map[]}
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
Affected releases are:
external-secrets (incubator/raw) UPDATED
diff --git a/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true_with_installed_but_disabled_release/log b/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true_with_installed_but_disabled_release/log
index 84e5b96e..0996c8a0 100644
--- a/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true_with_installed_but_disabled_release/log
+++ b/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true_with_installed_but_disabled_release/log
@@ -1,40 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7: installed: false
- 8:
- 9: - name: external-secrets
-10: chart: incubator/raw
-11: namespace: default
-12: labels:
-13: app: test
-14: needs:
-15: - kube-system/kubernetes-external-secrets
-16:
-17: - name: my-release
-18: chart: incubator/raw
-19: namespace: default
-20: labels:
-21: app: test
-22: needs:
-23: - default/external-secrets
-24:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -63,7 +30,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
merged environment: &{default map[] map[]}
WARNING: release external-secrets needs kubernetes-external-secrets, but kubernetes-external-secrets is not installed due to installed: false. Either mark kubernetes-external-secrets as installed or remove kubernetes-external-secrets from external-secrets's needs
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
WARNING: release external-secrets needs kubernetes-external-secrets, but kubernetes-external-secrets is not installed due to installed: false. Either mark kubernetes-external-secrets as installed or remove kubernetes-external-secrets from external-secrets's needs
Affected releases are:
diff --git a/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true_with_not_installed_and_disabled_release/log b/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true_with_not_installed_and_disabled_release/log
index 3018fdfa..222191de 100644
--- a/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true_with_not_installed_and_disabled_release/log
+++ b/pkg/app/testdata/testapply_3/skip-needs=false_include-needs=true_with_not_installed_and_disabled_release/log
@@ -1,40 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7: installed: false
- 8:
- 9: - name: external-secrets
-10: chart: incubator/raw
-11: namespace: default
-12: labels:
-13: app: test
-14: needs:
-15: - kube-system/kubernetes-external-secrets
-16:
-17: - name: my-release
-18: chart: incubator/raw
-19: namespace: default
-20: labels:
-21: app: test
-22: needs:
-23: - default/external-secrets
-24:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -63,7 +30,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
merged environment: &{default map[] map[]}
WARNING: release external-secrets needs kubernetes-external-secrets, but kubernetes-external-secrets is not installed due to installed: false. Either mark kubernetes-external-secrets as installed or remove kubernetes-external-secrets from external-secrets's needs
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
WARNING: release external-secrets needs kubernetes-external-secrets, but kubernetes-external-secrets is not installed due to installed: false. Either mark kubernetes-external-secrets as installed or remove kubernetes-external-secrets from external-secrets's needs
Affected releases are:
diff --git a/pkg/app/testdata/testapply_3/skip-needs=true/log b/pkg/app/testdata/testapply_3/skip-needs=true/log
index e7200b58..3a82d6bc 100644
--- a/pkg/app/testdata/testapply_3/skip-needs=true/log
+++ b/pkg/app/testdata/testapply_3/skip-needs=true/log
@@ -1,39 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -60,7 +28,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
23:
merged environment: &{default map[] map[]}
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
Affected releases are:
external-secrets (incubator/raw) UPDATED
diff --git a/pkg/app/testdata/testapply_3/skip-needs=true_with_no_diff_on_a_release/log b/pkg/app/testdata/testapply_3/skip-needs=true_with_no_diff_on_a_release/log
index 0bb7dd4b..3c4dc215 100644
--- a/pkg/app/testdata/testapply_3/skip-needs=true_with_no_diff_on_a_release/log
+++ b/pkg/app/testdata/testapply_3/skip-needs=true_with_no_diff_on_a_release/log
@@ -1,39 +1,7 @@
-processing file "helmfile.yaml" in directory "."
+processing file "helmfile.yaml.gotmpl" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1:
- 2:
- 3: releases:
- 4: - name: kubernetes-external-secrets
- 5: chart: incubator/raw
- 6: namespace: kube-system
- 7:
- 8: - name: external-secrets
- 9: chart: incubator/raw
-10: namespace: default
-11: labels:
-12: app: test
-13: needs:
-14: - kube-system/kubernetes-external-secrets
-15:
-16: - name: my-release
-17: chart: incubator/raw
-18: namespace: default
-19: labels:
-20: app: test
-21: needs:
-22: - default/external-secrets
-23:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
+rendering starting for "helmfile.yaml.gotmpl.part.0": inherited=&{default map[] map[]}, overrode=
+rendering result of "helmfile.yaml.gotmpl.part.0":
0:
1:
2:
@@ -60,7 +28,7 @@ second-pass rendering result of "helmfile.yaml.part.0":
23:
merged environment: &{default map[] map[]}
-2 release(s) matching app=test found in helmfile.yaml
+2 release(s) matching app=test found in helmfile.yaml.gotmpl
Affected releases are:
external-secrets (incubator/raw) UPDATED
diff --git a/pkg/app/testdata/testdeps/smoke/log b/pkg/app/testdata/testdeps/smoke/log
new file mode 100644
index 00000000..52b88928
--- /dev/null
+++ b/pkg/app/testdata/testdeps/smoke/log
@@ -0,0 +1,7 @@
+processing file "helmfile.yaml" in directory "."
+changing working directory to "/path/to"
+merged environment: &{default map[] map[]}
+There are no repositories defined in your helmfile.yaml.
+This means helmfile cannot update your dependencies or create a lock file.
+See https://github.com/roboll/helmfile/issues/878 for more information.
+changing working directory back to "/path/to"
diff --git a/pkg/app/testdata/testdestroy/destroy_installed_but_disabled_release/log b/pkg/app/testdata/testdestroy/destroy_installed_but_disabled_release/log
index e7d3352d..a7eea328 100644
--- a/pkg/app/testdata/testdestroy/destroy_installed_but_disabled_release/log
+++ b/pkg/app/testdata/testdestroy/destroy_installed_but_disabled_release/log
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: backend-v1
- 3: chart: charts/backend
- 4: installed: false
- 5: - name: frontend-v1
- 6: chart: charts/frontend
- 7: needs:
- 8: - backend-v1
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: backend-v1
- 3: chart: charts/backend
- 4: installed: false
- 5: - name: frontend-v1
- 6: chart: charts/frontend
- 7: needs:
- 8: - backend-v1
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release frontend-v1 needs backend-v1, but backend-v1 is not installed due to installed: false. Either mark backend-v1 as installed or remove backend-v1 from frontend-v1's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testdestroy/destroy_only_one_release_with_selector/log b/pkg/app/testdata/testdestroy/destroy_only_one_release_with_selector/log
index b3ea59f1..c8731536 100644
--- a/pkg/app/testdata/testdestroy/destroy_only_one_release_with_selector/log
+++ b/pkg/app/testdata/testdestroy/destroy_only_one_release_with_selector/log
@@ -1,128 +1,6 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: database
- 3: chart: charts/mysql
- 4: needs:
- 5: - logging
- 6: - name: frontend-v1
- 7: chart: charts/frontend
- 8: installed: false
- 9: needs:
-10: - servicemesh
-11: - logging
-12: - backend-v1
-13: - name: frontend-v2
-14: chart: charts/frontend
-15: needs:
-16: - servicemesh
-17: - logging
-18: - backend-v2
-19: - name: frontend-v3
-20: chart: charts/frontend
-21: needs:
-22: - servicemesh
-23: - logging
-24: - backend-v2
-25: - name: backend-v1
-26: chart: charts/backend
-27: installed: false
-28: needs:
-29: - servicemesh
-30: - logging
-31: - database
-32: - anotherbackend
-33: - name: backend-v2
-34: chart: charts/backend
-35: needs:
-36: - servicemesh
-37: - logging
-38: - database
-39: - anotherbackend
-40: - name: anotherbackend
-41: chart: charts/anotherbackend
-42: needs:
-43: - servicemesh
-44: - logging
-45: - database
-46: - name: servicemesh
-47: chart: charts/istio
-48: needs:
-49: - logging
-50: - name: logging
-51: chart: charts/fluent-bit
-52: - name: front-proxy
-53: chart: stable/envoy
-54:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: database
- 3: chart: charts/mysql
- 4: needs:
- 5: - logging
- 6: - name: frontend-v1
- 7: chart: charts/frontend
- 8: installed: false
- 9: needs:
-10: - servicemesh
-11: - logging
-12: - backend-v1
-13: - name: frontend-v2
-14: chart: charts/frontend
-15: needs:
-16: - servicemesh
-17: - logging
-18: - backend-v2
-19: - name: frontend-v3
-20: chart: charts/frontend
-21: needs:
-22: - servicemesh
-23: - logging
-24: - backend-v2
-25: - name: backend-v1
-26: chart: charts/backend
-27: installed: false
-28: needs:
-29: - servicemesh
-30: - logging
-31: - database
-32: - anotherbackend
-33: - name: backend-v2
-34: chart: charts/backend
-35: needs:
-36: - servicemesh
-37: - logging
-38: - database
-39: - anotherbackend
-40: - name: anotherbackend
-41: chart: charts/anotherbackend
-42: needs:
-43: - servicemesh
-44: - logging
-45: - database
-46: - name: servicemesh
-47: chart: charts/istio
-48: needs:
-49: - logging
-50: - name: logging
-51: chart: charts/fluent-bit
-52: - name: front-proxy
-53: chart: stable/envoy
-54:
-
merged environment: &{default map[] map[]}
-WARNING: release frontend-v1 needs backend-v1, but backend-v1 is not installed due to installed: false. Either mark backend-v1 as installed or remove backend-v1 from frontend-v1's needs
1 release(s) matching name=logging found in helmfile.yaml
processing 1 groups of releases in this order:
diff --git a/pkg/app/testdata/testdestroy/helm3/log b/pkg/app/testdata/testdestroy/helm3/log
index e7d3352d..a7eea328 100644
--- a/pkg/app/testdata/testdestroy/helm3/log
+++ b/pkg/app/testdata/testdestroy/helm3/log
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: backend-v1
- 3: chart: charts/backend
- 4: installed: false
- 5: - name: frontend-v1
- 6: chart: charts/frontend
- 7: needs:
- 8: - backend-v1
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: backend-v1
- 3: chart: charts/backend
- 4: installed: false
- 5: - name: frontend-v1
- 6: chart: charts/frontend
- 7: needs:
- 8: - backend-v1
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release frontend-v1 needs backend-v1, but backend-v1 is not installed due to installed: false. Either mark backend-v1 as installed or remove backend-v1 from frontend-v1's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testdestroy/smoke/log b/pkg/app/testdata/testdestroy/smoke/log
index 13a80305..3a28bfe7 100644
--- a/pkg/app/testdata/testdestroy/smoke/log
+++ b/pkg/app/testdata/testdestroy/smoke/log
@@ -1,128 +1,6 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: database
- 3: chart: charts/mysql
- 4: needs:
- 5: - logging
- 6: - name: frontend-v1
- 7: chart: charts/frontend
- 8: installed: false
- 9: needs:
-10: - servicemesh
-11: - logging
-12: - backend-v1
-13: - name: frontend-v2
-14: chart: charts/frontend
-15: needs:
-16: - servicemesh
-17: - logging
-18: - backend-v2
-19: - name: frontend-v3
-20: chart: charts/frontend
-21: needs:
-22: - servicemesh
-23: - logging
-24: - backend-v2
-25: - name: backend-v1
-26: chart: charts/backend
-27: installed: false
-28: needs:
-29: - servicemesh
-30: - logging
-31: - database
-32: - anotherbackend
-33: - name: backend-v2
-34: chart: charts/backend
-35: needs:
-36: - servicemesh
-37: - logging
-38: - database
-39: - anotherbackend
-40: - name: anotherbackend
-41: chart: charts/anotherbackend
-42: needs:
-43: - servicemesh
-44: - logging
-45: - database
-46: - name: servicemesh
-47: chart: charts/istio
-48: needs:
-49: - logging
-50: - name: logging
-51: chart: charts/fluent-bit
-52: - name: front-proxy
-53: chart: stable/envoy
-54:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: database
- 3: chart: charts/mysql
- 4: needs:
- 5: - logging
- 6: - name: frontend-v1
- 7: chart: charts/frontend
- 8: installed: false
- 9: needs:
-10: - servicemesh
-11: - logging
-12: - backend-v1
-13: - name: frontend-v2
-14: chart: charts/frontend
-15: needs:
-16: - servicemesh
-17: - logging
-18: - backend-v2
-19: - name: frontend-v3
-20: chart: charts/frontend
-21: needs:
-22: - servicemesh
-23: - logging
-24: - backend-v2
-25: - name: backend-v1
-26: chart: charts/backend
-27: installed: false
-28: needs:
-29: - servicemesh
-30: - logging
-31: - database
-32: - anotherbackend
-33: - name: backend-v2
-34: chart: charts/backend
-35: needs:
-36: - servicemesh
-37: - logging
-38: - database
-39: - anotherbackend
-40: - name: anotherbackend
-41: chart: charts/anotherbackend
-42: needs:
-43: - servicemesh
-44: - logging
-45: - database
-46: - name: servicemesh
-47: chart: charts/istio
-48: needs:
-49: - logging
-50: - name: logging
-51: chart: charts/fluent-bit
-52: - name: front-proxy
-53: chart: stable/envoy
-54:
-
merged environment: &{default map[] map[]}
-WARNING: release frontend-v1 needs backend-v1, but backend-v1 is not installed due to installed: false. Either mark backend-v1 as installed or remove backend-v1 from frontend-v1's needs
10 release(s) found in helmfile.yaml
processing 5 groups of releases in this order:
@@ -136,7 +14,6 @@ GROUP RELEASES
processing releases in group 1/5: default//frontend-v3, default//frontend-v2, default//frontend-v1
release "frontend-v3" processed
release "frontend-v2" processed
-WARNING: release frontend-v1 needs backend-v1, but backend-v1 is not installed due to installed: false. Either mark backend-v1 as installed or remove backend-v1 from frontend-v1's needs
release "frontend-v1" processed
processing releases in group 2/5: default//backend-v2, default//backend-v1
release "backend-v2" processed
diff --git a/pkg/app/testdata/testdestroy_2/destroy_installed_but_disabled_release/log b/pkg/app/testdata/testdestroy_2/destroy_installed_but_disabled_release/log
index 04b1ccfd..eebb5cdb 100644
--- a/pkg/app/testdata/testdestroy_2/destroy_installed_but_disabled_release/log
+++ b/pkg/app/testdata/testdestroy_2/destroy_installed_but_disabled_release/log
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: backend-v1
- 3: chart: charts/backend
- 4: installed: false
- 5: - name: frontend-v1
- 6: chart: charts/frontend
- 7: needs:
- 8: - backend-v1
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: backend-v1
- 3: chart: charts/backend
- 4: installed: false
- 5: - name: frontend-v1
- 6: chart: charts/frontend
- 7: needs:
- 8: - backend-v1
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release frontend-v1 needs backend-v1, but backend-v1 is not installed due to installed: false. Either mark backend-v1 as installed or remove backend-v1 from frontend-v1's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testdestroy_2/destroy_only_one_release_with_selector/log b/pkg/app/testdata/testdestroy_2/destroy_only_one_release_with_selector/log
index 917d5684..253339d8 100644
--- a/pkg/app/testdata/testdestroy_2/destroy_only_one_release_with_selector/log
+++ b/pkg/app/testdata/testdestroy_2/destroy_only_one_release_with_selector/log
@@ -1,128 +1,6 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: database
- 3: chart: charts/mysql
- 4: needs:
- 5: - logging
- 6: - name: frontend-v1
- 7: chart: charts/frontend
- 8: installed: false
- 9: needs:
-10: - servicemesh
-11: - logging
-12: - backend-v1
-13: - name: frontend-v2
-14: chart: charts/frontend
-15: needs:
-16: - servicemesh
-17: - logging
-18: - backend-v2
-19: - name: frontend-v3
-20: chart: charts/frontend
-21: needs:
-22: - servicemesh
-23: - logging
-24: - backend-v2
-25: - name: backend-v1
-26: chart: charts/backend
-27: installed: false
-28: needs:
-29: - servicemesh
-30: - logging
-31: - database
-32: - anotherbackend
-33: - name: backend-v2
-34: chart: charts/backend
-35: needs:
-36: - servicemesh
-37: - logging
-38: - database
-39: - anotherbackend
-40: - name: anotherbackend
-41: chart: charts/anotherbackend
-42: needs:
-43: - servicemesh
-44: - logging
-45: - database
-46: - name: servicemesh
-47: chart: charts/istio
-48: needs:
-49: - logging
-50: - name: logging
-51: chart: charts/fluent-bit
-52: - name: front-proxy
-53: chart: stable/envoy
-54:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: database
- 3: chart: charts/mysql
- 4: needs:
- 5: - logging
- 6: - name: frontend-v1
- 7: chart: charts/frontend
- 8: installed: false
- 9: needs:
-10: - servicemesh
-11: - logging
-12: - backend-v1
-13: - name: frontend-v2
-14: chart: charts/frontend
-15: needs:
-16: - servicemesh
-17: - logging
-18: - backend-v2
-19: - name: frontend-v3
-20: chart: charts/frontend
-21: needs:
-22: - servicemesh
-23: - logging
-24: - backend-v2
-25: - name: backend-v1
-26: chart: charts/backend
-27: installed: false
-28: needs:
-29: - servicemesh
-30: - logging
-31: - database
-32: - anotherbackend
-33: - name: backend-v2
-34: chart: charts/backend
-35: needs:
-36: - servicemesh
-37: - logging
-38: - database
-39: - anotherbackend
-40: - name: anotherbackend
-41: chart: charts/anotherbackend
-42: needs:
-43: - servicemesh
-44: - logging
-45: - database
-46: - name: servicemesh
-47: chart: charts/istio
-48: needs:
-49: - logging
-50: - name: logging
-51: chart: charts/fluent-bit
-52: - name: front-proxy
-53: chart: stable/envoy
-54:
-
merged environment: &{default map[] map[]}
-WARNING: release frontend-v1 needs backend-v1, but backend-v1 is not installed due to installed: false. Either mark backend-v1 as installed or remove backend-v1 from frontend-v1's needs
1 release(s) matching name=logging found in helmfile.yaml
processing 1 groups of releases in this order:
diff --git a/pkg/app/testdata/testdestroy_2/helm3/log b/pkg/app/testdata/testdestroy_2/helm3/log
index 04b1ccfd..eebb5cdb 100644
--- a/pkg/app/testdata/testdestroy_2/helm3/log
+++ b/pkg/app/testdata/testdestroy_2/helm3/log
@@ -1,36 +1,5 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: backend-v1
- 3: chart: charts/backend
- 4: installed: false
- 5: - name: frontend-v1
- 6: chart: charts/frontend
- 7: needs:
- 8: - backend-v1
- 9:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: backend-v1
- 3: chart: charts/backend
- 4: installed: false
- 5: - name: frontend-v1
- 6: chart: charts/frontend
- 7: needs:
- 8: - backend-v1
- 9:
-
merged environment: &{default map[] map[]}
WARNING: release frontend-v1 needs backend-v1, but backend-v1 is not installed due to installed: false. Either mark backend-v1 as installed or remove backend-v1 from frontend-v1's needs
2 release(s) found in helmfile.yaml
diff --git a/pkg/app/testdata/testdestroy_2/smoke/log b/pkg/app/testdata/testdestroy_2/smoke/log
index d4fd6427..e8987816 100644
--- a/pkg/app/testdata/testdestroy_2/smoke/log
+++ b/pkg/app/testdata/testdestroy_2/smoke/log
@@ -1,128 +1,6 @@
processing file "helmfile.yaml" in directory "."
changing working directory to "/path/to"
-first-pass rendering starting for "helmfile.yaml.part.0": inherited=&{default map[] map[]}, overrode=
-first-pass uses: &{default map[] map[]}
-first-pass rendering output of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: database
- 3: chart: charts/mysql
- 4: needs:
- 5: - logging
- 6: - name: frontend-v1
- 7: chart: charts/frontend
- 8: installed: false
- 9: needs:
-10: - servicemesh
-11: - logging
-12: - backend-v1
-13: - name: frontend-v2
-14: chart: charts/frontend
-15: needs:
-16: - servicemesh
-17: - logging
-18: - backend-v2
-19: - name: frontend-v3
-20: chart: charts/frontend
-21: needs:
-22: - servicemesh
-23: - logging
-24: - backend-v2
-25: - name: backend-v1
-26: chart: charts/backend
-27: installed: false
-28: needs:
-29: - servicemesh
-30: - logging
-31: - database
-32: - anotherbackend
-33: - name: backend-v2
-34: chart: charts/backend
-35: needs:
-36: - servicemesh
-37: - logging
-38: - database
-39: - anotherbackend
-40: - name: anotherbackend
-41: chart: charts/anotherbackend
-42: needs:
-43: - servicemesh
-44: - logging
-45: - database
-46: - name: servicemesh
-47: chart: charts/istio
-48: needs:
-49: - logging
-50: - name: logging
-51: chart: charts/fluent-bit
-52: - name: front-proxy
-53: chart: stable/envoy
-54:
-
-first-pass produced: &{default map[] map[]}
-first-pass rendering result of "helmfile.yaml.part.0": {default map[] map[]}
-vals:
-map[]
-defaultVals:[]
-second-pass rendering result of "helmfile.yaml.part.0":
- 0:
- 1: releases:
- 2: - name: database
- 3: chart: charts/mysql
- 4: needs:
- 5: - logging
- 6: - name: frontend-v1
- 7: chart: charts/frontend
- 8: installed: false
- 9: needs:
-10: - servicemesh
-11: - logging
-12: - backend-v1
-13: - name: frontend-v2
-14: chart: charts/frontend
-15: needs:
-16: - servicemesh
-17: - logging
-18: - backend-v2
-19: - name: frontend-v3
-20: chart: charts/frontend
-21: needs:
-22: - servicemesh
-23: - logging
-24: - backend-v2
-25: - name: backend-v1
-26: chart: charts/backend
-27: installed: false
-28: needs:
-29: - servicemesh
-30: - logging
-31: - database
-32: - anotherbackend
-33: - name: backend-v2
-34: chart: charts/backend
-35: needs:
-36: - servicemesh
-37: - logging
-38: - database
-39: - anotherbackend
-40: - name: anotherbackend
-41: chart: charts/anotherbackend
-42: needs:
-43: - servicemesh
-44: - logging
-45: - database
-46: - name: servicemesh
-47: chart: charts/istio
-48: needs:
-49: - logging
-50: - name: logging
-51: chart: charts/fluent-bit
-52: - name: front-proxy
-53: chart: stable/envoy
-54:
-
merged environment: &{default map[] map[]}
-WARNING: release frontend-v1 needs backend-v1, but backend-v1 is not installed due to installed: false. Either mark backend-v1 as installed or remove backend-v1 from frontend-v1's needs
10 release(s) found in helmfile.yaml
processing 5 groups of releases in this order:
@@ -136,7 +14,6 @@ GROUP RELEASES
processing releases in group 1/5: frontend-v3, frontend-v2, frontend-v1
release "frontend-v3" processed
release "frontend-v2" processed
-WARNING: release frontend-v1 needs backend-v1, but backend-v1 is not installed due to installed: false. Either mark backend-v1 as installed or remove backend-v1 from frontend-v1's needs
release "frontend-v1" processed
processing releases in group 2/5: backend-v2, backend-v1
release "backend-v2" processed
diff --git a/pkg/app/testdata/testreadfromyaml_rendertemplatelog/log b/pkg/app/testdata/testreadfromyaml_rendertemplatelog/log
new file mode 100644
index 00000000..db8157f1
--- /dev/null
+++ b/pkg/app/testdata/testreadfromyaml_rendertemplatelog/log
@@ -0,0 +1,10 @@
+rendering starting for "": inherited=&{default map[] map[]}, overrode=
+rendering result of "":
+ 0:
+ 1: releases:
+ 2: - name: foo
+ 3: chart: mychart1
+ 4: - name: bar
+ 5:
+ 6:
+
diff --git a/pkg/app/two_pass_renderer.go b/pkg/app/two_pass_renderer.go
index 221af0c2..637f99be 100644
--- a/pkg/app/two_pass_renderer.go
+++ b/pkg/app/two_pass_renderer.go
@@ -5,10 +5,7 @@ import (
"fmt"
"strings"
- "github.com/google/go-cmp/cmp"
-
"github.com/helmfile/helmfile/pkg/environment"
- "github.com/helmfile/helmfile/pkg/runtime"
"github.com/helmfile/helmfile/pkg/state"
"github.com/helmfile/helmfile/pkg/tmpl"
)
@@ -17,57 +14,11 @@ func prependLineNumbers(text string) string {
buf := bytes.NewBufferString("")
lines := strings.Split(text, "\n")
for i, line := range lines {
- buf.WriteString(fmt.Sprintf("%2d: %s\n", i, line))
+ fmt.Fprintf(buf, "%2d: %s\n", i, line)
}
return buf.String()
}
-func (r *desiredStateLoader) renderPrestate(firstPassEnv, overrode *environment.Environment, baseDir, filename string, content []byte) (*environment.Environment, *state.HelmState) {
- initEnv, err := firstPassEnv.Merge(overrode)
- if err != nil {
- return firstPassEnv, nil
- }
- tmplData := state.NewEnvironmentTemplateData(*initEnv, r.namespace, map[string]any{})
- firstPassRenderer := tmpl.NewFirstPassRenderer(baseDir, tmplData)
-
- // parse as much as we can, tolerate errors, this is a preparse
- yamlBuf, err := firstPassRenderer.RenderTemplateContentToBuffer(content)
- if err != nil {
- r.logger.Debugf("first-pass rendering input of \"%s\":\n%s", filename, prependLineNumbers(string(content)))
- r.logger.Debugf("template syntax error: %v", err)
- if yamlBuf == nil { // we have a template syntax error, let the second parse report
- return firstPassEnv, nil
- }
- }
- yamlData := yamlBuf.String()
- r.logger.Debugf("first-pass rendering output of \"%s\":\n%s", filename, prependLineNumbers(yamlData))
-
- // Work-around for https://github.com/golang/go/issues/24963
- sanitized := strings.ReplaceAll(yamlData, "", "")
-
- if len(yamlData) != len(sanitized) {
- msg := "replaced s to workaround https://github.com/golang/go/issues/24963 to address https://github.com/roboll/helmfile/issues/553:\n%s"
- r.logger.Debugf(msg, cmp.Diff(yamlData, sanitized))
- }
-
- c := r.underlying()
- c.Strict = false
- // create preliminary state, as we may have an environment. Tolerate errors.
- prestate, err := c.ParseAndLoad([]byte(sanitized), baseDir, filename, r.env, true, false, firstPassEnv, overrode)
- if err != nil {
- if _, ok := err.(*state.StateLoadError); ok {
- r.logger.Debugf("could not deduce `environment:` block, configuring only .Environment.Name. error: %v", err)
- }
- r.logger.Debugf("error in first-pass rendering: result of \"%s\":\n%s", filename, prependLineNumbers(yamlBuf.String()))
- }
-
- if prestate != nil {
- firstPassEnv = &prestate.Env
- }
-
- return firstPassEnv, prestate
-}
-
type RenderOpts struct {
}
@@ -82,11 +33,7 @@ func (r *desiredStateLoader) renderTemplatesToYamlWithEnv(baseDir, filename stri
}
func (r *desiredStateLoader) twoPassRenderTemplateToYaml(inherited, overrode *environment.Environment, baseDir, filename string, content []byte) (*bytes.Buffer, error) {
- // try a first pass render. This will always succeed, but can produce a limited env
var phase string
- if !runtime.V1Mode {
- phase = "first-pass "
- }
r.logger.Debugf("%srendering starting for \"%s\": inherited=%v, overrode=%v", phase, filename, inherited, overrode)
initEnv, err := inherited.Merge(nil)
@@ -100,53 +47,14 @@ func (r *desiredStateLoader) twoPassRenderTemplateToYaml(inherited, overrode *en
vals map[string]any
)
- if runtime.V1Mode {
- var err error
+ finalEnv, err = initEnv.Merge(overrode)
+ if err != nil {
+ return nil, err
+ }
- finalEnv, err = initEnv.Merge(overrode)
- if err != nil {
- return nil, err
- }
-
- vals, err = finalEnv.GetMergedValues()
- if err != nil {
- return nil, err
- }
- } else {
- r.logger.Debugf("first-pass uses: %v", initEnv)
- firstPassEnv, err := initEnv.Merge(nil)
- if err != nil {
- return nil, err
- }
- renderedEnv, prestate := r.renderPrestate(firstPassEnv, overrode, baseDir, filename, content)
-
- r.logger.Debugf("first-pass produced: %v", renderedEnv)
-
- mergedEnv, err := inherited.Merge(renderedEnv)
- if err != nil {
- return nil, err
- }
-
- mergedEnv, err = mergedEnv.Merge(overrode)
- if err != nil {
- return nil, err
- }
-
- r.logger.Debugf("first-pass rendering result of \"%s\": %v", filename, *mergedEnv)
-
- renderingPhase = "second-pass "
-
- finalEnv = mergedEnv
-
- vals, err = finalEnv.GetMergedValues()
- if err != nil {
- return nil, err
- }
-
- if prestate != nil {
- prestate.Env = *mergedEnv
- r.logger.Debugf("vals:\n%v\ndefaultVals:%v", vals, prestate.DefaultValues)
- }
+ vals, err = finalEnv.GetMergedValues()
+ if err != nil {
+ return nil, err
}
tmplData := state.NewEnvironmentTemplateData(*finalEnv, r.namespace, vals)
diff --git a/pkg/app/two_pass_renderer_test.go b/pkg/app/two_pass_renderer_test.go
index fde1630f..5190f9f6 100644
--- a/pkg/app/two_pass_renderer_test.go
+++ b/pkg/app/two_pass_renderer_test.go
@@ -7,7 +7,6 @@ import (
"github.com/helmfile/helmfile/pkg/helmexec"
"github.com/helmfile/helmfile/pkg/remote"
- "github.com/helmfile/helmfile/pkg/runtime"
"github.com/helmfile/helmfile/pkg/state"
"github.com/helmfile/helmfile/pkg/testhelper"
"github.com/helmfile/helmfile/pkg/yaml"
@@ -68,60 +67,6 @@ releases:
}
}
-func TestReadFromYaml_RenderTemplate(t *testing.T) {
- defaultValuesYaml := `
-releaseName: "hello"
-conditionalReleaseTag: "yes"
-`
-
- yamlContent := []byte(`
-environments:
- staging:
- values:
- - default/values.yaml
- production:
-
-releases:
-- name: {{ .Environment.Values.releaseName }}
- chart: mychart1
-
-{{ if (eq .Environment.Values.conditionalReleaseTag "yes") }}
-- name: conditionalRelease
-{{ end }}
-
-`)
-
- files := map[string]string{
- "/path/to/default/values.yaml": defaultValuesYaml,
- }
-
- r, _, _ := makeLoader(files, "staging")
- // test the double rendering
- yamlBuf, err := r.renderTemplatesToYaml("", "", yamlContent)
- if err != nil {
- t.Fatalf("unexpected error: %v", err)
- }
-
- var state state.HelmState
- err = yaml.Unmarshal(yamlBuf.Bytes(), &state)
-
- if err != nil {
- t.Errorf("unexpected error: %v", err)
- }
-
- if len(state.Releases) != 2 {
- t.Fatal("there should be 2 releases")
- }
-
- if state.Releases[0].Name != "hello" {
- t.Errorf("release name should be hello")
- }
-
- if state.Releases[1].Name != "conditionalRelease" {
- t.Error("conditional release should have been present")
- }
-}
-
func testReadFromYaml_RenderTemplateLog(t *testing.T) {
t.Helper()
@@ -165,20 +110,7 @@ releases:
}
func TestReadFromYaml_RenderTemplateLog(t *testing.T) {
- v := runtime.V1Mode
- t.Cleanup(func() {
- runtime.V1Mode = v
- })
-
- t.Run("v0mode", func(t *testing.T) {
- runtime.V1Mode = false
- testReadFromYaml_RenderTemplateLog(t)
- })
-
- t.Run("v1mode", func(t *testing.T) {
- runtime.V1Mode = true
- testReadFromYaml_RenderTemplateLog(t)
- })
+ testReadFromYaml_RenderTemplateLog(t)
}
func TestReadFromYaml_RenderTemplateWithValuesReferenceError(t *testing.T) {
@@ -211,51 +143,6 @@ releases:
}
}
-// This test shows that a gotmpl reference will get rendered correctly
-// even if the pre-render disables the readFile and exec functions.
-// This does not apply to .gotmpl files, which is a nice side-effect.
-func TestReadFromYaml_RenderTemplateWithGotmpl(t *testing.T) {
- defaultValuesYamlGotmpl := `
-releaseName: {{ readFile "nonIgnoredFile" }}
-`
-
- yamlContent := []byte(`
-environments:
- staging:
- values:
- - values.yaml.gotmpl
- production:
-
-{{ if (eq .Environment.Values.releaseName "release-a") }} # line 8
-releases:
-- name: a
- chart: mychart1
-{{ end }}
-`)
-
- files := map[string]string{
- "/path/to/nonIgnoredFile": `release-a`,
- "/path/to/values.yaml.gotmpl": defaultValuesYamlGotmpl,
- }
-
- r, _, _ := makeLoader(files, "staging")
- rendered, _ := r.renderTemplatesToYaml("", "", yamlContent)
-
- var state state.HelmState
- err := yaml.Unmarshal(rendered.Bytes(), &state)
- if err != nil {
- t.Fatalf("unexpected error: %v", err)
- }
-
- if len(state.Releases) != 1 {
- t.Fatal("there should be 1 release")
- }
-
- if state.Releases[0].Name != "a" {
- t.Fatal("release should have been declared")
- }
-}
-
func TestReadFromYaml_RenderTemplateWithNamespace(t *testing.T) {
yamlContent := []byte(`releases:
- name: {{ .Namespace }}-myrelease
diff --git a/pkg/config/apply.go b/pkg/config/apply.go
index 296c17cc..7cfc6d3c 100644
--- a/pkg/config/apply.go
+++ b/pkg/config/apply.go
@@ -18,10 +18,6 @@ type ApplyOptions struct {
DetailedExitcode bool
// StripTrailingCR is true if trailing carriage returns should be stripped during diffing
StripTrailingCR bool
- // TODO: Remove this function once Helmfile v0.x
- // DEPRECATED: Use skip-cleanup instead
- RetainValuesFiles bool
-
// SkipCleanup is true if the cleanup of temporary values files should be skipped
SkipCleanup bool
// SkipCRDs is true if the CRDs should be skipped
@@ -50,8 +46,12 @@ type ApplyOptions struct {
SuppressDiff bool
// Wait is true if the helm command should wait for the release to be deployed
Wait bool
+ // WaitRetries is the number of times to retry waiting for the release to be deployed
+ WaitRetries int
// WaitForJobs is true if the helm command should wait for the jobs to be completed
WaitForJobs bool
+ // Propagate '--skip-schema-validation' to helmv3 template and helm install
+ SkipSchemaValidation bool
// ReuseValues is true if the helm command should reuse the values
ReuseValues bool
// ResetValues is true if helm command should reset values to charts' default
@@ -68,6 +68,11 @@ type ApplyOptions struct {
SyncArgs string
// HideNotes is the hide notes flag
HideNotes bool
+
+ // TakeOwnership is true if the ownership should be taken
+ TakeOwnership bool
+
+ SyncReleaseLabels bool
}
// NewApply creates a new Apply
@@ -116,7 +121,7 @@ func (a *ApplyImpl) StripTrailingCR() bool {
// DiffOutput returns the diff output.
func (a *ApplyImpl) DiffOutput() string {
- return a.ApplyOptions.Output
+ return a.Output
}
// IncludeNeeds returns the include needs.
@@ -134,12 +139,6 @@ func (a *ApplyImpl) IncludeTransitiveNeeds() bool {
return a.ApplyOptions.IncludeTransitiveNeeds
}
-// TODO: Remove this function once Helmfile v0.x
-// RetainValuesFiles returns the retain values files.
-func (a *ApplyImpl) RetainValuesFiles() bool {
- return a.ApplyOptions.RetainValuesFiles
-}
-
// ShowSecrets returns the show secrets.
func (a *ApplyImpl) ShowSecrets() bool {
return a.ApplyOptions.ShowSecrets
@@ -208,6 +207,11 @@ func (a *ApplyImpl) Wait() bool {
return a.ApplyOptions.Wait
}
+// WaitRetries returns the wait retries.
+func (a *ApplyImpl) WaitRetries() int {
+ return a.ApplyOptions.WaitRetries
+}
+
// WaitForJobs returns the wait for jobs.
func (a *ApplyImpl) WaitForJobs() bool {
return a.ApplyOptions.WaitForJobs
@@ -235,6 +239,11 @@ func (a *ApplyImpl) PostRendererArgs() []string {
return a.ApplyOptions.PostRendererArgs
}
+// SkipSchemaValidation returns the SkipSchemaValidation.
+func (a *ApplyImpl) SkipSchemaValidation() bool {
+ return a.ApplyOptions.SkipSchemaValidation
+}
+
// Cascade returns cascade flag
func (a *ApplyImpl) Cascade() string {
return a.ApplyOptions.Cascade
@@ -250,6 +259,16 @@ func (a *ApplyImpl) SyncArgs() string {
return a.ApplyOptions.SyncArgs
}
+// HideNotes returns the HideNotes.
func (a *ApplyImpl) HideNotes() bool {
return a.ApplyOptions.HideNotes
}
+
+// TakeOwnership returns the TakeOwnership.
+func (a *ApplyImpl) TakeOwnership() bool {
+ return a.ApplyOptions.TakeOwnership
+}
+
+func (a *ApplyImpl) SyncReleaseLabels() bool {
+ return a.ApplyOptions.SyncReleaseLabels
+}
diff --git a/pkg/config/charts.go b/pkg/config/charts.go
deleted file mode 100644
index 859894bc..00000000
--- a/pkg/config/charts.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// TODO: Remove this function once Helmfile v0.x
-package config
-
-// ChartsOptions is the options for the build command
-type ChartsOptions struct {
- // Set is the additional values to be merged into the helm command --set flag
- Set []string
- // Values is the additional value files to be merged into the helm command --values flag
- Values []string
- // Concurrency is the maximum number of concurrent helm processes to run, 0 is unlimited
- Concurrency int
-}
-
-// NewChartsOptions creates a new Apply
-func NewChartsOptions() *ChartsOptions {
- return &ChartsOptions{}
-}
-
-// ChartsImpl is impl for applyOptions
-type ChartsImpl struct {
- *GlobalImpl
- *ChartsOptions
-}
-
-// NewChartsImpl creates a new ChartsImpl
-func NewChartsImpl(g *GlobalImpl, b *ChartsOptions) *ChartsImpl {
- return &ChartsImpl{
- GlobalImpl: g,
- ChartsOptions: b,
- }
-}
-
-// Concurrency returns the concurrency
-func (c *ChartsImpl) Concurrency() int {
- return c.ChartsOptions.Concurrency
-}
-
-// IncludeTransitiveNeeds returns the includeTransitiveNeeds
-func (c *ChartsImpl) IncludeTransitiveNeeds() bool {
- return false
-}
-
-// Values returns the values
-func (c *ChartsImpl) Values() []string {
- return c.ChartsOptions.Values
-}
diff --git a/pkg/config/config.go b/pkg/config/config.go
index 7bfe1aca..f49ec705 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -1,21 +1,23 @@
package config
import (
+ "regexp"
"strings"
"github.com/helmfile/helmfile/pkg/maputil"
)
func NewCLIConfigImpl(g *GlobalImpl) error {
+ re := regexp.MustCompile(`(?:,|^)([^\s=]+)=(['"][^'"]*['"]|[^,]+)`)
optsSet := g.RawStateValuesSetString()
if len(optsSet) > 0 {
set := map[string]any{}
for i := range optsSet {
- ops := strings.Split(optsSet[i], ",")
+ ops := re.FindAllStringSubmatch(optsSet[i], -1)
for j := range ops {
- op := strings.SplitN(ops[j], "=", 2)
- k := maputil.ParseKey(op[0])
- v := op[1]
+ op := ops[j]
+ k := maputil.ParseKey(op[1])
+ v := op[2]
maputil.Set(set, k, v, true)
}
diff --git a/pkg/config/delete.go b/pkg/config/delete.go
deleted file mode 100644
index f688e94f..00000000
--- a/pkg/config/delete.go
+++ /dev/null
@@ -1,67 +0,0 @@
-// TODO: Remove this function once Helmfile v0.x
-package config
-
-// DeleteOptions is the options for the build command
-type DeleteOptions struct {
- // Concurrency is the maximum number of concurrent helm processes to run, 0 is unlimited
- Concurrency int
- // Purge is the purge flag
- Purge bool
- // SkipCharts makes Delete skip `withPreparedCharts`
- SkipCharts bool
- // Cascade '--cascade' to helmv3 delete, available values: background, foreground, or orphan, default: background
- Cascade string
- // Wait '--wait' if set, will wait until all the resources are deleted before returning. It will wait for as long as --timeout
- DeleteWait bool
- // Timeout '--timeout', to wait for helm delete operation (default 5m0s)
- DeleteTimeout int
-}
-
-// NewDeleteOptions creates a new Apply
-func NewDeleteOptions() *DeleteOptions {
- return &DeleteOptions{}
-}
-
-// DeleteImpl is impl for applyOptions
-type DeleteImpl struct {
- *GlobalImpl
- *DeleteOptions
-}
-
-// NewDeleteImpl creates a new DeleteImpl
-func NewDeleteImpl(g *GlobalImpl, b *DeleteOptions) *DeleteImpl {
- return &DeleteImpl{
- GlobalImpl: g,
- DeleteOptions: b,
- }
-}
-
-// Concurrency returns the concurrency
-func (c *DeleteImpl) Concurrency() int {
- return c.DeleteOptions.Concurrency
-}
-
-// Purge returns the purge
-func (c *DeleteImpl) Purge() bool {
- return c.DeleteOptions.Purge
-}
-
-// SkipCharts returns skipCharts flag
-func (c *DeleteImpl) SkipCharts() bool {
- return c.DeleteOptions.SkipCharts
-}
-
-// Cascade returns cascade flag
-func (c *DeleteImpl) Cascade() string {
- return c.DeleteOptions.Cascade
-}
-
-// DeleteWait returns the wait flag
-func (c *DeleteImpl) DeleteWait() bool {
- return c.DeleteOptions.DeleteWait
-}
-
-// DeleteTimeout returns the timeout flag
-func (c *DeleteImpl) DeleteTimeout() int {
- return c.DeleteOptions.DeleteTimeout
-}
diff --git a/pkg/config/diff.go b/pkg/config/diff.go
index 0fe525e8..ac8018b9 100644
--- a/pkg/config/diff.go
+++ b/pkg/config/diff.go
@@ -48,6 +48,7 @@ type DiffOptions struct {
DiffArgs string
// SuppressOutputLineRegex is a list of regexes to suppress output lines
SuppressOutputLineRegex []string
+ SkipSchemaValidation bool
}
// NewDiffOptions creates a new Apply
@@ -125,7 +126,7 @@ func (a *DiffImpl) StripTrailingCR() bool {
// Output returns the output
func (t *DiffImpl) DiffOutput() string {
- return t.DiffOptions.Output
+ return t.Output
}
// IncludeTests returns the include tests
@@ -199,3 +200,7 @@ func (t *DiffImpl) PostRendererArgs() []string {
func (t *DiffImpl) SuppressOutputLineRegex() []string {
return t.DiffOptions.SuppressOutputLineRegex
}
+
+func (t *DiffImpl) SkipSchemaValidation() bool {
+ return t.DiffOptions.SkipSchemaValidation
+}
diff --git a/pkg/config/global.go b/pkg/config/global.go
index 23066711..fe906195 100644
--- a/pkg/config/global.go
+++ b/pkg/config/global.go
@@ -32,6 +32,8 @@ type GlobalOptions struct {
StateValuesFile []string
// SkipDeps is true if the running "helm repo update" and "helm dependency build" should be skipped
SkipDeps bool
+ // SkipRefresh is true if the running "helm repo update" should be skipped
+ SkipRefresh bool
// StripArgsValuesOnExitError is true if the ARGS output on exit error should be suppressed
StripArgsValuesOnExitError bool
// DisableForceUpdate is true if force updating repos is not desirable when executing "helm repo add"
@@ -131,7 +133,7 @@ func (g *GlobalImpl) Chart() string {
// FileOrDir returns the path to the Helmfile.
func (g *GlobalImpl) FileOrDir() string {
- file := g.GlobalOptions.File
+ file := g.File
if file == "" {
file = os.Getenv(envvar.FilePath)
}
@@ -141,7 +143,7 @@ func (g *GlobalImpl) FileOrDir() string {
// Selectors returns the selectors to use.
func (g *GlobalImpl) Selectors() []string {
- return g.GlobalOptions.Selector
+ return g.Selector
}
// StateValuesSet returns the set
@@ -156,12 +158,12 @@ func (g *GlobalImpl) RawStateValuesSet() []string {
// RawStateValuesSetString returns the set
func (g *GlobalImpl) RawStateValuesSetString() []string {
- return g.GlobalOptions.StateValuesSetString
+ return g.StateValuesSetString
}
// StateValuesFiles returns the state values files
func (g *GlobalImpl) StateValuesFiles() []string {
- return g.GlobalOptions.StateValuesFile
+ return g.StateValuesFile
}
// EnableLiveOutput return when to pipe the stdout and stderr from Helm live to the helmfile stdout
@@ -174,6 +176,11 @@ func (g *GlobalImpl) SkipDeps() bool {
return g.GlobalOptions.SkipDeps
}
+// SkipRefresh return if running "helm repo update"
+func (g *GlobalImpl) SkipRefresh() bool {
+ return g.GlobalOptions.SkipRefresh
+}
+
// StripArgsValuesOnExitError return if the ARGS output on exit error should be suppressed
func (g *GlobalImpl) StripArgsValuesOnExitError() bool {
return g.GlobalOptions.StripArgsValuesOnExitError
@@ -186,7 +193,7 @@ func (g *GlobalImpl) DisableForceUpdate() bool {
// Logger returns the logger
func (g *GlobalImpl) Logger() *zap.SugaredLogger {
- return g.GlobalOptions.logger
+ return g.logger
}
func (g *GlobalImpl) Color() bool {
@@ -219,8 +226,8 @@ func (g *GlobalImpl) Env() string {
var env string
switch {
- case g.GlobalOptions.Environment != "":
- env = g.GlobalOptions.Environment
+ case g.Environment != "":
+ env = g.Environment
case os.Getenv("HELMFILE_ENVIRONMENT") != "":
env = os.Getenv("HELMFILE_ENVIRONMENT")
default:
@@ -239,13 +246,16 @@ func (g *GlobalImpl) ValidateConfig() error {
// Interactive returns the Interactive
func (g *GlobalImpl) Interactive() bool {
- return g.GlobalOptions.Interactive
+ if g.GlobalOptions.Interactive {
+ return true
+ }
+ return os.Getenv(envvar.Interactive) == "true"
}
// Args returns the args to use for helm
func (g *GlobalImpl) Args() string {
args := g.GlobalOptions.Args
- enableHelmDebug := g.GlobalOptions.Debug
+ enableHelmDebug := g.Debug
if enableHelmDebug {
args = fmt.Sprintf("%s %s", args, "--debug")
diff --git a/pkg/config/sync.go b/pkg/config/sync.go
index 7c01598e..71d38034 100644
--- a/pkg/config/sync.go
+++ b/pkg/config/sync.go
@@ -20,6 +20,8 @@ type SyncOptions struct {
SkipCRDs bool
// Wait is the wait flag
Wait bool
+ // WaitRetries is the wait retries flag
+ WaitRetries int
// WaitForJobs is the wait for jobs flag
WaitForJobs bool
// ReuseValues is true if the helm command should reuse the values
@@ -30,12 +32,18 @@ type SyncOptions struct {
PostRenderer string
// Propagate '--post-renderer-args' to helmv3 template and helm install
PostRendererArgs []string
+ // Propagate '--skip-schema-validation' to helmv3 template and helm install
+ SkipSchemaValidation bool
// Cascade '--cascade' to helmv3 delete, available values: background, foreground, or orphan, default: background
Cascade string
// SyncArgs is the list of arguments to pass to the helm upgrade command.
SyncArgs string
// HideNotes is the hide notes flag
HideNotes bool
+ // TakeOwnership is the take ownership flag
+ TakeOwnership bool
+ // SyncReleaseLabels is the sync release labels flag
+ SyncReleaseLabels bool
}
// NewSyncOptions creates a new Apply
@@ -106,6 +114,11 @@ func (t *SyncImpl) Wait() bool {
return t.SyncOptions.Wait
}
+// WaitRetries returns the wait retries
+func (t *SyncImpl) WaitRetries() int {
+ return t.SyncOptions.WaitRetries
+}
+
// WaitForJobs returns the wait for jobs
func (t *SyncImpl) WaitForJobs() bool {
return t.SyncOptions.WaitForJobs
@@ -132,6 +145,11 @@ func (t *SyncImpl) PostRendererArgs() []string {
return t.SyncOptions.PostRendererArgs
}
+// SkipSchemaValidation returns the SkipSchemaValidation.
+func (t *SyncImpl) SkipSchemaValidation() bool {
+ return t.SyncOptions.SkipSchemaValidation
+}
+
// Cascade returns cascade flag
func (t *SyncImpl) Cascade() string {
return t.SyncOptions.Cascade
@@ -142,6 +160,16 @@ func (t *SyncImpl) SyncArgs() string {
return t.SyncOptions.SyncArgs
}
+// HideNotes returns the hide notes
func (t *SyncImpl) HideNotes() bool {
return t.SyncOptions.HideNotes
}
+
+// TakeOwnership returns the take ownership
+func (t *SyncImpl) TakeOwnership() bool {
+ return t.SyncOptions.TakeOwnership
+}
+
+func (t *SyncImpl) SyncReleaseLabels() bool {
+ return t.SyncOptions.SyncReleaseLabels
+}
diff --git a/pkg/config/template.go b/pkg/config/template.go
index 5ef781ea..90c82691 100644
--- a/pkg/config/template.go
+++ b/pkg/config/template.go
@@ -30,12 +30,16 @@ type TemplateOptions struct {
IncludeNeeds bool
// IncludeTransitiveNeeds is the include transitive needs flag
IncludeTransitiveNeeds bool
+ // No-Hooks is the no hooks flag
+ NoHooks bool
// SkipCleanup is the skip cleanup flag
SkipCleanup bool
// Propagate '--post-renderer' to helmv3 template and helm install
PostRenderer string
// Propagate '--post-renderer-args' to helmv3 template and helm install
PostRendererArgs []string
+ // Propagate '--skip-schema-validation' to helmv3 template and helm install
+ SkipSchemaValidation bool
// KubeVersion is the kube-version flag
KubeVersion string
// Propagate '--show-only` to helm template
@@ -71,6 +75,11 @@ func (t *TemplateImpl) IncludeCRDs() bool {
return t.TemplateOptions.IncludeCRDs
}
+// NoHooks returns the no hooks
+func (t *TemplateImpl) NoHooks() bool {
+ return t.TemplateOptions.NoHooks
+}
+
// IncludeNeeds returns the include needs
func (t *TemplateImpl) IncludeNeeds() bool {
return t.TemplateOptions.IncludeNeeds || t.IncludeTransitiveNeeds()
@@ -135,6 +144,11 @@ func (t *TemplateImpl) PostRendererArgs() []string {
return t.TemplateOptions.PostRendererArgs
}
+// SkipSchemaValidation returns the SkipSchemaValidation.
+func (t *TemplateImpl) SkipSchemaValidation() bool {
+ return t.TemplateOptions.SkipSchemaValidation
+}
+
// KubeVersion returns the the KubeVersion.
func (t *TemplateImpl) KubeVersion() string {
return t.TemplateOptions.KubeVersion
diff --git a/pkg/envvar/const.go b/pkg/envvar/const.go
index a40f5d43..0235af17 100644
--- a/pkg/envvar/const.go
+++ b/pkg/envvar/const.go
@@ -6,16 +6,13 @@ const (
// use helm status to check if a release exists before installing it
UseHelmStatusToCheckReleaseExistence = "HELMFILE_USE_HELM_STATUS_TO_CHECK_RELEASE_EXISTENCE"
- // TODO: Remove this function once Helmfile v0.x
- SkipInsecureTemplateFunctions = "HELMFILE_SKIP_INSECURE_TEMPLATE_FUNCTIONS"
-
DisableRunnerUniqueID = "HELMFILE_DISABLE_RUNNER_UNIQUE_ID"
Experimental = "HELMFILE_EXPERIMENTAL" // environment variable for experimental features, expecting "true" lower case
Environment = "HELMFILE_ENVIRONMENT"
FilePath = "HELMFILE_FILE_PATH"
TempDir = "HELMFILE_TEMPDIR"
UpgradeNoticeDisabled = "HELMFILE_UPGRADE_NOTICE_DISABLED"
- V1Mode = "HELMFILE_V1MODE"
GoccyGoYaml = "HELMFILE_GOCCY_GOYAML"
CacheHome = "HELMFILE_CACHE_HOME"
+ Interactive = "HELMFILE_INTERACTIVE"
)
diff --git a/pkg/errors/errors.go b/pkg/errors/errors.go
index 2372e2b0..956233d3 100644
--- a/pkg/errors/errors.go
+++ b/pkg/errors/errors.go
@@ -85,12 +85,12 @@ func HandleExitCoder(err error) {
if exitErr, ok := err.(ExitCoder); ok {
if errMsg := err.Error(); errMsg != "" {
- fmt.Fprintln(ErrWriter, errMsg)
+ _, _ = fmt.Fprintln(ErrWriter, errMsg)
}
OsExiter(exitErr.ExitCode())
return
}
- fmt.Fprintln(ErrWriter, err)
+ _, _ = fmt.Fprintln(ErrWriter, err)
OsExiter(3)
}
diff --git a/pkg/errors/errors_test.go b/pkg/errors/errors_test.go
index f8541d93..d147deb0 100644
--- a/pkg/errors/errors_test.go
+++ b/pkg/errors/errors_test.go
@@ -43,7 +43,7 @@ var (
func expect(t *testing.T, a any, b any) {
_, fn, line, _ := runtime.Caller(1)
- fn = strings.Replace(fn, wd+"/", "", -1)
+ fn = strings.ReplaceAll(fn, wd+"/", "")
require.Equalf(t, a, b, "(%s:%d) Expected %v (type %v) - Got %v (type %v)", fn, line, b, reflect.TypeOf(b), a, reflect.TypeOf(a))
}
diff --git a/pkg/exectest/helm.go b/pkg/exectest/helm.go
index 3b7c405c..9daaf0ec 100644
--- a/pkg/exectest/helm.go
+++ b/pkg/exectest/helm.go
@@ -94,6 +94,8 @@ func (helm *Helm) SetEnableLiveOutput(enableLiveOutput bool) {
}
func (helm *Helm) SetDisableForceUpdate(forceUpdate bool) {
}
+func (helm *Helm) SkipSchemaValidation(skipSchemaValidation bool) {
+}
func (helm *Helm) AddRepo(name, repository, cafile, certfile, keyfile, username, password string, managed string, passCredentials, skipTLSVerify bool) error {
helm.Repo = []string{name, repository, cafile, certfile, keyfile, username, password, managed, fmt.Sprintf("%v", passCredentials), fmt.Sprintf("%v", skipTLSVerify)}
return nil
diff --git a/pkg/filesystem/fs_test.go b/pkg/filesystem/fs_test.go
index 49b3af1d..94219179 100644
--- a/pkg/filesystem/fs_test.go
+++ b/pkg/filesystem/fs_test.go
@@ -7,6 +7,7 @@ import (
"strings"
"testing"
+ "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
@@ -39,69 +40,154 @@ func NewTestFileSystem() FileSystem {
}
func TestFs_resolveSymlinks(t *testing.T) {
+ cases := []struct {
+ name string
+ symlinkPath string
+ expected string
+ expectedErr error
+ }{
+ {
+ name: "existing file symlink",
+ symlinkPath: "../existing_file.txt",
+ expected: "/real/existing_file.txt",
+ expectedErr: nil,
+ },
+ {
+ name: "missing file symlink",
+ symlinkPath: "../missing_file.txt",
+ expected: "",
+ expectedErr: os.ErrExist,
+ },
+ {
+ name: "local existing file symlink",
+ symlinkPath: "./existing_file.txt",
+ expected: "./existing_file.txt",
+ expectedErr: nil,
+ },
+ {
+ name: "absolute existing file symlink",
+ symlinkPath: "/a/b/c/existing_file.txt",
+ expected: "/a/b/c/existing_file.txt",
+ expectedErr: nil,
+ },
+ {
+ name: "current directory existing file symlink",
+ symlinkPath: "existing_file.txt",
+ expected: "existing_file.txt",
+ expectedErr: nil,
+ },
+ }
+
ffs := NewTestFileSystem()
- path, err := ffs.resolveSymlinks("../existing_file.txt")
- require.NoErrorf(t, err, "Expected no error but got %v", err)
- require.Equalf(t, "/real/existing_file.txt", path, "Expected absolute path %s but got %s", "/real/existing_file.txt", path)
- path, err = ffs.resolveSymlinks("../missing_file.txt")
- require.ErrorIsf(t, err, os.ErrExist, "Expected error %v but got %v", os.ErrExist, err)
- require.Equalf(t, "", path, "Expected empty path but got %s", path)
-
- path, err = ffs.resolveSymlinks("./existing_file.txt")
- require.NoErrorf(t, err, "Expected no error but got %v", err)
- require.Equalf(t, "./existing_file.txt", path, "Expected local path %s but got %s", "./existing_file.txt", path)
-
- path, err = ffs.resolveSymlinks("existing_file.txt")
- require.NoErrorf(t, err, "Expected no error but got %v", err)
- require.Equalf(t, "existing_file.txt", path, "Expected local path %s but got %s", "existing_file.txt", path)
-
- path, err = ffs.resolveSymlinks("/a/b/c/existing_file.txt")
-
- require.NoErrorf(t, err, "Expected no error but got %v", err)
- require.Equalf(t, "/a/b/c/existing_file.txt", path, "Expected absolute path %s but got %s", "/a/b/c/existing_file.txt", path)
+ for _, c := range cases {
+ t.Run(c.name, func(t *testing.T) {
+ path, err := ffs.resolveSymlinks(c.symlinkPath)
+ if c.expectedErr != nil {
+ require.ErrorIs(t, err, c.expectedErr)
+ } else {
+ require.NoError(t, err)
+ }
+ assert.Equal(t, c.expected, path)
+ })
+ }
}
func TestFs_fileExistsDefault(t *testing.T) {
+ cases := []struct {
+ name string
+ filePath string
+ expected bool
+ expectedErr error
+ }{
+ {
+ name: "existing file",
+ filePath: "existing_file.txt",
+ expected: true,
+ expectedErr: nil,
+ },
+ {
+ name: "missing file",
+ filePath: "missing_file.txt",
+ expected: false,
+ expectedErr: os.ErrExist,
+ },
+ }
+
ffs := NewTestFileSystem()
- exists, err := ffs.FileExists("existing_file.txt")
- require.NoErrorf(t, err, "Expected no error but got %v", err)
- require.Truef(t, exists, "Expected file %s, not found", "existing_file.txt")
- exists, err = ffs.FileExists("missing_file.txt")
- require.Falsef(t, exists, "Not expected file %s, found", "missing_file.txt")
- require.ErrorIsf(t, err, os.ErrExist, "Expected error %v but got %v", os.ErrExist, err)
-
- dfs := DefaultFileSystem()
- exists, err = dfs.FileExists("-")
- require.NoErrorf(t, err, "Expected no error but got %v", err)
- require.Truef(t, exists, "Expected file %s, not found", "-")
+ for _, c := range cases {
+ t.Run(c.name, func(t *testing.T) {
+ exists, err := ffs.FileExists(c.filePath)
+ if c.expectedErr != nil {
+ require.ErrorIs(t, err, c.expectedErr)
+ } else {
+ require.NoError(t, err)
+ }
+ assert.Equal(t, c.expected, exists)
+ })
+ }
}
func TestFs_fileExistsAtDefault(t *testing.T) {
+ cases := []struct {
+ name string
+ filePath string
+ expected bool
+ }{
+ {
+ name: "existing file",
+ filePath: "existing_file.txt",
+ expected: true,
+ },
+ {
+ name: "missing file",
+ filePath: "missing_file.txt",
+ expected: false,
+ },
+ {
+ name: "existing dir",
+ filePath: "existing_dir",
+ expected: false,
+ },
+ }
+
ffs := NewTestFileSystem()
- exists := ffs.FileExistsAt("existing_file.txt")
- require.Truef(t, exists, "Expected file %s, not found", "existing_file.txt")
-
- exists = ffs.FileExistsAt("missing_file.txt")
- require.Falsef(t, exists, "Not expected file %s, found", "missing_file.txt")
-
- exists = ffs.FileExistsAt("existing_dir")
- require.Falsef(t, exists, "Not expected file %s, found", "existing_dir")
-
- dfs := DefaultFileSystem()
- exists = dfs.FileExistsAt("-")
- require.Truef(t, exists, "Expected file %s, not found", "-")
+ for _, c := range cases {
+ t.Run(c.name, func(t *testing.T) {
+ exists := ffs.FileExistsAt(c.filePath)
+ assert.Equal(t, c.expected, exists)
+ })
+ }
}
func TestFs_directoryExistsDefault(t *testing.T) {
- ffs := NewTestFileSystem()
- exists := ffs.DirectoryExistsAt("existing_dir")
- require.Truef(t, exists, "Expected file %s, not found", "existing_dir")
+ cases := []struct {
+ name string
+ dirPath string
+ expected bool
+ }{
+ {
+ name: "existing dir",
+ dirPath: "existing_dir",
+ expected: true,
+ },
+ {
+ name: "missing dir",
+ dirPath: "missing_dir",
+ expected: false,
+ },
+ }
- exists = ffs.DirectoryExistsAt("missing_dir")
- require.Falsef(t, exists, "Not expected file %s, found", "missing_dir")
+ ffs := NewTestFileSystem()
+
+ for _, c := range cases {
+ t.Run(c.name, func(t *testing.T) {
+ exists := ffs.DirectoryExistsAt(c.dirPath)
+ assert.Equal(t, c.expected, exists)
+ })
+ }
}
func TestFsTeadFile(t *testing.T) {
@@ -122,6 +208,7 @@ func TestFsTeadFile(t *testing.T) {
path: "-",
},
}
+
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
dir := t.TempDir()
@@ -129,9 +216,6 @@ func TestFsTeadFile(t *testing.T) {
dfs := DefaultFileSystem()
tmpfile, err := os.Create(yamlPath)
- if err != nil {
- t.Errorf("create file %s error: %v", yamlPath, err)
- }
require.NoErrorf(t, err, "create file %s error: %v", yamlPath, err)
_, err = tmpfile.Write(c.content)
@@ -156,18 +240,16 @@ func TestFsTeadFile(t *testing.T) {
func TestFs_DefaultBuilder(t *testing.T) {
ffs := DefaultFileSystem()
- if ffs.ReadFile == nil ||
- ffs.ReadDir == nil ||
- ffs.DeleteFile == nil ||
- ffs.FileExists == nil ||
- ffs.Glob == nil ||
- ffs.FileExistsAt == nil ||
- ffs.DirectoryExistsAt == nil ||
- ffs.Stat == nil ||
- ffs.Getwd == nil ||
- ffs.Chdir == nil ||
- ffs.Abs == nil ||
- ffs.EvalSymlinks == nil {
- t.Errorf("Missing functions in DefaultFileSystem")
- }
+ assert.NotNil(t, ffs.ReadFile)
+ assert.NotNil(t, ffs.ReadDir)
+ assert.NotNil(t, ffs.DeleteFile)
+ assert.NotNil(t, ffs.FileExists)
+ assert.NotNil(t, ffs.Glob)
+ assert.NotNil(t, ffs.FileExistsAt)
+ assert.NotNil(t, ffs.DirectoryExistsAt)
+ assert.NotNil(t, ffs.Stat)
+ assert.NotNil(t, ffs.Getwd)
+ assert.NotNil(t, ffs.Chdir)
+ assert.NotNil(t, ffs.Abs)
+ assert.NotNil(t, ffs.EvalSymlinks)
}
diff --git a/pkg/hcllang/hcl_loader_test.go b/pkg/hcllang/hcl_loader_test.go
index 2cce2aee..56fc18b3 100644
--- a/pkg/hcllang/hcl_loader_test.go
+++ b/pkg/hcllang/hcl_loader_test.go
@@ -44,7 +44,7 @@ func TestHCL_localsTraversalsParser(t *testing.T) {
}
if diff := cmp.Diff(expected, actual); diff != "" {
- t.Errorf(diff)
+ t.Error(diff)
}
}
@@ -79,7 +79,7 @@ func TestHCL_localsTraversalsAttrParser(t *testing.T) {
}
if diff := cmp.Diff(expected, actual); diff != "" {
- t.Errorf(diff)
+ t.Error(diff)
}
}
func TestHCL_valuesTraversalsParser(t *testing.T) {
@@ -105,7 +105,7 @@ func TestHCL_valuesTraversalsParser(t *testing.T) {
}
if diff := cmp.Diff(expected, actual); diff != "" {
- t.Errorf(diff)
+ t.Error(diff)
}
}
@@ -137,7 +137,7 @@ func TestHCL_valuesTraversalsAttrParser(t *testing.T) {
}
if diff := cmp.Diff(expected, actual); diff != "" {
- t.Errorf(diff)
+ t.Error(diff)
}
}
@@ -158,6 +158,6 @@ func TestHCL_resultValidate(t *testing.T) {
}
if diff := cmp.Diff(expected, actual); diff != "" {
- t.Errorf(diff)
+ t.Error(diff)
}
}
diff --git a/pkg/helmexec/exec.go b/pkg/helmexec/exec.go
index a980f5dc..a2044470 100644
--- a/pkg/helmexec/exec.go
+++ b/pkg/helmexec/exec.go
@@ -461,7 +461,7 @@ func (helm *execer) TemplateRelease(name string, chart string, flags ...string)
func (helm *execer) DiffRelease(context HelmContext, name, chart, namespace string, suppressDiff bool, flags ...string) error {
diffMsg := fmt.Sprintf("Comparing release=%v, chart=%v, namespace=%v\n", name, redactedURL(chart), namespace)
if context.Writer != nil && !suppressDiff {
- fmt.Fprint(context.Writer, diffMsg)
+ _, _ = fmt.Fprint(context.Writer, diffMsg)
} else {
helm.logger.Info(diffMsg)
}
@@ -519,8 +519,8 @@ func (helm *execer) ChartPull(chart string, path string, flags ...string) error
if helmVersionConstraint.Check(helm.version) {
// in the 3.7.0 version, the chart pull has been replaced with helm pull
// https://github.com/helm/helm/releases/tag/v3.7.0
- ociChartURL, ociChartTag := resolveOciChart(chart)
- helmArgs = []string{"pull", ociChartURL, "--version", ociChartTag, "--destination", path, "--untar"}
+ ociChartURL, _ := resolveOciChart(chart)
+ helmArgs = []string{"pull", ociChartURL, "--destination", path, "--untar"}
helmArgs = append(helmArgs, flags...)
} else {
helmArgs = []string{"chart", "pull", chart}
@@ -637,7 +637,7 @@ func (helm *execer) write(w io.Writer, out []byte) {
if w == nil {
w = os.Stdout
}
- fmt.Fprintf(w, "%s\n", out)
+ _, _ = fmt.Fprintf(w, "%s\n", out)
}
}
diff --git a/pkg/helmexec/exec_test.go b/pkg/helmexec/exec_test.go
index 6115462a..b68c3e76 100644
--- a/pkg/helmexec/exec_test.go
+++ b/pkg/helmexec/exec_test.go
@@ -826,20 +826,20 @@ exec: helm --kubeconfig config --kube-context dev chart pull chart
helmVersion: "v3.10.0",
chartName: "repo/helm-charts:0.14.0",
chartPath: "path1",
- chartFlags: []string{"--untardir", "/tmp/dir"},
+ chartFlags: []string{"--untardir", "/tmp/dir", "--version", "0.14.0"},
listResult: `Pulling repo/helm-charts:0.14.0
-exec: helm --kubeconfig config --kube-context dev pull oci://repo/helm-charts --version 0.14.0 --destination path1 --untar --untardir /tmp/dir
+exec: helm --kubeconfig config --kube-context dev pull oci://repo/helm-charts --destination path1 --untar --untardir /tmp/dir --version 0.14.0
`,
},
{
name: "more then v3.7.0 with rc",
helmBin: "helm",
helmVersion: "v3.14.0-rc.1+g69dcc92",
- chartName: "repo/helm-charts:0.14.0",
+ chartName: "repo/helm-charts",
chartPath: "path1",
- chartFlags: []string{"--untardir", "/tmp/dir"},
- listResult: `Pulling repo/helm-charts:0.14.0
-exec: helm --kubeconfig config --kube-context dev pull oci://repo/helm-charts --version 0.14.0 --destination path1 --untar --untardir /tmp/dir
+ chartFlags: []string{"--untardir", "/tmp/dir", "--devel"},
+ listResult: `Pulling repo/helm-charts
+exec: helm --kubeconfig config --kube-context dev pull oci://repo/helm-charts --destination path1 --untar --untardir /tmp/dir --devel
`,
},
}
@@ -997,7 +997,7 @@ func Test_GetPluginVersion(t *testing.T) {
v3SecretPluginVersion, err := GetPluginVersion("secrets", v3PluginDirPath)
if err != nil {
- t.Errorf(err.Error())
+ t.Error(err.Error())
}
if v3SecretPluginVersion.String() != v3ExpectedVersion {
t.Errorf("secrets v3 plugin version is %v, expected %v", v3SecretPluginVersion.String(), v3ExpectedVersion)
@@ -1005,7 +1005,7 @@ func Test_GetPluginVersion(t *testing.T) {
v4SecretPluginVersion, err := GetPluginVersion("secrets", v4PluginDirPath)
if err != nil {
- t.Errorf(err.Error())
+ t.Error(err.Error())
}
if v4SecretPluginVersion.String() != v4ExpectedVersion {
t.Errorf("secrets v4 plugin version is %v, expected %v", v4SecretPluginVersion.String(), v4ExpectedVersion)
diff --git a/pkg/helmexec/runner.go b/pkg/helmexec/runner.go
index c1669f39..1456caf9 100644
--- a/pkg/helmexec/runner.go
+++ b/pkg/helmexec/runner.go
@@ -146,7 +146,7 @@ func LiveOutput(ctx context.Context, c *exec.Cmd, stripArgsValuesOnExitError boo
}
line = strings.TrimSuffix(line, "\n")
- fmt.Fprintln(stdout, line)
+ _, _ = fmt.Fprintln(stdout, line)
}
}()
diff --git a/pkg/maputil/maputil.go b/pkg/maputil/maputil.go
index 8df924ee..e5cf925b 100644
--- a/pkg/maputil/maputil.go
+++ b/pkg/maputil/maputil.go
@@ -19,7 +19,7 @@ func CastKeysToStrings(s any) (map[string]any, error) {
return nil, fmt.Errorf("unexpected type of key in map: expected string, got %T: value=%v, map=%v", typedK, typedK, src)
}
- castedV, err := recursivelyStringifyMapKey(v)
+ castedV, err := RecursivelyStringifyMapKey(v)
if err != nil {
return nil, err
}
@@ -28,7 +28,7 @@ func CastKeysToStrings(s any) (map[string]any, error) {
}
case map[string]any:
for k, v := range src {
- castedV, err := recursivelyStringifyMapKey(v)
+ castedV, err := RecursivelyStringifyMapKey(v)
if err != nil {
return nil, err
}
@@ -39,7 +39,7 @@ func CastKeysToStrings(s any) (map[string]any, error) {
return new, nil
}
-func recursivelyStringifyMapKey(v any) (any, error) {
+func RecursivelyStringifyMapKey(v any) (any, error) {
var castedV any
switch typedV := v.(type) {
case map[any]any, map[string]any:
@@ -51,7 +51,7 @@ func recursivelyStringifyMapKey(v any) (any, error) {
case []any:
a := []any{}
for i := range typedV {
- res, err := recursivelyStringifyMapKey(typedV[i])
+ res, err := RecursivelyStringifyMapKey(typedV[i])
if err != nil {
return nil, err
}
@@ -231,6 +231,9 @@ func MergeMaps(a, b map[string]interface{}) map[string]interface{} {
out[k] = v
}
for k, v := range b {
+ if v == nil {
+ continue
+ }
if v, ok := v.(map[string]interface{}); ok {
if bv, ok := out[k]; ok {
if bv, ok := bv.(map[string]interface{}); ok {
diff --git a/pkg/maputil/maputil_test.go b/pkg/maputil/maputil_test.go
index 837c5b4e..74bd9b0a 100644
--- a/pkg/maputil/maputil_test.go
+++ b/pkg/maputil/maputil_test.go
@@ -215,6 +215,10 @@ func TestMapUtil_MergeMaps(t *testing.T) {
"app1": 3,
},
}
+ map5 := map[string]interface{}{
+ "logLevel": "error",
+ "replicaCount": nil,
+ }
testMap := MergeMaps(map2, map4)
equal := reflect.DeepEqual(testMap, map4)
@@ -247,4 +251,17 @@ func TestMapUtil_MergeMaps(t *testing.T) {
if !equal {
t.Errorf("Expected a map with different keys to merge properly with another map. Expected: %v, got %v", expectedMap, testMap)
}
+
+ testMap = MergeMaps(map3, map5)
+ expectedMap = map[string]interface{}{
+ "logLevel": "error",
+ "replicaCount": map[string]any{
+ "app1": 3,
+ "awesome": 4,
+ },
+ }
+ equal = reflect.DeepEqual(testMap, expectedMap)
+ if !equal {
+ t.Errorf("Expected a map with empty value not to overwrite another map's value. Expected: %v, got %v", expectedMap, testMap)
+ }
}
diff --git a/pkg/policy/checker.go b/pkg/policy/checker.go
index eea0a0cd..a609b8fa 100644
--- a/pkg/policy/checker.go
+++ b/pkg/policy/checker.go
@@ -8,12 +8,11 @@ import (
"regexp"
"slices"
"strings"
-
- "github.com/helmfile/helmfile/pkg/runtime"
+ "unicode"
)
var (
- EnvironmentsAndReleasesWithinSameYamlPartErr = errors.New("environments and releases cannot be defined within the same YAML part. Use --- to extract the environments into a dedicated part")
+ ErrEnvironmentsAndReleasesWithinSameYamlPart = errors.New("environments and releases cannot be defined within the same YAML part. Use --- to extract the environments into a dedicated part")
topConfigKeysRegex = regexp.MustCompile(`^[a-zA-Z]+:`)
separatorRegex = regexp.MustCompile(`^--- *$`)
topkeysPriority = map[string]int{
@@ -50,7 +49,7 @@ func forbidEnvironmentsWithReleases(filePath string, content []byte) (bool, erro
}
for i := 0; i < len(result)-1; i++ {
if result[i] != "---" && result[i+1] != "---" {
- return runtime.V1Mode, EnvironmentsAndReleasesWithinSameYamlPartErr
+ return true, ErrEnvironmentsAndReleasesWithinSameYamlPart
}
}
return false, nil
@@ -83,13 +82,15 @@ func TopKeys(helmfileContent []byte, hasSeparator bool) []string {
clines := bytes.Split(helmfileContent, []byte("\n"))
for _, line := range clines {
- lineStr := strings.TrimSpace(string(line))
+ lineStr := strings.TrimRightFunc(string(line), unicode.IsSpace)
if lineStr == "" {
continue // Skip empty lines
}
if hasSeparator && separatorRegex.MatchString(lineStr) {
topKeys = append(topKeys, lineStr)
- } else if topConfigKeysRegex.MatchString(lineStr) {
+ }
+
+ if topConfigKeysRegex.MatchString(lineStr) {
topKey := strings.SplitN(lineStr, ":", 2)[0]
topKeys = append(topKeys, topKey)
}
@@ -120,7 +121,7 @@ func TopConfigKeysVerifier(filePath string, helmfileContent []byte) (bool, error
preKey := orderKeys[i-1]
currentKey := orderKeys[i]
if topkeysPriority[preKey] > topkeysPriority[currentKey] {
- return runtime.V1Mode, fmt.Errorf("top-level config key %s must be defined before %s in %s", currentKey, preKey, filePath)
+ return true, fmt.Errorf("top-level config key %s must be defined before %s in %s", currentKey, preKey, filePath)
}
}
return false, nil
diff --git a/pkg/policy/checker_test.go b/pkg/policy/checker_test.go
index b867b4ad..b7cd667f 100644
--- a/pkg/policy/checker_test.go
+++ b/pkg/policy/checker_test.go
@@ -4,15 +4,12 @@ import (
"testing"
"github.com/stretchr/testify/require"
-
- "github.com/helmfile/helmfile/pkg/runtime"
)
func TestForbidEnvironmentsWithReleases(t *testing.T) {
testCases := []struct {
name string
filePath string
- v1mode bool
content []byte
expectedErr bool
isStrict bool
@@ -21,7 +18,6 @@ func TestForbidEnvironmentsWithReleases(t *testing.T) {
name: "no error when only releases",
filePath: "helmfile.yaml",
content: []byte("releases:\n"),
- v1mode: false,
expectedErr: false,
isStrict: false,
},
@@ -29,7 +25,6 @@ func TestForbidEnvironmentsWithReleases(t *testing.T) {
name: "no error when only environments",
filePath: "helmfile.yaml",
content: []byte("environments:\n"),
- v1mode: false,
expectedErr: false,
isStrict: false,
},
@@ -37,7 +32,6 @@ func TestForbidEnvironmentsWithReleases(t *testing.T) {
name: "no error when has --- between releases and environments",
filePath: "helmfile.yaml",
content: []byte("environments:\n---\nreleases:\n"),
- v1mode: false,
expectedErr: false,
isStrict: false,
},
@@ -45,7 +39,6 @@ func TestForbidEnvironmentsWithReleases(t *testing.T) {
name: "no error when has --- between releases and environments, and --- on top of helmfile.yaml.gotmpl",
filePath: "helmfile.yaml",
content: []byte("---\nenvironments:\n---\nreleases:\n"),
- v1mode: false,
expectedErr: false,
isStrict: false,
},
@@ -53,32 +46,17 @@ func TestForbidEnvironmentsWithReleases(t *testing.T) {
name: "error when both releases and environments",
filePath: "helmfile.yaml",
content: []byte("environments:\nreleases:\n"),
- v1mode: false,
- expectedErr: true,
- isStrict: false,
- },
- {
- name: "error when both releases and environments for plain yaml on v1",
- filePath: "helmfile.yaml",
- content: []byte("environments:\nreleases:\n"),
- v1mode: true,
expectedErr: true,
isStrict: true,
},
}
- v1mode := runtime.V1Mode
- t.Cleanup(func() {
- runtime.V1Mode = v1mode
- })
-
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
- runtime.V1Mode = tc.v1mode
isStrict, err := forbidEnvironmentsWithReleases(tc.filePath, tc.content)
require.Equal(t, tc.isStrict, isStrict, "expected isStrict=%v, got=%v", tc.isStrict, isStrict)
if tc.expectedErr {
- require.ErrorIsf(t, err, EnvironmentsAndReleasesWithinSameYamlPartErr, "expected error=%v, got=%v", EnvironmentsAndReleasesWithinSameYamlPartErr, err)
+ require.ErrorIsf(t, err, ErrEnvironmentsAndReleasesWithinSameYamlPart, "expected error=%v, got=%v", ErrEnvironmentsAndReleasesWithinSameYamlPart, err)
} else {
require.NoError(t, err, "expected no error but got error: %v", err)
}
@@ -153,26 +131,31 @@ func TestTopConfigKeysVerifier(t *testing.T) {
name: "error when not correct order 00",
helmfileContent: []byte("releases:\nbases:\n"),
wantErr: true,
+ wantStrict: true,
},
{
name: "error when not correct order 01",
helmfileContent: []byte("releases:\nhelmDefaults:\nbases:\n"),
wantErr: true,
+ wantStrict: true,
},
{
name: "error when not correct order 02",
helmfileContent: []byte("helmDefaults:\nreleases:\nbases:\n"),
wantErr: true,
+ wantStrict: true,
},
{
name: "error when not correct order 03",
helmfileContent: []byte("releases:\nva:\nve:\nbases:\n"),
wantErr: true,
+ wantStrict: true,
},
{
name: "error when not correct order 04",
helmfileContent: []byte("bases:\nreleases:\nenvironments:\n"),
wantErr: true,
+ wantStrict: true,
},
{
name: "no error when only has bases",
@@ -230,6 +213,11 @@ func TestTopKeys(t *testing.T) {
helmfileContent: []byte(""),
want: nil,
},
+ {
+ name: "sub level contains top level key",
+ helmfileContent: []byte("bases:\n releases:\n - name: test\n namespace: test\n"),
+ want: []string{"bases"},
+ },
}
for _, tt := range tests {
diff --git a/pkg/runtime/runtime.go b/pkg/runtime/runtime.go
index e2e407b5..7c1e1d14 100644
--- a/pkg/runtime/runtime.go
+++ b/pkg/runtime/runtime.go
@@ -3,24 +3,15 @@ package runtime
import (
"fmt"
"os"
- "strconv"
"github.com/helmfile/helmfile/pkg/envvar"
)
-// V1Mode is false by default for Helmfile v0.x and
-// true by default for Helmfile v1.x
var (
- V1Mode bool
-
// GoccyGoYaml is set to true in order to let Helmfile use
// goccy/go-yaml instead of gopkg.in/yaml.v2.
// It's false by default in Helmfile v0.x and true by default for Helmfile v1.x.
GoccyGoYaml bool
-
- // We set this via ldflags at build-time so that we can use the
- // value specified at the build time as the runtime default.
- v1Mode string
)
func Info() string {
@@ -29,22 +20,10 @@ func Info() string {
yamlLib = "goccy/go-yaml"
}
- return fmt.Sprintf("V1 mode = %v\nYAML library = %v", V1Mode, yamlLib)
+ return fmt.Sprintf("YAML library = %v", yamlLib)
}
func init() {
- // You can toggle the V1 mode at runtime via an envvar:
- // - Helmfile v1.x behaves like v0.x by running it with HELMFILE_V1MODE=false
- // - Helmfile v0.x behaves like v1.x by with HELMFILE_V1MODE=true
- switch os.Getenv(envvar.V1Mode) {
- case "true":
- V1Mode = true
- case "false":
- V1Mode = false
- default:
- V1Mode, _ = strconv.ParseBool(v1Mode)
- }
-
// You can switch the YAML library at runtime via an envvar:
switch os.Getenv(envvar.GoccyGoYaml) {
case "true":
@@ -52,6 +31,6 @@ func init() {
case "false":
GoccyGoYaml = false
default:
- GoccyGoYaml = V1Mode
+ GoccyGoYaml = true
}
}
diff --git a/pkg/state/create.go b/pkg/state/create.go
index c08086d4..b175faf9 100644
--- a/pkg/state/create.go
+++ b/pkg/state/create.go
@@ -4,6 +4,7 @@ import (
"errors"
"fmt"
"io"
+ "path/filepath"
"slices"
"strings"
@@ -109,6 +110,9 @@ func (c *StateCreator) Parse(content []byte, baseDir, file string) (*HelmState,
if err == io.EOF {
break
} else if err != nil {
+ if filepath.Ext(file) != ".gotmpl" {
+ return nil, &StateLoadError{fmt.Sprintf("failed to read %s: reading document at index %d. Started seeing this since Helmfile v1? Add the .gotmpl file extension", file, i), err}
+ }
return nil, &StateLoadError{fmt.Sprintf("failed to read %s: reading document at index %d", file, i), err}
}
@@ -117,20 +121,6 @@ func (c *StateCreator) Parse(content []byte, baseDir, file string) (*HelmState,
}
}
- // TODO: Remove this function once Helmfile v0.x
- if len(state.DeprecatedReleases) > 0 {
- if len(state.Releases) > 0 {
- return nil, fmt.Errorf("failed to parse %s: you can't specify both `charts` and `releases` sections", file)
- }
- state.Releases = state.DeprecatedReleases
- state.DeprecatedReleases = []ReleaseSpec{}
- }
-
- // TODO: Remove this function once Helmfile v0.x
- if state.DeprecatedContext != "" && state.HelmDefaults.KubeContext == "" {
- state.HelmDefaults.KubeContext = state.DeprecatedContext
- }
-
if c.overrideHelmBinary != "" && c.overrideHelmBinary != DefaultHelmBinary {
state.DefaultHelmBinary = c.overrideHelmBinary
} else if state.DefaultHelmBinary == "" {
@@ -278,7 +268,11 @@ func (c *StateCreator) loadEnvValues(st *HelmState, name string, failOnMissingEn
valuesFiles = append(valuesFiles, f)
}
envValuesEntries := append(valuesFiles, envSpec.Values...)
- valuesVals, err = st.loadValuesEntries(envSpec.MissingFileHandler, envValuesEntries, c.remote, ctxEnv, name)
+ loadValuesEntriesEnv, err := ctxEnv.Merge(overrode)
+ if err != nil {
+ return nil, err
+ }
+ valuesVals, err = st.loadValuesEntries(envSpec.MissingFileHandler, envValuesEntries, c.remote, loadValuesEntriesEnv, name)
if err != nil {
return nil, err
}
diff --git a/pkg/state/create_test.go b/pkg/state/create_test.go
index 46b1e072..4cc282be 100644
--- a/pkg/state/create_test.go
+++ b/pkg/state/create_test.go
@@ -280,26 +280,6 @@ func TestReadFromYaml_StrictUnmarshalling(t *testing.T) {
}
}
-// TODO: Remove this function once Helmfile v0.x
-func TestReadFromYaml_DeprecatedReleaseReferences(t *testing.T) {
- yamlFile := "example/path/to/yaml/file"
- yamlContent := []byte(`charts:
-- name: myrelease
- chart: mychart
-`)
- state, err := createFromYaml(yamlContent, yamlFile, DefaultEnv, logger)
- if err != nil {
- t.Errorf("unxpected error: %v", err)
- }
-
- if state.Releases[0].Name != "myrelease" {
- t.Errorf("unexpected release name: expected=myrelease actual=%s", state.Releases[0].Name)
- }
- if state.Releases[0].Chart != "mychart" {
- t.Errorf("unexpected chart name: expected=mychart actual=%s", state.Releases[0].Chart)
- }
-}
-
func TestReadFromYaml_ConflictingReleasesConfig(t *testing.T) {
yamlFile := "example/path/to/yaml/file"
yamlContent := []byte(`charts:
diff --git a/pkg/state/envvals_loader.go b/pkg/state/envvals_loader.go
index b0101f34..731cc70d 100644
--- a/pkg/state/envvals_loader.go
+++ b/pkg/state/envvals_loader.go
@@ -65,7 +65,7 @@ func (ld *EnvironmentValuesLoader) LoadEnvironmentValues(missingFileHandler *str
if strings.HasSuffix(f, ".hcl") {
hclLoader.AddFile(f)
} else {
- tmplData := NewEnvironmentTemplateData(env, "", map[string]any{})
+ tmplData := NewEnvironmentTemplateData(env, "", env.Values)
r := tmpl.NewFileRenderer(ld.fs, filepath.Dir(f), tmplData)
bytes, err := r.RenderToBytes(f)
if err != nil {
diff --git a/pkg/state/envvals_loader_test.go b/pkg/state/envvals_loader_test.go
index b0f37719..764ada78 100644
--- a/pkg/state/envvals_loader_test.go
+++ b/pkg/state/envvals_loader_test.go
@@ -39,7 +39,7 @@ func TestEnvValsLoad_SingleValuesFile(t *testing.T) {
}
if diff := cmp.Diff(expected, actual); diff != "" {
- t.Errorf(diff)
+ t.Error(diff)
}
}
@@ -93,7 +93,7 @@ func TestEnvValsLoad_EnvironmentNameFile(t *testing.T) {
}
if diff := cmp.Diff(tt.expected, actual); diff != "" {
- t.Errorf(diff)
+ t.Error(diff)
}
})
}
@@ -113,7 +113,7 @@ func TestEnvValsLoad_SingleValuesFileRemote(t *testing.T) {
}
if diff := cmp.Diff(expected, actual); diff != "" {
- t.Errorf(diff)
+ t.Error(diff)
}
}
@@ -135,7 +135,7 @@ func TestEnvValsLoad_OverwriteNilValue_Issue1150(t *testing.T) {
}
if diff := cmp.Diff(expected, actual); diff != "" {
- t.Errorf(diff)
+ t.Error(diff)
}
}
@@ -158,7 +158,7 @@ func TestEnvValsLoad_OverwriteWithNilValue_Issue1154(t *testing.T) {
}
if diff := cmp.Diff(expected, actual); diff != "" {
- t.Errorf(diff)
+ t.Error(diff)
}
}
@@ -184,7 +184,7 @@ func TestEnvValsLoad_OverwriteEmptyValue_Issue1168(t *testing.T) {
}
if diff := cmp.Diff(expected, actual); diff != "" {
- t.Errorf(diff)
+ t.Error(diff)
}
}
@@ -225,6 +225,25 @@ func TestEnvValsLoad_MultiHCL(t *testing.T) {
}
if diff := cmp.Diff(expected, actual); diff != "" {
- t.Errorf(diff)
+ t.Error(diff)
+ }
+}
+
+func TestEnvValsLoad_EnvironmentValues(t *testing.T) {
+ l := newLoader()
+ env := environment.New("test")
+ env.Values["foo"] = "bar"
+
+ actual, err := l.LoadEnvironmentValues(nil, []any{"testdata/values.9.yaml.gotmpl"}, env, "")
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ expected := map[string]any{
+ "foo": "bar",
+ }
+
+ if diff := cmp.Diff(expected, actual); diff != "" {
+ t.Error(diff)
}
}
diff --git a/pkg/state/helmx.go b/pkg/state/helmx.go
index b1b2bb8d..00d29cac 100644
--- a/pkg/state/helmx.go
+++ b/pkg/state/helmx.go
@@ -4,8 +4,13 @@ import (
"fmt"
"os"
"path/filepath"
+ "slices"
+ "sort"
+ "strconv"
+ "strings"
"github.com/helmfile/chartify"
+ "helm.sh/helm/v3/pkg/storage/driver"
"github.com/helmfile/helmfile/pkg/helmexec"
"github.com/helmfile/helmfile/pkg/remote"
@@ -25,6 +30,39 @@ func (st *HelmState) appendHelmXFlags(flags []string, release *ReleaseSpec) []st
return flags
}
+func formatLabels(labels map[string]string) string {
+ var labelsList, keys []string
+ for k := range labels {
+ if k == "" || slices.Contains(driver.GetSystemLabels(), k) {
+ continue
+ }
+
+ keys = append(keys, k)
+ }
+ sort.Strings(keys)
+
+ if len(keys) == 0 {
+ return ""
+ }
+
+ for _, k := range keys {
+ val := labels[k]
+ labelsList = append(labelsList, fmt.Sprintf("%s=%s", k, val))
+ }
+ return strings.Join(labelsList, ",")
+}
+
+// append labels flags to helm flags, starting from helm v3.13.0
+func (st *HelmState) appendLabelsFlags(flags []string, helm helmexec.Interface, release *ReleaseSpec, syncReleaseLabels bool) []string {
+ if helm.IsVersionAtLeast("3.13.0") && (syncReleaseLabels || release.SyncReleaseLabels) {
+ labels := formatLabels(release.Labels)
+ if labels != "" {
+ flags = append(flags, "--labels", labels)
+ }
+ }
+ return flags
+}
+
// append post-renderer flags to helm flags
func (st *HelmState) appendPostRenderFlags(flags []string, release *ReleaseSpec, postRenderer string) []string {
switch {
@@ -58,6 +96,22 @@ func (st *HelmState) appendPostRenderArgsFlags(flags []string, release *ReleaseS
return flags
}
+// append skip-schema-validation flags to helm flags
+func (st *HelmState) appendSkipSchemaValidationFlags(flags []string, release *ReleaseSpec, skipSchemaValidation bool) []string {
+ switch {
+ // Check if SkipSchemaValidation is true in the release spec.
+ case release.SkipSchemaValidation != nil && *release.SkipSchemaValidation:
+ flags = append(flags, "--skip-schema-validation")
+ // Check if skipSchemaValidation argument is true.
+ case skipSchemaValidation:
+ flags = append(flags, "--skip-schema-validation")
+ // Check if SkipSchemaValidation is true in HelmDefaults.
+ case st.HelmDefaults.SkipSchemaValidation != nil && *st.HelmDefaults.SkipSchemaValidation:
+ flags = append(flags, "--skip-schema-validation")
+ }
+ return flags
+}
+
// append suppress-output-line-regex flags to helm diff flags
func (st *HelmState) appendSuppressOutputLineRegexFlags(flags []string, release *ReleaseSpec, suppressOutputLineRegex []string) []string {
suppressOutputLineRegexFlags := []string{}
@@ -89,15 +143,31 @@ func (st *HelmState) appendWaitForJobsFlags(flags []string, release *ReleaseSpec
return flags
}
-func (st *HelmState) appendWaitFlags(flags []string, release *ReleaseSpec, ops *SyncOpts) []string {
+func (st *HelmState) appendWaitFlags(flags []string, helm helmexec.Interface, release *ReleaseSpec, ops *SyncOpts) []string {
+ var hasWait bool
switch {
case release.Wait != nil && *release.Wait:
+ hasWait = true
flags = append(flags, "--wait")
case ops != nil && ops.Wait:
+ hasWait = true
flags = append(flags, "--wait")
case release.Wait == nil && st.HelmDefaults.Wait:
+ hasWait = true
flags = append(flags, "--wait")
}
+ // see https://github.com/helm/helm/releases/tag/v3.15.0
+ // https://github.com/helm/helm/commit/fc74964
+ if hasWait && helm.IsVersionAtLeast("3.15.0") {
+ switch {
+ case release.WaitRetries != nil && *release.WaitRetries > 0:
+ flags = append(flags, "--wait-retries", strconv.Itoa(*release.WaitRetries))
+ case ops != nil && ops.WaitRetries > 0:
+ flags = append(flags, "--wait-retries", strconv.Itoa(ops.WaitRetries))
+ case release.WaitRetries == nil && st.HelmDefaults.WaitRetries > 0:
+ flags = append(flags, "--wait-retries", strconv.Itoa(st.HelmDefaults.WaitRetries))
+ }
+ }
return flags
}
@@ -132,6 +202,19 @@ func (st *HelmState) appendHideNotesFlags(flags []string, helm helmexec.Interfac
return flags
}
+// append take-ownership flags to helm flags
+func (st *HelmState) appendTakeOwnershipFlags(flags []string, helm helmexec.Interface, ops *SyncOpts) []string {
+ // see https://github.com/helm/helm/releases/tag/v3.17.0
+ if !helm.IsVersionAtLeast("3.17.0") {
+ return flags
+ }
+ switch {
+ case ops.TakeOwnership:
+ flags = append(flags, "--take-ownership")
+ }
+ return flags
+}
+
// append show-only flags to helm flags
func (st *HelmState) appendShowOnlyFlags(flags []string, showOnly []string) []string {
showOnlyFlags := []string{}
diff --git a/pkg/state/helmx_test.go b/pkg/state/helmx_test.go
index fae63bfc..76f4300d 100644
--- a/pkg/state/helmx_test.go
+++ b/pkg/state/helmx_test.go
@@ -76,13 +76,16 @@ func TestAppendWaitFlags(t *testing.T) {
name string
release *ReleaseSpec
syncOpts *SyncOpts
+ helm helmexec.Interface
helmSpec HelmSpec
expected []string
}{
+ // --wait
{
name: "release wait",
release: &ReleaseSpec{Wait: &[]bool{true}[0]},
syncOpts: nil,
+ helm: testutil.NewVersionHelmExec("3.11.0"),
helmSpec: HelmSpec{},
expected: []string{"--wait"},
},
@@ -90,6 +93,7 @@ func TestAppendWaitFlags(t *testing.T) {
name: "cli flags wait",
release: &ReleaseSpec{},
syncOpts: &SyncOpts{Wait: true},
+ helm: testutil.NewVersionHelmExec("3.11.0"),
helmSpec: HelmSpec{},
expected: []string{"--wait"},
},
@@ -97,6 +101,7 @@ func TestAppendWaitFlags(t *testing.T) {
name: "helm defaults wait",
release: &ReleaseSpec{},
syncOpts: nil,
+ helm: testutil.NewVersionHelmExec("3.11.0"),
helmSpec: HelmSpec{Wait: true},
expected: []string{"--wait"},
},
@@ -104,6 +109,7 @@ func TestAppendWaitFlags(t *testing.T) {
name: "release wait false",
release: &ReleaseSpec{Wait: &[]bool{false}[0]},
syncOpts: nil,
+ helm: testutil.NewVersionHelmExec("3.11.0"),
helmSpec: HelmSpec{Wait: true},
expected: []string{},
},
@@ -111,6 +117,7 @@ func TestAppendWaitFlags(t *testing.T) {
name: "cli flags wait false",
release: &ReleaseSpec{},
syncOpts: &SyncOpts{},
+ helm: testutil.NewVersionHelmExec("3.11.0"),
helmSpec: HelmSpec{Wait: true},
expected: []string{"--wait"},
},
@@ -118,16 +125,74 @@ func TestAppendWaitFlags(t *testing.T) {
name: "helm defaults wait false",
release: &ReleaseSpec{},
syncOpts: nil,
+ helm: testutil.NewVersionHelmExec("3.11.0"),
helmSpec: HelmSpec{Wait: false},
expected: []string{},
},
+ // --wait-retries
+ {
+ name: "release wait and retry unsupported",
+ release: &ReleaseSpec{Wait: &[]bool{true}[0], WaitRetries: &[]int{1}[0]},
+ syncOpts: nil,
+ helm: testutil.NewVersionHelmExec("3.11.0"),
+ helmSpec: HelmSpec{},
+ expected: []string{"--wait"},
+ },
+ {
+ name: "release wait and retry supported",
+ release: &ReleaseSpec{Wait: &[]bool{true}[0], WaitRetries: &[]int{1}[0]},
+ syncOpts: nil,
+ helm: testutil.NewVersionHelmExec("3.15.0"),
+ helmSpec: HelmSpec{},
+ expected: []string{"--wait", "--wait-retries", "1"},
+ },
+ {
+ name: "no wait retry",
+ release: &ReleaseSpec{WaitRetries: &[]int{1}[0]},
+ syncOpts: nil,
+ helm: testutil.NewVersionHelmExec("3.15.0"),
+ helmSpec: HelmSpec{},
+ expected: []string{},
+ },
+ {
+ name: "cli flags wait and retry",
+ release: &ReleaseSpec{},
+ syncOpts: &SyncOpts{Wait: true, WaitRetries: 2},
+ helm: testutil.NewVersionHelmExec("3.15.0"),
+ helmSpec: HelmSpec{},
+ expected: []string{"--wait", "--wait-retries", "2"},
+ },
+ {
+ name: "helm defaults wait retry",
+ release: &ReleaseSpec{},
+ syncOpts: nil,
+ helm: testutil.NewVersionHelmExec("3.15.0"),
+ helmSpec: HelmSpec{Wait: true, WaitRetries: 3},
+ expected: []string{"--wait", "--wait-retries", "3"},
+ },
+ {
+ name: "release wait default retries",
+ release: &ReleaseSpec{Wait: &[]bool{true}[0]},
+ syncOpts: nil,
+ helm: testutil.NewVersionHelmExec("3.15.0"),
+ helmSpec: HelmSpec{WaitRetries: 4},
+ expected: []string{"--wait", "--wait-retries", "4"},
+ },
+ {
+ name: "release retries default wait",
+ release: &ReleaseSpec{WaitRetries: &[]int{5}[0]},
+ syncOpts: nil,
+ helm: testutil.NewVersionHelmExec("3.15.0"),
+ helmSpec: HelmSpec{Wait: true},
+ expected: []string{"--wait", "--wait-retries", "5"},
+ },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
st := &HelmState{}
st.HelmDefaults = tt.helmSpec
- got := st.appendWaitFlags([]string{}, tt.release, tt.syncOpts)
+ got := st.appendWaitFlags([]string{}, tt.helm, tt.release, tt.syncOpts)
require.Equalf(t, tt.expected, got, "appendWaitFlags() = %v, want %v", got, tt.expected)
})
}
@@ -321,3 +386,99 @@ func TestAppendHideNotesFlags(t *testing.T) {
})
}
}
+
+func TestAppendTakeOwnershipFlags(t *testing.T) {
+ type args struct {
+ flags []string
+ helm helmexec.Interface
+ helmSpec HelmSpec
+ opt *SyncOpts
+ expected []string
+ }
+ tests := []struct {
+ name string
+ args args
+ }{
+ {
+ name: "no take-ownership when helm less than 3.17.0",
+ args: args{
+ flags: []string{},
+ helm: testutil.NewVersionHelmExec("3.16.0"),
+ opt: &SyncOpts{
+ TakeOwnership: true,
+ },
+ expected: []string{},
+ },
+ },
+ {
+ name: "take-ownership from cmd flag",
+ args: args{
+ flags: []string{},
+ helm: testutil.NewVersionHelmExec("3.17.0"),
+ opt: &SyncOpts{
+ TakeOwnership: true,
+ },
+ expected: []string{"--take-ownership"},
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ st := &HelmState{}
+ st.HelmDefaults = tt.args.helmSpec
+ got := st.appendTakeOwnershipFlags(tt.args.flags, tt.args.helm, tt.args.opt)
+ require.Equalf(t, tt.args.expected, got, "appendTakeOwnershipFlags() = %v, want %v", got, tt.args.expected)
+ })
+ }
+}
+
+func TestFormatLabels(t *testing.T) {
+ tests := []struct {
+ name string
+ labels map[string]string
+ want string
+ }{
+ {
+ name: "empty labels",
+ labels: map[string]string{},
+ want: "",
+ },
+ {
+ name: "single label",
+ labels: map[string]string{"foo": "bar"},
+ want: "foo=bar",
+ },
+ {
+ name: "multiple labels",
+ labels: map[string]string{"foo": "bar", "baz": "qux"},
+ want: "baz=qux,foo=bar",
+ },
+ {
+ name: "multiple labels with empty value",
+ labels: map[string]string{"foo": "bar", "baz": "qux", "quux": ""},
+ want: "baz=qux,foo=bar,quux=",
+ },
+ {
+ name: "multiple labels with empty key",
+ labels: map[string]string{"foo": "bar", "baz": "qux", "": "quux"},
+ want: "baz=qux,foo=bar",
+ },
+ {
+ name: "empty label value",
+ labels: map[string]string{"foo": ""},
+ want: "foo=",
+ },
+ {
+ name: "empty label key",
+ labels: map[string]string{"": "bar"},
+ want: "",
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ got := formatLabels(tt.labels)
+ require.Equal(t, tt.want, got, "formatLabels() = %v, want %v", got, tt.want)
+ })
+ }
+}
diff --git a/pkg/state/release.go b/pkg/state/release.go
index 5cedcf91..c1b5c437 100644
--- a/pkg/state/release.go
+++ b/pkg/state/release.go
@@ -90,6 +90,18 @@ func (r ReleaseSpec) ExecuteTemplateExpressions(renderer *tmpl.FileRenderer) (*R
result.Labels[key] = s.String()
}
+ {
+ postRendererArgs := []string{}
+ for _, ts := range result.PostRendererArgs {
+ postRendererArg, err := renderer.RenderTemplateContentToString([]byte(ts))
+ if err != nil {
+ return nil, fmt.Errorf("failed executing template expressions in release \"%s\".postRendererArgs = \"%s\": %v", r.Name, ts, err)
+ }
+ postRendererArgs = append(postRendererArgs, postRendererArg)
+ }
+ result.PostRendererArgs = postRendererArgs
+ }
+
if len(result.ValuesTemplate) > 0 {
for i, t := range result.ValuesTemplate {
switch ts := t.(type) {
diff --git a/pkg/state/selector_test.go b/pkg/state/selector_test.go
index 787a79c3..e955aed4 100644
--- a/pkg/state/selector_test.go
+++ b/pkg/state/selector_test.go
@@ -108,14 +108,14 @@ func TestSelectReleasesWithOverrides(t *testing.T) {
}.MustLoadState(t, "/helmfile.yaml", "default")
for _, tc := range testcases {
+ var err error
state.Selectors = tc.selector
- releases, err := state.GetReleasesWithOverrides()
- state.Releases = releases
-
+ state.Releases, err = state.GetReleasesWithOverrides()
if err != nil {
t.Fatalf("%s %s: %v", tc.selector, tc.subject, err)
}
+ state.Releases = state.GetReleasesWithLabels()
rs, err := state.GetSelectedReleases(false)
if err != nil {
@@ -144,13 +144,13 @@ func TestSelectReleasesWithOverridesWithIncludedTransitives(t *testing.T) {
testcases := []testcase{
{
- subject: "include transitives",
+ subject: "include transitives is false",
selector: []string{"name=serviceA"},
want: []string{"serviceA"},
includeTransitiveNeeds: false,
},
{
- subject: "include transitives",
+ subject: "include transitives is true",
selector: []string{"name=serviceA"},
want: []string{"serviceA", "serviceB", "serviceC"},
includeTransitiveNeeds: true,
@@ -184,13 +184,13 @@ func TestSelectReleasesWithOverridesWithIncludedTransitives(t *testing.T) {
}.MustLoadState(t, "/helmfile.yaml", "default")
for _, tc := range testcases {
+ var err error
state.Selectors = tc.selector
- releases, err := state.GetReleasesWithOverrides()
+ state.Releases, err = state.GetReleasesWithOverrides()
if err != nil {
t.Fatalf("%s %s: %v", tc.selector, tc.subject, err)
}
-
- state.Releases = releases
+ state.Releases = state.GetReleasesWithLabels()
rs, err := state.GetSelectedReleases(tc.includeTransitiveNeeds)
if err != nil {
diff --git a/pkg/state/state.go b/pkg/state/state.go
index 32e6fc9e..8d7b176d 100644
--- a/pkg/state/state.go
+++ b/pkg/state/state.go
@@ -59,10 +59,6 @@ type ReleaseSetSpec struct {
HelmDefaults HelmSpec `yaml:"helmDefaults,omitempty"`
Helmfiles []SubHelmfileSpec `yaml:"helmfiles,omitempty"`
- // TODO: Remove this function once Helmfile v0.x
- DeprecatedContext string `yaml:"context,omitempty"`
- DeprecatedReleases []ReleaseSpec `yaml:"charts,omitempty"`
-
OverrideKubeContext string `yaml:"kubeContext,omitempty"`
OverrideNamespace string `yaml:"namespace,omitempty"`
OverrideChart string `yaml:"chart,omitempty"`
@@ -160,10 +156,14 @@ type HelmSpec struct {
Keyring string `yaml:"keyring,omitempty"`
// EnableDNS, when set to true, enable DNS lookups when rendering templates
EnableDNS bool `yaml:"enableDNS"`
+ // Propagate '--skip-schema-validation' to helmv3 template and helm install
+ SkipSchemaValidation *bool `yaml:"skipSchemaValidation,omitempty"`
// Devel, when set to true, use development versions, too. Equivalent to version '>0.0.0-0'
Devel bool `yaml:"devel"`
// Wait, if set to true, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment are in a ready state before marking the release as successful
Wait bool `yaml:"wait"`
+ // WaitRetries, if set and --wait enabled, will retry any failed check on resource state, except if HTTP status code < 500 is received, subject to the specified number of retries
+ WaitRetries int `yaml:"waitRetries"`
// WaitForJobs, if set and --wait enabled, will wait until all Jobs have been completed before marking the release as successful. It will wait for as long as --timeout
WaitForJobs bool `yaml:"waitForJobs"`
// Timeout is the time in seconds to wait for any individual Kubernetes operation (like Jobs for hooks, and waits on pod/pvc/svc/deployment readiness) (default 300)
@@ -184,6 +184,8 @@ type HelmSpec struct {
// This is relevant only when your release uses a local chart or a directory containing K8s manifests or a Kustomization
// as a Helm chart.
SkipDeps bool `yaml:"skipDeps"`
+ // SkipRefresh disables running `helm dependency up`
+ SkipRefresh bool `yaml:"skipRefresh"`
// on helm upgrade/diff, reuse values currently set in the release and merge them with the ones defined within helmfile
ReuseValues bool `yaml:"reuseValues"`
// Propagate '--post-renderer' to helmv3 template and helm install
@@ -205,6 +207,8 @@ type HelmSpec struct {
DeleteWait bool `yaml:"deleteWait"`
// Timeout is the time in seconds to wait for helmfile delete command (default 300)
DeleteTimeout int `yaml:"deleteTimeout"`
+ // SyncReleaseLabels is true if the release labels should be synced with the helmfile labels
+ SyncReleaseLabels bool `yaml:"syncReleaseLabels"`
}
// RepositorySpec that defines values for a helm repo
@@ -257,6 +261,8 @@ type ReleaseSpec struct {
Devel *bool `yaml:"devel,omitempty"`
// Wait, if set to true, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment are in a ready state before marking the release as successful
Wait *bool `yaml:"wait,omitempty"`
+ // WaitRetries, if set and --wait enabled, will retry any failed check on resource state, except if HTTP status code < 500 is received, subject to the specified number of retries
+ WaitRetries *int `yaml:"waitRetries,omitempty"`
// WaitForJobs, if set and --wait enabled, will wait until all Jobs have been completed before marking the release as successful. It will wait for as long as --timeout
WaitForJobs *bool `yaml:"waitForJobs,omitempty"`
// Timeout is the time in seconds to wait for any individual Kubernetes operation (like Jobs for hooks, and waits on pod/pvc/svc/deployment readiness) (default 300)
@@ -277,6 +283,8 @@ type ReleaseSpec struct {
Condition string `yaml:"condition,omitempty"`
// CreateNamespace, when set to true (default), --create-namespace is passed to helm3 on install (ignored for helm2)
CreateNamespace *bool `yaml:"createNamespace,omitempty"`
+ // ReuseValues, on helm upgrade/diff, reuse values currently set in the release and merge them with the ones defined within helmfile
+ ReuseValues *bool `yaml:"reuseValues,omitempty"`
// DisableOpenAPIValidation is rarely used to bypass OpenAPI validations only that is used for e.g.
// work-around against broken CRs
@@ -304,13 +312,14 @@ type ReleaseSpec struct {
Hooks []event.Hook `yaml:"hooks,omitempty"`
// Name is the name of this release
- Name string `yaml:"name,omitempty"`
- Namespace string `yaml:"namespace,omitempty"`
- Labels map[string]string `yaml:"labels,omitempty"`
- Values []any `yaml:"values,omitempty"`
- Secrets []any `yaml:"secrets,omitempty"`
- SetValues []SetValue `yaml:"set,omitempty"`
- duration time.Duration
+ Name string `yaml:"name,omitempty"`
+ Namespace string `yaml:"namespace,omitempty"`
+ Labels map[string]string `yaml:"labels,omitempty"`
+ Values []any `yaml:"values,omitempty"`
+ Secrets []any `yaml:"secrets,omitempty"`
+ SetValues []SetValue `yaml:"set,omitempty"`
+ SetStringValues []SetValue `yaml:"setString,omitempty"`
+ duration time.Duration
ValuesTemplate []any `yaml:"valuesTemplate,omitempty"`
SetValuesTemplate []SetValue `yaml:"setTemplate,omitempty"`
@@ -374,9 +383,15 @@ type ReleaseSpec struct {
// as a Helm chart.
SkipDeps *bool `yaml:"skipDeps,omitempty"`
+ // SkipRefresh disables running `helm dependency up`
+ SkipRefresh *bool `yaml:"skipRefresh,omitempty"`
+
// Propagate '--post-renderer' to helmv3 template and helm install
PostRenderer *string `yaml:"postRenderer,omitempty"`
+ // Propagate '--skip-schema-validation' to helmv3 template and helm install
+ SkipSchemaValidation *bool `yaml:"skipSchemaValidation,omitempty"`
+
// Propagate '--post-renderer-args' to helmv3 template and helm install
PostRendererArgs []string `yaml:"postRendererArgs,omitempty"`
@@ -396,6 +411,8 @@ type ReleaseSpec struct {
DeleteWait *bool `yaml:"deleteWait,omitempty"`
// Timeout is the time in seconds to wait for helmfile delete command (default 300)
DeleteTimeout *int `yaml:"deleteTimeout,omitempty"`
+ // SyncReleaseLabels is true if the release labels should be synced with the helmfile labels
+ SyncReleaseLabels bool `yaml:"syncReleaseLabels"`
}
func (r *Inherits) UnmarshalYAML(unmarshal func(any) error) error {
@@ -439,9 +456,10 @@ type SetValue struct {
// AffectedReleases hold the list of released that where updated, deleted, or in error
type AffectedReleases struct {
- Upgraded []*ReleaseSpec
- Deleted []*ReleaseSpec
- Failed []*ReleaseSpec
+ Upgraded []*ReleaseSpec
+ Deleted []*ReleaseSpec
+ Failed []*ReleaseSpec
+ DeleteFailed []*ReleaseSpec
}
// DefaultEnv is the default environment to use for helm commands
@@ -472,7 +490,17 @@ func (st *HelmState) reformat(spec *ReleaseSpec) []string {
var needs []string
releaseInstalledInfo := make(map[string]bool)
for _, r := range st.OrginReleases {
- releaseInstalledInfo[r.Name] = r.Desired()
+ kubecontext := r.KubeContext
+ namespace := r.Namespace
+
+ if st.OverrideKubeContext != "" {
+ kubecontext = st.OverrideKubeContext
+ }
+ if st.OverrideNamespace != "" {
+ namespace = st.OverrideNamespace
+ }
+
+ releaseInstalledInfo[fmt.Sprintf("%s/%s/%s", kubecontext, namespace, r.Name)] = r.Desired()
}
// Since the representation differs between needs and id,
@@ -485,9 +513,6 @@ func (st *HelmState) reformat(spec *ReleaseSpec) []string {
components := strings.Split(n, "/")
name = components[len(components)-1]
- if !releaseInstalledInfo[name] {
- st.logger.Warnf("WARNING: %s", fmt.Sprintf("release %s needs %s, but %s is not installed due to installed: false. Either mark %s as installed or remove %s from %s's needs", spec.Name, name, name, name, name, spec.Name))
- }
if len(components) > 1 {
ns = components[len(components)-2]
@@ -503,6 +528,10 @@ func (st *HelmState) reformat(spec *ReleaseSpec) []string {
kubecontext = spec.KubeContext
}
+ if spec.Desired() && !releaseInstalledInfo[fmt.Sprintf("%s/%s/%s", kubecontext, ns, name)] {
+ st.logger.Warnf("WARNING: %s", fmt.Sprintf("release %s needs %s, but %s is not installed due to installed: false. Either mark %s as installed or remove %s from %s's needs", spec.Name, name, name, name, name, spec.Name))
+ }
+
var componentsAfterOverride []string
if kubecontext != "" {
@@ -571,7 +600,7 @@ func (st *HelmState) SyncRepos(helm RepoUpdater, shouldSkip map[string]bool) ([]
func gatherUsernamePassword(repoName string, username string, password string) (string, string) {
var user, pass string
- replacedRepoName := strings.ToUpper(strings.Replace(repoName, "-", "_", -1))
+ replacedRepoName := strings.ToUpper(strings.ReplaceAll(repoName, "-", "_"))
if username != "" {
user = username
} else if u := os.Getenv(fmt.Sprintf("%s_USERNAME", replacedRepoName)); u != "" {
@@ -679,7 +708,7 @@ func (st *HelmState) prepareSyncReleases(helm helmexec.Interface, additionalValu
flags = append(flags, "--skip-crds")
}
- flags = st.appendValuesControlModeFlag(flags, opts.ReuseValues, opts.ResetValues)
+ flags = st.appendValuesControlModeFlag(flags, opts.ReuseValues, opts.ResetValues, release)
if len(errs) > 0 {
results <- syncPrepareResult{errors: errs, files: files}
@@ -764,17 +793,21 @@ func (st *HelmState) DetectReleasesToBeDeleted(helm helmexec.Interface, releases
}
type SyncOpts struct {
- Set []string
- SkipCleanup bool
- SkipCRDs bool
- Wait bool
- WaitForJobs bool
- ReuseValues bool
- ResetValues bool
- PostRenderer string
- PostRendererArgs []string
- SyncArgs string
- HideNotes bool
+ Set []string
+ SkipCleanup bool
+ SkipCRDs bool
+ Wait bool
+ WaitRetries int
+ WaitForJobs bool
+ SyncReleaseLabels bool
+ ReuseValues bool
+ ResetValues bool
+ PostRenderer string
+ SkipSchemaValidation bool
+ PostRendererArgs []string
+ SyncArgs string
+ HideNotes bool
+ TakeOwnership bool
}
type SyncOpt interface{ Apply(*SyncOpts) }
@@ -873,13 +906,13 @@ func (st *HelmState) DeleteReleasesForSync(affectedReleases *AffectedReleases, h
m.Lock()
start := time.Now()
if _, err := st.triggerReleaseEvent("preuninstall", nil, release, "sync"); err != nil {
- affectedReleases.Failed = append(affectedReleases.Failed, release)
+ affectedReleases.DeleteFailed = append(affectedReleases.Failed, release)
relErr = newReleaseFailedError(release, err)
} else if err := helm.DeleteRelease(context, release.Name, deletionFlags...); err != nil {
- affectedReleases.Failed = append(affectedReleases.Failed, release)
+ affectedReleases.DeleteFailed = append(affectedReleases.Failed, release)
relErr = newReleaseFailedError(release, err)
} else if _, err := st.triggerReleaseEvent("postuninstall", nil, release, "sync"); err != nil {
- affectedReleases.Failed = append(affectedReleases.Failed, release)
+ affectedReleases.DeleteFailed = append(affectedReleases.Failed, release)
relErr = newReleaseFailedError(release, err)
} else {
affectedReleases.Deleted = append(affectedReleases.Deleted, release)
@@ -1099,6 +1132,7 @@ type ChartPrepareOptions struct {
ForceDownload bool
SkipRepos bool
SkipDeps bool
+ SkipRefresh bool
SkipResolve bool
SkipCleanup bool
// Validate is a helm-3-only option. When it is set to true, it configures chartify to pass --validate to helm-template run by it.
@@ -1106,6 +1140,7 @@ type ChartPrepareOptions struct {
Validate bool
IncludeCRDs *bool
Wait bool
+ WaitRetries int
WaitForJobs bool
OutputDir string
OutputDirTemplate string
@@ -1113,6 +1148,7 @@ type ChartPrepareOptions struct {
Concurrency int
KubeVersion string
Set []string
+ Values []string
// Delete wait
DeleteWait bool
DeleteTimeout int
@@ -1280,6 +1316,10 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre
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
@@ -1347,7 +1387,8 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre
// only fetch chart if it is not already fetched
if _, err := os.Stat(chartPath); os.IsNotExist(err) {
- fetchFlags := st.chartVersionFlags(release)
+ 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}
@@ -1363,6 +1404,7 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre
chartPath = filepath.Dir(fullChartPath)
}
}
+
results <- &chartPrepareResult{
releaseName: release.Name,
chartName: chartName,
@@ -1370,7 +1412,7 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre
releaseContext: release.KubeContext,
chartPath: chartPath,
buildDeps: buildDeps,
- skipRefresh: !isLocal,
+ skipRefresh: !isLocal || opts.SkipRefresh,
chartFetchedByGoGetter: chartFetchedByGoGetter,
}
}
@@ -1425,6 +1467,7 @@ func (st *HelmState) runHelmDepBuilds(helm helmexec.Interface, concurrency int,
// So we shouldn't use goroutines like we do for other helm operations here.
//
// See https://github.com/roboll/helmfile/issues/1521
+
for _, r := range builds {
buildDepsFlags := getBuildDepsFlags(r)
if err := helm.BuildDeps(r.releaseName, r.chartPath, buildDepsFlags...); err != nil {
@@ -1456,11 +1499,14 @@ type TemplateOpts struct {
SkipCleanup bool
OutputDirTemplate string
IncludeCRDs bool
+ NoHooks bool
SkipTests bool
PostRenderer string
PostRendererArgs []string
KubeVersion string
ShowOnly []string
+ // Propagate '--skip-schema-validation' to helmv3 template and helm install
+ SkipSchemaValidation bool
}
type TemplateOpt interface{ Apply(*TemplateOpts) }
@@ -1538,6 +1584,10 @@ func (st *HelmState) TemplateReleases(helm helmexec.Interface, outputDir string,
flags = append(flags, "--include-crds")
}
+ if opts.NoHooks {
+ flags = append(flags, "--no-hooks")
+ }
+
if opts.SkipTests {
flags = append(flags, "--skip-tests")
}
@@ -1753,7 +1803,7 @@ type diffPrepareResult struct {
// commonDiffFlags returns common flags for helm diff, not in release-specific context
func (st *HelmState) commonDiffFlags(detailedExitCode bool, stripTrailingCR bool, includeTests bool, suppress []string, suppressSecrets bool, showSecrets bool, noHooks bool, opt *DiffOpts) []string {
- var flags []string
+ var flags = []string{}
if detailedExitCode {
flags = append(flags, "--detailed-exitcode")
@@ -1797,8 +1847,6 @@ func (st *HelmState) commonDiffFlags(detailedExitCode bool, stripTrailingCR bool
flags = append(flags, "--output", opt.Output)
}
- flags = st.appendValuesControlModeFlag(flags, opt.ReuseValues, opt.ResetValues)
-
if opt.Set != nil {
for _, s := range opt.Set {
flags = append(flags, "--set", s)
@@ -1912,6 +1960,8 @@ func (st *HelmState) prepareDiffReleases(helm helmexec.Interface, additionalValu
flags = append(flags, "--values", valfile)
}
+ flags = st.appendValuesControlModeFlag(flags, opt.ReuseValues, opt.ResetValues, release)
+
flags = append(flags, commonDiffFlags...)
if len(errs) > 0 {
@@ -1928,7 +1978,7 @@ func (st *HelmState) prepareDiffReleases(helm helmexec.Interface, additionalValu
func() {
for i := 0; i < numReleases; i++ {
res := <-results
- if res.errors != nil && len(res.errors) > 0 {
+ if len(res.errors) > 0 {
for _, e := range res.errors {
errs = append(errs, e)
}
@@ -1989,6 +2039,7 @@ type DiffOpts struct {
PostRenderer string
PostRendererArgs []string
SuppressOutputLineRegex []string
+ SkipSchemaValidation bool
}
func (o *DiffOpts) Apply(opts *DiffOpts) {
@@ -2138,18 +2189,24 @@ func (st *HelmState) DeleteReleases(affectedReleases *AffectedReleases, helm hel
start := time.Now()
if _, err := st.triggerReleaseEvent("preuninstall", nil, &release, "delete"); err != nil {
- affectedReleases.Failed = append(affectedReleases.Failed, &release)
+ release.duration = time.Since(start)
+
+ affectedReleases.DeleteFailed = append(affectedReleases.Failed, &release)
return err
}
if err := helm.DeleteRelease(context, release.Name, flags...); err != nil {
- affectedReleases.Failed = append(affectedReleases.Failed, &release)
+ release.duration = time.Since(start)
+
+ affectedReleases.DeleteFailed = append(affectedReleases.Failed, &release)
return err
}
if _, err := st.triggerReleaseEvent("postuninstall", nil, &release, "delete"); err != nil {
- affectedReleases.Failed = append(affectedReleases.Failed, &release)
+ release.duration = time.Since(start)
+
+ affectedReleases.DeleteFailed = append(affectedReleases.Failed, &release)
return err
}
release.duration = time.Since(start)
@@ -2222,16 +2279,40 @@ func (st *HelmState) GetReleasesWithOverrides() ([]ReleaseSpec, error) {
return rs, nil
}
+func (st *HelmState) GetReleasesWithLabels() []ReleaseSpec {
+ var rs []ReleaseSpec
+ for _, r := range st.Releases {
+ spec := r
+ labels := map[string]string{}
+ // apply common labels
+ for k, v := range st.CommonLabels {
+ labels[k] = v
+ }
+ for k, v := range spec.Labels {
+ labels[k] = v
+ }
+ // Let the release name, namespace, and chart be used as a tag
+ labels["name"] = r.Name
+ labels["namespace"] = r.Namespace
+ // Strip off just the last portion for the name stable/newrelic would give newrelic
+ chartSplit := strings.Split(r.Chart, "/")
+ labels["chart"] = chartSplit[len(chartSplit)-1]
+ spec.Labels = labels
+ rs = append(rs, spec)
+ }
+ return rs
+}
+
func (st *HelmState) SelectReleases(includeTransitiveNeeds bool) ([]Release, error) {
values := st.Values()
- rs, err := markExcludedReleases(st.Releases, st.Selectors, st.CommonLabels, values, includeTransitiveNeeds)
+ rs, err := markExcludedReleases(st.Releases, st.Selectors, values, includeTransitiveNeeds)
if err != nil {
return nil, err
}
return rs, nil
}
-func markExcludedReleases(releases []ReleaseSpec, selectors []string, commonLabels map[string]string, values map[string]any, includeTransitiveNeeds bool) ([]Release, error) {
+func markExcludedReleases(releases []ReleaseSpec, selectors []string, values map[string]any, includeTransitiveNeeds bool) ([]Release, error) {
var filteredReleases []Release
filters := []ReleaseFilter{}
for _, label := range selectors {
@@ -2242,27 +2323,8 @@ func markExcludedReleases(releases []ReleaseSpec, selectors []string, commonLabe
filters = append(filters, f)
}
for _, r := range releases {
- // Do not add any label without any filter, see #276
- if len(filters) > 0 {
- if r.Labels == nil {
- r.Labels = map[string]string{}
- }
- // Let the release name, namespace, and chart be used as a tag
- r.Labels["name"] = r.Name
- r.Labels["namespace"] = r.Namespace
- // Strip off just the last portion for the name stable/newrelic would give newrelic
- chartSplit := strings.Split(r.Chart, "/")
- r.Labels["chart"] = chartSplit[len(chartSplit)-1]
- // Merge CommonLabels into release labels
- for k, v := range commonLabels {
- r.Labels[k] = v
- }
- }
var filterMatch bool
for _, f := range filters {
- if r.Labels == nil {
- r.Labels = map[string]string{}
- }
if f.Match(r) {
filterMatch = true
break
@@ -2273,6 +2335,7 @@ func markExcludedReleases(releases []ReleaseSpec, selectors []string, commonLabe
if err != nil {
return nil, fmt.Errorf("failed to parse condition in release %s: %w", r.Name, err)
}
+ // reset the labels to the original
res := Release{
ReleaseSpec: r,
Filtered: (len(filters) > 0 && !filterMatch) || (!conditionMatch),
@@ -2627,26 +2690,46 @@ func (st *HelmState) kubeConnectionFlags(release *ReleaseSpec) []string {
}
func (st *HelmState) appendChartDownloadFlags(flags []string, release *ReleaseSpec) []string {
- var repoSkipTLSVerify, repoPlainHttp bool
repo, _ := st.GetRepositoryAndNameFromChartName(release.Chart)
- if repo != nil {
- repoPlainHttp = repo.PlainHttp
- repoSkipTLSVerify = repo.SkipTLSVerify
- }
-
- if release.PlainHttp || st.HelmDefaults.PlainHttp || repoPlainHttp {
+ if st.needsPlainHttp(release, repo) {
flags = append(flags, "--plain-http")
// --insecure-skip-tls-verify nullifies --plain-http in helm, omit it if PlainHttp is specified
return flags
}
- if release.InsecureSkipTLSVerify || st.HelmDefaults.InsecureSkipTLSVerify || repoSkipTLSVerify {
+ if st.needsInsecureSkipTLSVerify(release, repo) {
flags = append(flags, "--insecure-skip-tls-verify")
}
return flags
}
+func (st *HelmState) needsPlainHttp(release *ReleaseSpec, repo *RepositorySpec) bool {
+ var repoPlainHttp, relPlainHttp bool
+ if repo != nil {
+ repoPlainHttp = repo.PlainHttp
+ }
+
+ if release != nil {
+ relPlainHttp = release.PlainHttp
+ }
+
+ return relPlainHttp || st.HelmDefaults.PlainHttp || repoPlainHttp
+}
+
+func (st *HelmState) needsInsecureSkipTLSVerify(release *ReleaseSpec, repo *RepositorySpec) bool {
+ var repoSkipTLSVerify, relSkipTLSVerify bool
+ if repo != nil {
+ repoSkipTLSVerify = repo.SkipTLSVerify
+ }
+
+ if release != nil {
+ relSkipTLSVerify = release.InsecureSkipTLSVerify
+ }
+
+ return relSkipTLSVerify || st.HelmDefaults.InsecureSkipTLSVerify || repoSkipTLSVerify
+}
+
func (st *HelmState) timeoutFlags(release *ReleaseSpec) []string {
var flags []string
@@ -2664,12 +2747,13 @@ func (st *HelmState) timeoutFlags(release *ReleaseSpec) []string {
}
func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSpec, workerIndex int, opt *SyncOpts) ([]string, []string, error) {
- flags := st.chartVersionFlags(release)
+ var flags []string
+ flags = st.appendChartVersionFlags(flags, release)
if release.EnableDNS != nil && *release.EnableDNS || release.EnableDNS == nil && st.HelmDefaults.EnableDNS {
flags = append(flags, "--enable-dns")
}
- flags = st.appendWaitFlags(flags, release, opt)
+ flags = st.appendWaitFlags(flags, helm, release, opt)
flags = st.appendWaitForJobsFlags(flags, release, opt)
// non-OCI chart should be verified here
@@ -2711,15 +2795,20 @@ func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSp
flags = append(flags, "--disable-openapi-validation")
}
+ postRenderer := ""
+ syncReleaseLabels := false
+ if opt != nil {
+ postRenderer = opt.PostRenderer
+ syncReleaseLabels = opt.SyncReleaseLabels
+ }
+
flags = st.appendConnectionFlags(flags, release)
flags = st.appendChartDownloadFlags(flags, release)
flags = st.appendHelmXFlags(flags, release)
- postRenderer := ""
- if opt != nil {
- postRenderer = opt.PostRenderer
- }
+ flags = st.appendLabelsFlags(flags, helm, release, syncReleaseLabels)
+
flags = st.appendPostRenderFlags(flags, release, postRenderer)
var postRendererArgs []string
@@ -2728,9 +2817,19 @@ func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSp
}
flags = st.appendPostRenderArgsFlags(flags, release, postRendererArgs)
+ skipSchemaValidation := false
+ if opt != nil {
+ skipSchemaValidation = opt.SkipSchemaValidation
+ }
+
+ flags = st.appendSkipSchemaValidationFlags(flags, release, skipSchemaValidation)
+
// append hide-notes flag
flags = st.appendHideNotesFlags(flags, helm, opt)
+ // append take-ownership flag
+ flags = st.appendTakeOwnershipFlags(flags, helm, opt)
+
flags = st.appendExtraSyncFlags(flags, opt)
common, clean, err := st.namespaceAndValuesFlags(helm, release, workerIndex)
@@ -2742,26 +2841,27 @@ func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSp
func (st *HelmState) flagsForTemplate(helm helmexec.Interface, release *ReleaseSpec, workerIndex int, opt *TemplateOpts) ([]string, []string, error) {
var flags []string
-
- flags = st.chartVersionFlags(release)
-
+ flags = st.appendChartVersionFlags(flags, release)
flags = st.appendHelmXFlags(flags, release)
- postRenderer := ""
var postRendererArgs []string
- kubeVersion := ""
var showOnly []string
+ postRenderer := ""
+ kubeVersion := ""
+ skipSchemaValidation := false
if opt != nil {
postRenderer = opt.PostRenderer
postRendererArgs = opt.PostRendererArgs
kubeVersion = opt.KubeVersion
showOnly = opt.ShowOnly
+ skipSchemaValidation = opt.SkipSchemaValidation
}
flags = st.appendPostRenderFlags(flags, release, postRenderer)
flags = st.appendPostRenderArgsFlags(flags, release, postRendererArgs)
flags = st.appendApiVersionsFlags(flags, release, kubeVersion)
flags = st.appendChartDownloadFlags(flags, release)
flags = st.appendShowOnlyFlags(flags, showOnly)
+ flags = st.appendSkipSchemaValidationFlags(flags, release, skipSchemaValidation)
common, files, err := st.namespaceAndValuesFlags(helm, release, workerIndex)
if err != nil {
@@ -2772,7 +2872,8 @@ func (st *HelmState) flagsForTemplate(helm helmexec.Interface, release *ReleaseS
func (st *HelmState) flagsForDiff(helm helmexec.Interface, release *ReleaseSpec, disableValidation bool, workerIndex int, opt *DiffOpts) ([]string, []string, error) {
settings := cli.New()
- flags := st.chartVersionFlags(release)
+ var flags []string
+ flags = st.appendChartVersionFlags(flags, release)
disableOpenAPIValidation := false
if release.DisableOpenAPIValidation != nil {
@@ -2800,11 +2901,21 @@ func (st *HelmState) flagsForDiff(helm helmexec.Interface, release *ReleaseSpec,
// `helm template --validate` and `helm upgrade --dry-run` ignore `--kube-version` flag.
// For the moment, not specifying kubeVersion.
flags = st.appendApiVersionsFlags(flags, release, "")
-
flags = st.appendConnectionFlags(flags, release)
-
flags = st.appendChartDownloadFlags(flags, release)
+ // `helm diff` does not support the `--plain-http` flag, this needs to be removed
+ repo, _ := st.GetRepositoryAndNameFromChartName(release.Chart)
+ if st.needsPlainHttp(release, repo) {
+ var cleanFlags []string
+ for _, flag := range flags {
+ if flag != "--plain-http" {
+ cleanFlags = append(cleanFlags, flag)
+ }
+ }
+ flags = cleanFlags
+ }
+
for _, flag := range flags {
if flag == "--insecure-skip-tls-verify" {
diffVersion, err := helmexec.GetPluginVersion("diff", settings.PluginsDirectory)
@@ -2835,6 +2946,12 @@ func (st *HelmState) flagsForDiff(helm helmexec.Interface, release *ReleaseSpec,
}
flags = st.appendPostRenderArgsFlags(flags, release, postRendererArgs)
+ skipSchemaValidation := false
+ if opt != nil {
+ skipSchemaValidation = opt.SkipSchemaValidation
+ }
+ flags = st.appendSkipSchemaValidationFlags(flags, release, skipSchemaValidation)
+
suppressOutputLineRegex := []string{}
if opt != nil {
suppressOutputLineRegex = opt.SuppressOutputLineRegex
@@ -2860,9 +2977,7 @@ func (st *HelmState) flagsForDiff(helm helmexec.Interface, release *ReleaseSpec,
return append(flags, common...), files, nil
}
-func (st *HelmState) chartVersionFlags(release *ReleaseSpec) []string {
- flags := []string{}
-
+func (st *HelmState) appendChartVersionFlags(flags []string, release *ReleaseSpec) []string {
if release.Version != "" {
flags = append(flags, "--version", release.Version)
}
@@ -2906,8 +3021,8 @@ func (st *HelmState) chartOCIFlags(r *ReleaseSpec) []string {
return flags
}
-func (st *HelmState) appendValuesControlModeFlag(flags []string, reuseValues bool, resetValues bool) []string {
- if !resetValues && (st.HelmDefaults.ReuseValues || reuseValues) {
+func (st *HelmState) appendValuesControlModeFlag(flags []string, reuseValues bool, resetValues bool, release *ReleaseSpec) []string {
+ if !resetValues && ((release.ReuseValues != nil && *release.ReuseValues || release.ReuseValues == nil && st.HelmDefaults.ReuseValues) || reuseValues) {
flags = append(flags, "--reuse-values")
} else {
flags = append(flags, "--reset-values")
@@ -3292,6 +3407,15 @@ func (st *HelmState) namespaceAndValuesFlags(helm helmexec.Interface, release *R
flags = append(flags, setFlags...)
}
+ if len(release.SetStringValues) > 0 {
+ setStringFlags, err := st.setStringFlags(release.SetStringValues)
+ if err != nil {
+ return nil, files, fmt.Errorf("Failed to render set string value entry in %s for release %s: %v", st.FilePath, release.Name, err)
+ }
+
+ flags = append(flags, setStringFlags...)
+ }
+
/***********
* START 'env' section for backwards compatibility
***********/
@@ -3351,6 +3475,34 @@ func (st *HelmState) setFlags(setValues []SetValue) ([]string, error) {
return flags, nil
}
+// setStringFlags is to generate the set-string flags for helm
+func (st *HelmState) setStringFlags(setValues []SetValue) ([]string, error) {
+ var flags []string
+
+ for _, set := range setValues {
+ if set.Value != "" {
+ renderedValue, err := renderValsSecrets(st.valsRuntime, set.Value)
+ if err != nil {
+ return nil, err
+ }
+ flags = append(flags, "--set-string", fmt.Sprintf("%s=%s", escape(set.Name), escape(renderedValue[0])))
+ } else if len(set.Values) > 0 {
+ renderedValues, err := renderValsSecrets(st.valsRuntime, set.Values...)
+ if err != nil {
+ return nil, err
+ }
+ items := make([]string, len(renderedValues))
+ for i, raw := range renderedValues {
+ items[i] = escape(raw)
+ }
+ v := strings.Join(items, ",")
+ flags = append(flags, "--set-string", fmt.Sprintf("%s={%s}", escape(set.Name), v))
+ }
+ }
+
+ return flags, nil
+}
+
// renderValsSecrets helper function which renders 'ref+.*' secrets
func renderValsSecrets(e vals.Evaluator, input ...string) ([]string, error) {
output := make([]string, len(input))
@@ -3386,7 +3538,7 @@ func hideChartCredentials(chartCredentials string) (string, error) {
// DisplayAffectedReleases logs the upgraded, deleted and in error releases
func (ar *AffectedReleases) DisplayAffectedReleases(logger *zap.SugaredLogger) {
- if ar.Upgraded != nil && len(ar.Upgraded) > 0 {
+ if len(ar.Upgraded) > 0 {
logger.Info("\nUPDATED RELEASES:")
tbl, _ := prettytable.NewTable(prettytable.Column{Header: "NAME"},
prettytable.Column{Header: "NAMESPACE", MinWidth: 6},
@@ -3408,7 +3560,7 @@ func (ar *AffectedReleases) DisplayAffectedReleases(logger *zap.SugaredLogger) {
}
logger.Info(tbl.String())
}
- if ar.Deleted != nil && len(ar.Deleted) > 0 {
+ if len(ar.Deleted) > 0 {
logger.Info("\nDELETED RELEASES:")
tbl, _ := prettytable.NewTable(prettytable.Column{Header: "NAME"},
prettytable.Column{Header: "NAMESPACE", MinWidth: 6},
@@ -3423,7 +3575,7 @@ func (ar *AffectedReleases) DisplayAffectedReleases(logger *zap.SugaredLogger) {
}
logger.Info(tbl.String())
}
- if ar.Failed != nil && len(ar.Failed) > 0 {
+ if len(ar.Failed) > 0 {
logger.Info("\nFAILED RELEASES:")
tbl, _ := prettytable.NewTable(prettytable.Column{Header: "NAME"},
prettytable.Column{Header: "NAMESPACE", MinWidth: 6},
@@ -3440,6 +3592,21 @@ func (ar *AffectedReleases) DisplayAffectedReleases(logger *zap.SugaredLogger) {
}
logger.Info(tbl.String())
}
+ if len(ar.DeleteFailed) > 0 {
+ logger.Info("\nFAILED TO DELETE RELEASES:")
+ tbl, _ := prettytable.NewTable(prettytable.Column{Header: "NAME"},
+ prettytable.Column{Header: "NAMESPACE", MinWidth: 6},
+ prettytable.Column{Header: "DURATION", AlignRight: true},
+ )
+ tbl.Separator = " "
+ for _, release := range ar.DeleteFailed {
+ err := tbl.AddRow(release.Name, release.Namespace, release.duration.Round(time.Second))
+ if err != nil {
+ logger.Warn("Could not add row, %v", err)
+ }
+ }
+ logger.Info(tbl.String())
+ }
}
func escape(value string) string {
@@ -3741,10 +3908,10 @@ func (st *HelmState) getOCIChart(release *ReleaseSpec, tempDir string, helm helm
st.logger.Debugf("chart already exists at %s", chartPath)
} else {
flags := st.chartOCIFlags(release)
-
- // apprnd flags about keyring and verify
flags = st.appendVerifyFlags(flags, release)
flags = st.appendKeyringFlags(flags, release)
+ flags = st.appendChartDownloadFlags(flags, release)
+ flags = st.appendChartVersionFlags(flags, release)
err := helm.ChartPull(qualifiedChartName, chartPath, flags...)
if err != nil {
@@ -3780,31 +3947,36 @@ func (st *HelmState) IsOCIChart(chart string) bool {
return repo.OCI
}
-func (st *HelmState) getOCIQualifiedChartName(release *ReleaseSpec, helm helmexec.Interface) (qualifiedChartName, chartName, chartVersion string, err error) {
- chartVersion = "latest"
- if release.Version != "" {
+func (st *HelmState) getOCIQualifiedChartName(release *ReleaseSpec, helm helmexec.Interface) (string, string, string, error) {
+ chartVersion := "latest"
+ if st.isDevelopment(release) && release.Version == "" {
+ // omit version, otherwise --devel flag is ignored by helm and helm-diff
+ chartVersion = ""
+ } else if release.Version != "" {
chartVersion = release.Version
}
+ if !st.IsOCIChart(release.Chart) {
+ return "", "", chartVersion, nil
+ }
+
+ var qualifiedChartName, chartName string
if strings.HasPrefix(release.Chart, "oci://") {
- split := strings.Split(release.Chart, "/")
- chartName = split[len(split)-1]
+ parts := strings.Split(release.Chart, "/")
+ chartName = parts[len(parts)-1]
qualifiedChartName = strings.Replace(fmt.Sprintf("%s:%s", release.Chart, chartVersion), "oci://", "", 1)
} else {
var repo *RepositorySpec
repo, chartName = st.GetRepositoryAndNameFromChartName(release.Chart)
- if repo == nil {
- return
- }
- if !repo.OCI {
- return
- }
qualifiedChartName = fmt.Sprintf("%s/%s:%s", repo.URL, chartName, chartVersion)
}
+ qualifiedChartName = strings.TrimSuffix(qualifiedChartName, ":")
+
if chartVersion == "latest" && helm.IsVersionAtLeast("3.8.0") {
return "", "", "", fmt.Errorf("the version for OCI charts should be semver compliant, the latest tag is not supported anymore for helm >= 3.8.0")
}
- return
+
+ return qualifiedChartName, chartName, chartVersion, nil
}
func (st *HelmState) FullFilePath() (string, error) {
diff --git a/pkg/state/state_exec_tmpl.go b/pkg/state/state_exec_tmpl.go
index f4ec6dce..23684d4b 100644
--- a/pkg/state/state_exec_tmpl.go
+++ b/pkg/state/state_exec_tmpl.go
@@ -199,6 +199,8 @@ func (st *HelmState) releaseWithInheritedTemplate(r *ReleaseSpec, inheritancePat
src.SetValuesTemplate = nil
case "set":
src.SetValues = nil
+ case "setString":
+ src.SetStringValues = nil
case "secrets":
src.Secrets = nil
default:
diff --git a/pkg/state/state_exec_tmpl_test.go b/pkg/state/state_exec_tmpl_test.go
index 91efe615..2bb57b0a 100644
--- a/pkg/state/state_exec_tmpl_test.go
+++ b/pkg/state/state_exec_tmpl_test.go
@@ -123,6 +123,29 @@ func TestHelmState_executeTemplates(t *testing.T) {
Values: []any{map[string]any{"key": "app-val0"}},
},
},
+ {
+ name: "Has template expressions in post renderer args",
+ input: ReleaseSpec{
+ Chart: "test-chart",
+ PostRendererArgs: []string{
+ "--release",
+ "{{ .Release.Name }}",
+ "--chart",
+ "{{ .Release.Chart }}",
+ },
+ Name: "test-release",
+ },
+ want: ReleaseSpec{
+ Chart: "test-chart",
+ Name: "test-release",
+ PostRendererArgs: []string{
+ "--release",
+ "test-chart-dev",
+ "--chart",
+ "test-chart",
+ },
+ },
+ },
}
for i := range tests {
diff --git a/pkg/state/state_test.go b/pkg/state/state_test.go
index 11592c8e..4834ba1c 100644
--- a/pkg/state/state_test.go
+++ b/pkg/state/state_test.go
@@ -58,13 +58,9 @@ func TestHelmState_applyDefaultsTo(t *testing.T) {
type fields struct {
BaseChartPath string
Context string
-
- // TODO: Remove this function once Helmfile v0.x
- DeprecatedReleases []ReleaseSpec
-
- Namespace string
- Repositories []RepositorySpec
- Releases []ReleaseSpec
+ Namespace string
+ Repositories []RepositorySpec
+ Releases []ReleaseSpec
}
type args struct {
spec ReleaseSpec
@@ -89,12 +85,8 @@ func TestHelmState_applyDefaultsTo(t *testing.T) {
fieldsWithNamespace := fields{
BaseChartPath: ".",
Context: "test_context",
-
- // TODO: Remove this function once Helmfile v0.x
- DeprecatedReleases: nil,
-
- Namespace: specWithNamespaceFromFields.Namespace,
- Repositories: nil,
+ Namespace: specWithNamespaceFromFields.Namespace,
+ Repositories: nil,
Releases: []ReleaseSpec{
specWithNamespace,
},
@@ -148,10 +140,6 @@ func TestHelmState_applyDefaultsTo(t *testing.T) {
state := &HelmState{
basePath: tt.fields.BaseChartPath,
ReleaseSetSpec: ReleaseSetSpec{
- // TODO: Remove this function once Helmfile v0.x
- DeprecatedContext: tt.fields.Context,
- DeprecatedReleases: tt.fields.DeprecatedReleases,
-
OverrideNamespace: tt.fields.Namespace,
Repositories: tt.fields.Repositories,
Releases: tt.fields.Releases,
@@ -740,9 +728,6 @@ func TestHelmState_flagsForUpgrade(t *testing.T) {
state := &HelmState{
basePath: "./",
ReleaseSetSpec: ReleaseSetSpec{
- // TODO: Remove this function once Helmfile v0.x
- DeprecatedContext: "default",
-
Releases: []ReleaseSpec{*tt.release},
HelmDefaults: tt.defaults,
},
@@ -904,9 +889,8 @@ func TestHelmState_flagsForTemplate(t *testing.T) {
state := &HelmState{
basePath: "./",
ReleaseSetSpec: ReleaseSetSpec{
- DeprecatedContext: "default",
- Releases: []ReleaseSpec{*tt.release},
- HelmDefaults: tt.defaults,
+ Releases: []ReleaseSpec{*tt.release},
+ HelmDefaults: tt.defaults,
},
valsRuntime: valsRuntime,
}
@@ -1871,6 +1855,19 @@ func TestHelmState_DiffFlags(t *testing.T) {
helm: &exectest.Helm{},
wantDiffFlags: []string{"--api-versions", "helmfile.test/v1", "--api-versions", "helmfile.test/v2", "--kube-version", "1.21"},
},
+ {
+ name: "release with kubeversion and plain http which is ignored",
+ releases: []ReleaseSpec{
+ {
+ Name: "releaseName",
+ Chart: "foo",
+ KubeVersion: "1.21",
+ PlainHttp: true,
+ },
+ },
+ helm: &exectest.Helm{},
+ wantDiffFlags: []string{"--kube-version", "1.21"},
+ },
}
for i := range tests {
tt := tests[i]
@@ -2808,7 +2805,7 @@ func TestHelmState_Delete(t *testing.T) {
affectedReleases := AffectedReleases{}
errs := state.DeleteReleases(&affectedReleases, helm, 1, tt.purge, "")
if errs != nil {
- if !tt.wantErr || len(affectedReleases.Failed) != 1 || affectedReleases.Failed[0].Name != release.Name {
+ if !tt.wantErr || len(affectedReleases.DeleteFailed) != 1 || affectedReleases.DeleteFailed[0].Name != release.Name {
t.Errorf("DeleteReleases() for %s error = %v, wantErr %v", tt.name, errs, tt.wantErr)
return
}
@@ -3203,6 +3200,8 @@ func TestFullFilePath(t *testing.T) {
}
func TestGetOCIQualifiedChartName(t *testing.T) {
+ devel := true
+
tests := []struct {
state HelmState
expected []struct {
@@ -3290,6 +3289,27 @@ func TestGetOCIQualifiedChartName(t *testing.T) {
{"registry/chart-path/chart-name:0.1.2", "chart-name", "0.1.2"},
},
},
+ {
+ state: HelmState{
+ ReleaseSetSpec: ReleaseSetSpec{
+ Repositories: []RepositorySpec{},
+ Releases: []ReleaseSpec{
+ {
+ Chart: "oci://registry/chart-path/chart-name",
+ Devel: &devel,
+ },
+ },
+ },
+ },
+ helmVersion: "3.13.3",
+ expected: []struct {
+ qualifiedChartName string
+ chartName string
+ chartVersion string
+ }{
+ {"registry/chart-path/chart-name", "chart-name", ""},
+ },
+ },
}
for _, tt := range tests {
@@ -3438,14 +3458,11 @@ func TestCommonDiffFlags(t *testing.T) {
stripTrailingCR: true,
expected: []string{
"--strip-trailing-cr",
- "--reset-values",
},
},
{
- name: "stripTrailingCR disenabled",
- expected: []string{
- "--reset-values",
- },
+ name: "stripTrailingCR disenabled",
+ expected: []string{},
},
}
for _, tt := range tests {
@@ -3582,6 +3599,98 @@ func TestAppendChartDownloadFlags(t *testing.T) {
}
}
+func TestNeedsPlainHttp(t *testing.T) {
+ tests := []struct {
+ name string
+ release *ReleaseSpec
+ repo *RepositorySpec
+ defaults HelmSpec
+ expected bool
+ }{
+ {
+ name: "PlainHttp in Release",
+ release: &ReleaseSpec{
+ PlainHttp: true,
+ },
+ expected: true,
+ },
+ {
+ name: "PlainHttp in Repository",
+ repo: &RepositorySpec{
+ PlainHttp: true,
+ },
+ expected: true,
+ },
+ {
+ name: "PlainHttp in HelmDefaults",
+ defaults: HelmSpec{
+ PlainHttp: true,
+ },
+ expected: true,
+ },
+ {
+ name: "PlainHttp not set",
+ expected: false,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ st := &HelmState{
+ ReleaseSetSpec: ReleaseSetSpec{
+ HelmDefaults: tt.defaults,
+ },
+ }
+ require.Equal(t, tt.expected, st.needsPlainHttp(tt.release, tt.repo))
+ })
+ }
+}
+
+func TestNeedsInsecureSkipTLSVerify(t *testing.T) {
+ tests := []struct {
+ name string
+ release *ReleaseSpec
+ repo *RepositorySpec
+ defaults HelmSpec
+ expected bool
+ }{
+ {
+ name: "InsecureSkipTLSVerify in Release",
+ release: &ReleaseSpec{
+ InsecureSkipTLSVerify: true,
+ },
+ expected: true,
+ },
+ {
+ name: "SkipTLSVerify in Repository",
+ repo: &RepositorySpec{
+ SkipTLSVerify: true,
+ },
+ expected: true,
+ },
+ {
+ name: "InsecureSkipTLSVerify in HelmDefaults",
+ defaults: HelmSpec{
+ InsecureSkipTLSVerify: true,
+ },
+ expected: true,
+ },
+ {
+ name: "InsecureSkipTLSVerify not set",
+ expected: false,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ st := &HelmState{
+ ReleaseSetSpec: ReleaseSetSpec{
+ HelmDefaults: tt.defaults,
+ },
+ }
+ require.Equal(t, tt.expected, st.needsInsecureSkipTLSVerify(tt.release, tt.repo))
+ })
+ }
+}
+
func TestHideChartURL(t *testing.T) {
tests := []struct {
input string
@@ -4203,3 +4312,262 @@ func TestAppendVerifyFlags(t *testing.T) {
})
}
}
+
+// TestHelmState_setStringFlags tests the setStringFlags method
+func TestHelmState_setStringFlags(t *testing.T) {
+ tests := []struct {
+ name string
+ setStringValues []SetValue
+ want []string
+ wantErr bool
+ }{
+ {
+ name: "single value",
+ setStringValues: []SetValue{
+ {
+ Name: "key",
+ Value: "value",
+ },
+ },
+ want: []string{"--set-string", "key=value"},
+ wantErr: false,
+ },
+ {
+ name: "multiple values",
+ setStringValues: []SetValue{
+ {
+ Name: "key",
+ Values: []string{"value1", "value2"},
+ },
+ },
+ want: []string{"--set-string", "key={value1,value2}"},
+ wantErr: false,
+ },
+ {
+ name: "rendered value error",
+ setStringValues: []SetValue{
+ {
+ Name: "key",
+ Value: "ref+echo://value",
+ },
+ },
+ want: []string{"--set-string", "key=value"},
+ wantErr: false,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ st := &HelmState{
+ valsRuntime: valsRuntime,
+ }
+ got, err := st.setStringFlags(tt.setStringValues)
+ if (err != nil) != tt.wantErr {
+ t.Errorf("setStringFlags() error = %v, wantErr %v", err, tt.wantErr)
+ return
+ }
+ if !reflect.DeepEqual(got, tt.want) {
+ t.Errorf("setStringFlags() got = %v, want %v", got, tt.want)
+ }
+ })
+ }
+}
+func TestPrepareDiffReleases_ValueControlReleaseOverride(t *testing.T) {
+ tests := []struct {
+ flags []string
+ diffOptions *DiffOpts
+ helmDefaults *HelmSpec
+ release *ReleaseSpec
+ }{
+ {
+ flags: []string{"--reuse-values"},
+ diffOptions: &DiffOpts{},
+ helmDefaults: &HelmSpec{},
+ release: &ReleaseSpec{
+ Name: "reuse-values-from-release",
+ ReuseValues: boolValue(true),
+ },
+ },
+ {
+ flags: []string{"--reuse-values"},
+ diffOptions: &DiffOpts{
+ ReuseValues: true,
+ },
+ helmDefaults: &HelmSpec{},
+ release: &ReleaseSpec{
+ Name: "reuse-values-from-cli",
+ ReuseValues: boolValue(false),
+ },
+ },
+ {
+ flags: []string{"--reuse-values"},
+ diffOptions: &DiffOpts{
+ ReuseValues: true,
+ },
+ helmDefaults: &HelmSpec{
+ ReuseValues: true,
+ },
+ release: &ReleaseSpec{
+ Name: "reuse-values-all",
+ ReuseValues: boolValue(true),
+ },
+ },
+ {
+ flags: []string{"--reset-values"},
+ diffOptions: &DiffOpts{},
+ helmDefaults: &HelmSpec{
+ ReuseValues: true,
+ },
+ release: &ReleaseSpec{
+ Name: "reset-values-from-helm-defaults",
+ ReuseValues: boolValue(false),
+ },
+ },
+ {
+ flags: []string{"--reset-values"},
+ diffOptions: &DiffOpts{},
+ helmDefaults: &HelmSpec{},
+ release: &ReleaseSpec{
+ Name: "reset-values-from-release",
+ ReuseValues: boolValue(false),
+ },
+ },
+ {
+ flags: []string{"--reset-values"},
+ diffOptions: &DiffOpts{
+ ResetValues: true,
+ },
+ helmDefaults: &HelmSpec{},
+ release: &ReleaseSpec{
+ Name: "reset-values-cli-overrides-release",
+ ReuseValues: boolValue(true),
+ },
+ },
+ }
+
+ for _, tt := range tests {
+ releases := []ReleaseSpec{
+ *tt.release,
+ }
+ state := &HelmState{
+ ReleaseSetSpec: ReleaseSetSpec{
+ Releases: releases,
+ HelmDefaults: *tt.helmDefaults,
+ },
+ logger: logger,
+ valsRuntime: valsRuntime,
+ }
+ helm := &exectest.Helm{
+ Lists: map[exectest.ListKey]string{},
+ Helm3: true,
+ }
+ results, es := state.prepareDiffReleases(helm, []string{}, 1, false, false, false, []string{}, false, false, false, tt.diffOptions)
+
+ require.Len(t, es, 0)
+ require.Len(t, results, 1)
+
+ r := results[0]
+
+ require.Equal(t, tt.flags, r.flags, "Wrong value control flag for release %s", r.release.Name)
+ }
+}
+
+func TestPrepareSyncReleases_ValueControlReleaseOverride(t *testing.T) {
+ tests := []struct {
+ flags []string
+ syncOptions *SyncOpts
+ helmDefaults *HelmSpec
+ release *ReleaseSpec
+ }{
+ {
+ flags: []string{"--reuse-values"},
+ syncOptions: &SyncOpts{},
+ helmDefaults: &HelmSpec{},
+ release: &ReleaseSpec{
+ Name: "reuse-values-from-release",
+ ReuseValues: boolValue(true),
+ },
+ },
+ {
+ flags: []string{"--reuse-values"},
+ syncOptions: &SyncOpts{
+ ReuseValues: true,
+ },
+ helmDefaults: &HelmSpec{},
+ release: &ReleaseSpec{
+ Name: "reuse-values-from-cli",
+ ReuseValues: boolValue(false),
+ },
+ },
+ {
+ flags: []string{"--reuse-values"},
+ syncOptions: &SyncOpts{
+ ReuseValues: true,
+ },
+ helmDefaults: &HelmSpec{
+ ReuseValues: true,
+ },
+ release: &ReleaseSpec{
+ Name: "reuse-values-all",
+ ReuseValues: boolValue(true),
+ },
+ },
+ {
+ flags: []string{"--reset-values"},
+ syncOptions: &SyncOpts{},
+ helmDefaults: &HelmSpec{
+ ReuseValues: true,
+ },
+ release: &ReleaseSpec{
+ Name: "reset-values-from-helm-defaults",
+ ReuseValues: boolValue(false),
+ },
+ },
+ {
+ flags: []string{"--reset-values"},
+ syncOptions: &SyncOpts{},
+ helmDefaults: &HelmSpec{},
+ release: &ReleaseSpec{
+ Name: "reset-values-from-release",
+ ReuseValues: boolValue(false),
+ },
+ },
+ {
+ flags: []string{"--reset-values"},
+ syncOptions: &SyncOpts{
+ ResetValues: true,
+ },
+ helmDefaults: &HelmSpec{},
+ release: &ReleaseSpec{
+ Name: "reset-values-cli-overrides-release",
+ ReuseValues: boolValue(true),
+ },
+ },
+ }
+
+ for _, tt := range tests {
+ releases := []ReleaseSpec{
+ *tt.release,
+ }
+ state := &HelmState{
+ ReleaseSetSpec: ReleaseSetSpec{
+ Releases: releases,
+ HelmDefaults: *tt.helmDefaults,
+ },
+ logger: logger,
+ valsRuntime: valsRuntime,
+ }
+ helm := &exectest.Helm{
+ Lists: map[exectest.ListKey]string{},
+ Helm3: true,
+ }
+ results, es := state.prepareSyncReleases(helm, []string{}, 1, tt.syncOptions)
+
+ require.Len(t, es, 0)
+ require.Len(t, results, 1)
+
+ r := results[0]
+
+ require.Equal(t, tt.flags, r.flags, "Wrong value control flag for release %s", r.release.Name)
+ }
+}
diff --git a/pkg/state/temp_test.go b/pkg/state/temp_test.go
index 258033e3..f0eed882 100644
--- a/pkg/state/temp_test.go
+++ b/pkg/state/temp_test.go
@@ -24,7 +24,7 @@ func TestGenerateID(t *testing.T) {
got, err := generateValuesID(&tc.release, tc.data)
if err != nil {
- t.Fatalf("uenxpected error: %v", err)
+ t.Fatalf("unexpected error: %v", err)
}
if d := cmp.Diff(tc.want, got); d != "" {
@@ -38,39 +38,39 @@ func TestGenerateID(t *testing.T) {
run(testcase{
subject: "baseline",
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
- want: "foo-values-867bdd68d",
+ want: "foo-values-54f5f6cdb5",
})
run(testcase{
subject: "different bytes content",
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
data: []byte(`{"k":"v"}`),
- want: "foo-values-55d7dc5f87",
+ want: "foo-values-6bc8f7944b",
})
run(testcase{
subject: "different map content",
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
data: map[string]any{"k": "v"},
- want: "foo-values-58bdcf44f7",
+ want: "foo-values-dcffdcb8",
})
run(testcase{
subject: "different chart",
release: ReleaseSpec{Name: "foo", Chart: "stable/envoy"},
- want: "foo-values-67dcddd85",
+ want: "foo-values-6d4c6fd548",
})
run(testcase{
subject: "different name",
release: ReleaseSpec{Name: "bar", Chart: "incubator/raw"},
- want: "bar-values-6dd4989f97",
+ want: "bar-values-76974767c8",
})
run(testcase{
subject: "specific ns",
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw", Namespace: "myns"},
- want: "myns-foo-values-755d4487dc",
+ want: "myns-foo-values-77bd9cc6fb",
})
for id, n := range ids {
diff --git a/pkg/state/testdata/values.9.yaml.gotmpl b/pkg/state/testdata/values.9.yaml.gotmpl
new file mode 100644
index 00000000..09f8749f
--- /dev/null
+++ b/pkg/state/testdata/values.9.yaml.gotmpl
@@ -0,0 +1 @@
+foo: {{ .Values.foo }}
diff --git a/pkg/tmpl/context_funcs.go b/pkg/tmpl/context_funcs.go
index 82f8bf0e..c0f1111d 100644
--- a/pkg/tmpl/context_funcs.go
+++ b/pkg/tmpl/context_funcs.go
@@ -19,7 +19,6 @@ import (
"github.com/helmfile/helmfile/pkg/envvar"
"github.com/helmfile/helmfile/pkg/helmexec"
"github.com/helmfile/helmfile/pkg/maputil"
- "github.com/helmfile/helmfile/pkg/runtime"
"github.com/helmfile/helmfile/pkg/yaml"
)
@@ -37,23 +36,10 @@ func (e DisableInsecureFeaturesError) Error() string {
var (
disableInsecureFeatures bool
-
- // TODO: Remove this function once Helmfile v0.x
- skipInsecureTemplateFunctions bool
)
func init() {
disableInsecureFeatures, _ = strconv.ParseBool(os.Getenv(envvar.DisableInsecureFeatures))
-
- // TODO: Remove this function once Helmfile v0.x
- skipInsecureTemplateFunctions, _ = strconv.ParseBool(os.Getenv(envvar.SkipInsecureTemplateFunctions))
- skipInsecureTemplateFunctions = func() bool {
- if runtime.V1Mode {
- return false
- }
- b, _ := strconv.ParseBool(os.Getenv(envvar.SkipInsecureTemplateFunctions))
- return b
- }()
}
func (c *Context) createFuncMap() template.FuncMap {
@@ -76,7 +62,7 @@ func (c *Context) createFuncMap() template.FuncMap {
"fetchSecretValue": fetchSecretValue,
"expandSecretRefs": fetchSecretValues,
}
- if c.preRender || skipInsecureTemplateFunctions {
+ if c.preRender {
// disable potential side-effect template calls
funcMap["exec"] = func(string, []any, ...string) (string, error) {
return "", nil
@@ -321,14 +307,14 @@ func ToYaml(v any) (string, error) {
return string(data), nil
}
-func FromYaml(str string) (Values, error) {
- m := map[string]any{}
+func FromYaml(str string) (any, error) {
+ var m any
if err := yaml.Unmarshal([]byte(str), &m); err != nil {
return nil, fmt.Errorf("%s, offending yaml: %s", err, str)
}
- m, err := maputil.CastKeysToStrings(m)
+ m, err := maputil.RecursivelyStringifyMapKey(m)
if err != nil {
return nil, fmt.Errorf("%s, offending yaml: %s", err, str)
}
@@ -391,10 +377,10 @@ func RequiredEnv(name string) (string, error) {
func Required(warn string, val any) (any, error) {
if val == nil {
- return nil, fmt.Errorf(warn)
+ return nil, fmt.Errorf("%s", warn)
} else if _, ok := val.(string); ok {
if val == "" {
- return nil, fmt.Errorf(warn)
+ return nil, fmt.Errorf("%s", warn)
}
}
diff --git a/pkg/tmpl/context_funcs_test.go b/pkg/tmpl/context_funcs_test.go
index e9e67e04..58ac5bd0 100644
--- a/pkg/tmpl/context_funcs_test.go
+++ b/pkg/tmpl/context_funcs_test.go
@@ -46,30 +46,6 @@ func TestCreateFuncMap_DisabledInsecureFeatures(t *testing.T) {
disableInsecureFeatures = currentVal
}
-// TODO: Remove this function once Helmfile v0.x
-func TestCreateFuncMap_SkipInsecureTemplateFunctions(t *testing.T) {
- if runtime.V1Mode {
- t.Logf("SkipInsecureTemplateFunctions is not supported in V1 mode")
- return
- }
- currentVal := skipInsecureTemplateFunctions
-
- {
- skipInsecureTemplateFunctions = true
- ctx := &Context{basePath: "."}
- funcMaps := ctx.createFuncMap()
- args := make([]any, 0)
- actual1, err1 := funcMaps["exec"].(func(command string, args []any, inputs ...string) (string, error))("ls", args)
- require.Equal(t, "", actual1)
- require.ErrorIs(t, err1, nil)
- actual2, err2 := funcMaps["readFile"].(func(filename string) (string, error))("context_funcs_test.go")
- require.Equal(t, "", actual2)
- require.ErrorIs(t, err2, nil)
- }
-
- skipInsecureTemplateFunctions = currentVal
-}
-
func newFSExpecting(expectedFilename string, expected string) *filesystem.FileSystem {
return filesystem.FromFileSystem(filesystem.FileSystem{
ReadFile: func(filename string) ([]byte, error) {
@@ -224,7 +200,88 @@ func TestToYaml(t *testing.T) {
require.Equal(t, expected, actual)
}
-func testFromYaml(t *testing.T, goccyGoYaml bool, expected Values) {
+func testFromYamlObject(t *testing.T) {
+ raw := `foo:
+ bar: BAR
+`
+
+ actual, err := FromYaml(raw)
+ require.NoError(t, err)
+ require.Equal(
+ t,
+ map[string]any{
+ "foo": map[string]any{
+ "bar": "BAR",
+ },
+ },
+ actual,
+ )
+}
+
+func testFromYamlArray(t *testing.T) {
+ raw := `- foo
+- bar: BAR
+`
+
+ actual, err := FromYaml(raw)
+ require.NoError(t, err)
+ require.Equal(
+ t,
+ []any{
+ "foo",
+ map[string]any{
+ "bar": "BAR",
+ },
+ },
+ actual,
+ )
+}
+
+func testFromYamlString(t *testing.T) {
+ raw := `foo
+`
+
+ actual, err := FromYaml(raw)
+ require.NoError(t, err)
+ require.Equal(t, "foo", actual)
+}
+
+func testFromYamlNumber(t *testing.T) {
+ raw := `1234
+`
+
+ actual, err := FromYaml(raw)
+ require.NoError(t, err)
+
+ switch a := actual.(type) {
+ case int:
+ require.Equal(t, 1234, a)
+ case uint64:
+ require.Equal(t, uint64(1234), a)
+ default:
+ t.Errorf("unexpected type: %T", a)
+ }
+}
+
+func testFromYamlBoolean(t *testing.T) {
+ raw := `true
+`
+
+ actual, err := FromYaml(raw)
+ require.NoError(t, err)
+ require.Equal(t, true, actual)
+}
+
+func testFromYamlNull(t *testing.T) {
+ raw := `null
+`
+
+ actual, err := FromYaml(raw)
+ require.NoError(t, err)
+ require.Equal(t, nil, actual)
+}
+
+func testFromYaml(t *testing.T, goccyGoYaml bool) {
t.Helper()
v := runtime.GoccyGoYaml
@@ -233,39 +290,26 @@ func testFromYaml(t *testing.T, goccyGoYaml bool, expected Values) {
runtime.GoccyGoYaml = v
})
- raw := `foo:
- bar: BAR
-`
- actual, err := FromYaml(raw)
- require.NoError(t, err)
- require.Equal(t, expected, actual)
+ t.Run("test unmarshalling object", testFromYamlObject)
+
+ t.Run("test unmarshalling array", testFromYamlArray)
+
+ t.Run("test unmarshalling string", testFromYamlString)
+
+ t.Run("test unmarshalling number", testFromYamlNumber)
+
+ t.Run("test unmarshalling boolean", testFromYamlBoolean)
+
+ t.Run("test unmarshalling null", testFromYamlNull)
}
func TestFromYaml(t *testing.T) {
t.Run("with goccy/go-yaml", func(t *testing.T) {
- testFromYaml(
- t,
- true,
- // nolint: unconvert
- Values(map[string]any{
- "foo": map[string]any{
- "bar": "BAR",
- },
- }),
- )
+ testFromYaml(t, true)
})
t.Run("with gopkg.in/yaml.v2", func(t *testing.T) {
- testFromYaml(
- t,
- false,
- // nolint: unconvert
- Values(map[string]any{
- "foo": map[string]any{
- "bar": "BAR",
- },
- }),
- )
+ testFromYaml(t, false)
})
}
diff --git a/pkg/yaml/yaml.go b/pkg/yaml/yaml.go
index 08a5eb72..06054261 100644
--- a/pkg/yaml/yaml.go
+++ b/pkg/yaml/yaml.go
@@ -42,6 +42,8 @@ func NewDecoder(data []byte, strict bool) func(any) error {
if strict {
opts = append(opts, yaml.DisallowUnknownField())
}
+ // allow duplicate keys
+ opts = append(opts, yaml.AllowDuplicateMapKey())
decoder := yaml.NewDecoder(
bytes.NewReader(data),
diff --git a/test/advanced/helmfile.yaml b/test/advanced/helmfile.yaml
index 675e1a85..01a4e2d5 100644
--- a/test/advanced/helmfile.yaml
+++ b/test/advanced/helmfile.yaml
@@ -1,6 +1,6 @@
repositories:
- name: incubator
- url: https://kubernetes-charts-incubator.storage.googleapis.com
+ url: https://charts.helm.sh/incubator
releases:
- name: kustomapp
diff --git a/test/e2e/template/helmfile/snapshot_test.go b/test/e2e/template/helmfile/snapshot_test.go
index 672598f1..68f62be5 100644
--- a/test/e2e/template/helmfile/snapshot_test.go
+++ b/test/e2e/template/helmfile/snapshot_test.go
@@ -223,7 +223,7 @@ func testHelmfileTemplateWithBuildCommand(t *testing.T, goccyGoYaml bool) {
helmConfigHome := filepath.Join(tmpDir, "helm_config")
t.Logf("Using HELM_CACHE_HOME=%s, HELMFILE_CACHE_HOME=%s, HELM_CONFIG_HOME=%s", helmCacheHome, helmfileCacheHome, helmConfigHome)
- inputFile := filepath.Join(testdataDir, name, "input.yaml")
+ inputFile := filepath.Join(testdataDir, name, "input.yaml.gotmpl")
outputFile := filepath.Join(testdataDir, name, "output.yaml")
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
diff --git a/test/e2e/template/helmfile/testdata/snapshot/chart_need/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/chart_need/input.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/chart_need/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/chart_need/input.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/chart_need_enable_live_output/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/chart_need_enable_live_output/input.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/chart_need_enable_live_output/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/chart_need_enable_live_output/input.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-envs.yaml b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-envs.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-envs.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-envs.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-values.yaml b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-values.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-values.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-values.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/prod.yaml b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/prod.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/prod.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/prod.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/test.yaml b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/test.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/test.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/test.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/input.yaml.gotmpl
similarity index 58%
rename from test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/input.yaml.gotmpl
index 6b312364..05b9688c 100644
--- a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/input.yaml
+++ b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/input.yaml.gotmpl
@@ -4,13 +4,13 @@ environments:
- test.yaml.gotmpl
---
helmfiles:
-- path: helmfiles/test.yaml
+- path: helmfiles/test.yaml.gotmpl
values:
- envName: {{ .Values.envName }}
-- path: helmfiles/prod.yaml
+- path: helmfiles/prod.yaml.gotmpl
values:
- envName: {{ .Values.envName }}
-- path: helmfiles/no-envs.yaml
+- path: helmfiles/no-envs.yaml.gotmpl
values:
- envName: {{ .Values.envName }}
-- path: helmfiles/no-values.yaml
\ No newline at end of file
+- path: helmfiles/no-values.yaml.gotmpl
\ No newline at end of file
diff --git a/test/e2e/template/helmfile/testdata/snapshot/environments_releases_within_same_yaml_part/config.yaml b/test/e2e/template/helmfile/testdata/snapshot/environments_releases_within_same_yaml_part/config.yaml
deleted file mode 100644
index 71fee0cb..00000000
--- a/test/e2e/template/helmfile/testdata/snapshot/environments_releases_within_same_yaml_part/config.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-chartifyTempDir: envs_releases_within_same_yaml_part
-helmfileArgs:
-- --environment
-- prod
-- template
diff --git a/test/e2e/template/helmfile/testdata/snapshot/environments_releases_without_same_yaml_part/config.yaml b/test/e2e/template/helmfile/testdata/snapshot/environments_releases_without_same_yaml_part/config.yaml
new file mode 100644
index 00000000..690947ac
--- /dev/null
+++ b/test/e2e/template/helmfile/testdata/snapshot/environments_releases_without_same_yaml_part/config.yaml
@@ -0,0 +1,5 @@
+chartifyTempDir: envs_releases_without_same_yaml_part
+helmfileArgs:
+- --environment
+- prod
+- template
diff --git a/test/e2e/template/helmfile/testdata/snapshot/environments_releases_within_same_yaml_part/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/environments_releases_without_same_yaml_part/input.yaml.gotmpl
similarity index 97%
rename from test/e2e/template/helmfile/testdata/snapshot/environments_releases_within_same_yaml_part/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/environments_releases_without_same_yaml_part/input.yaml.gotmpl
index 276a4d93..4fc99ecb 100644
--- a/test/e2e/template/helmfile/testdata/snapshot/environments_releases_within_same_yaml_part/input.yaml
+++ b/test/e2e/template/helmfile/testdata/snapshot/environments_releases_without_same_yaml_part/input.yaml.gotmpl
@@ -1,7 +1,7 @@
environments:
prod:
staging:
-
+---
releases:
- name: raw
chart: ../../charts/raw-0.0.1
diff --git a/test/e2e/template/helmfile/testdata/snapshot/environments_releases_within_same_yaml_part/output.yaml b/test/e2e/template/helmfile/testdata/snapshot/environments_releases_without_same_yaml_part/output.yaml
similarity index 56%
rename from test/e2e/template/helmfile/testdata/snapshot/environments_releases_within_same_yaml_part/output.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/environments_releases_without_same_yaml_part/output.yaml
index 2e9471ac..7f723eaa 100644
--- a/test/e2e/template/helmfile/testdata/snapshot/environments_releases_within_same_yaml_part/output.yaml
+++ b/test/e2e/template/helmfile/testdata/snapshot/environments_releases_without_same_yaml_part/output.yaml
@@ -1,4 +1,3 @@
-WARNING: environments and releases cannot be defined within the same YAML part. Use --- to extract the environments into a dedicated part
Building dependency release=raw, chart=../../charts/raw-0.0.1
Templating release=raw, chart=../../charts/raw-0.0.1
---
diff --git a/test/e2e/template/helmfile/testdata/snapshot/environments_values_gotmpl_with_environment_name/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/environments_values_gotmpl_with_environment_name/input.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/environments_values_gotmpl_with_environment_name/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/environments_values_gotmpl_with_environment_name/input.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/hcl_mix/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/hcl_mix/input.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/hcl_mix/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/hcl_mix/input.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/issue_1229_template_strategic_merge_with_lockfile/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/issue_1229_template_strategic_merge_with_lockfile/input.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/issue_1229_template_strategic_merge_with_lockfile/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/issue_1229_template_strategic_merge_with_lockfile/input.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/issue_2098_release_template_needs/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/issue_2098_release_template_needs/input.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/issue_2098_release_template_needs/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/issue_2098_release_template_needs/input.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/issue_2098_release_template_needs/output.yaml b/test/e2e/template/helmfile/testdata/snapshot/issue_2098_release_template_needs/output.yaml
index 9e3dec93..c7d30230 100644
--- a/test/e2e/template/helmfile/testdata/snapshot/issue_2098_release_template_needs/output.yaml
+++ b/test/e2e/template/helmfile/testdata/snapshot/issue_2098_release_template_needs/output.yaml
@@ -1,7 +1,7 @@
---
-# Source: __workingdir__/testdata/snapshot/issue_2098_release_template_needs/input.yaml
+# Source: __workingdir__/testdata/snapshot/issue_2098_release_template_needs/input.yaml.gotmpl
-filepath: input.yaml
+filepath: input.yaml.gotmpl
helmBinary: helm
kustomizeBinary: kustomize
environments:
@@ -15,7 +15,11 @@ releases:
name: default-shared-resources
namespace: default
labels:
+ chart: util
+ name: default-shared-resources
+ namespace: default
service: shared-resources
+ syncReleaseLabels: false
- chart: aservo/util
version: 0.0.1
needs:
@@ -23,9 +27,14 @@ releases:
name: default-release-resources
namespace: default
labels:
+ chart: util
+ name: default-release-resources
+ namespace: default
service: release-resources
+ syncReleaseLabels: false
templates:
defaults:
name: default-{{ .Release.Labels.service }}
namespace: default
+ syncReleaseLabels: false
renderedvalues: {}
diff --git a/test/e2e/template/helmfile/testdata/snapshot/issue_473_oci_chart_url_fetch/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/issue_473_oci_chart_url_fetch/input.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/issue_473_oci_chart_url_fetch/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/issue_473_oci_chart_url_fetch/input.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/issue_493_template_yaml_anchors_merge/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/issue_493_template_yaml_anchors_merge/input.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/issue_493_template_yaml_anchors_merge/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/issue_493_template_yaml_anchors_merge/input.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/issue_493_template_yaml_anchors_merge/output.yaml b/test/e2e/template/helmfile/testdata/snapshot/issue_493_template_yaml_anchors_merge/output.yaml
index d799a9aa..9c7b08f7 100644
--- a/test/e2e/template/helmfile/testdata/snapshot/issue_493_template_yaml_anchors_merge/output.yaml
+++ b/test/e2e/template/helmfile/testdata/snapshot/issue_493_template_yaml_anchors_merge/output.yaml
@@ -1,3 +1,3 @@
-NAME NAMESPACE ENABLED INSTALLED LABELS CHART VERSION
-release1 myNamespace true true app:myapp,group:myGroup,project:myProject test
-release2 myNamespace true true app:myapp,group:myGroup,project:myProject test
+NAME NAMESPACE ENABLED INSTALLED LABELS CHART VERSION
+release1 myNamespace true true app:myapp,chart:test,group:myGroup,name:release1,namespace:myNamespace,project:myProject test
+release2 myNamespace true true app:myapp,chart:test,group:myGroup,name:release2,namespace:myNamespace,project:myProject test
diff --git a/test/e2e/template/helmfile/testdata/snapshot/issue_498_template_go_getter_with_selector/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/issue_498_template_go_getter_with_selector/input.yaml.gotmpl
similarity index 75%
rename from test/e2e/template/helmfile/testdata/snapshot/issue_498_template_go_getter_with_selector/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/issue_498_template_go_getter_with_selector/input.yaml.gotmpl
index 75323838..63133c54 100644
--- a/test/e2e/template/helmfile/testdata/snapshot/issue_498_template_go_getter_with_selector/input.yaml
+++ b/test/e2e/template/helmfile/testdata/snapshot/issue_498_template_go_getter_with_selector/input.yaml.gotmpl
@@ -4,7 +4,7 @@ repositories:
- name: istio
url: https://istio-release.storage.googleapis.com/charts
releases:
-- chart: git::https://github.com/joshuasimon-taulia/acme.git@charts/acme?ref=master
+- chart: git::https://github.com/jenkins-x/acme.git@charts/acme?ref=main
name: acme-jx
labels:
values.jenkins-x.io: lock
diff --git a/test/e2e/template/helmfile/testdata/snapshot/oci_chart_pull/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/oci_chart_pull/input.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/oci_chart_pull/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/oci_chart_pull/input.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/oci_need/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/oci_need/input.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/oci_need/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/oci_need/input.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/postrenderer/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/postrenderer/input.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/postrenderer/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/postrenderer/input.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/pr_560/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/pr_560/input.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/pr_560/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/pr_560/input.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/release_template_inheritance/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/release_template_inheritance/input.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/release_template_inheritance/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/release_template_inheritance/input.yaml.gotmpl
diff --git a/test/e2e/template/helmfile/testdata/snapshot/templated_lockfile/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/templated_lockfile/input.yaml.gotmpl
similarity index 100%
rename from test/e2e/template/helmfile/testdata/snapshot/templated_lockfile/input.yaml
rename to test/e2e/template/helmfile/testdata/snapshot/templated_lockfile/input.yaml.gotmpl
diff --git a/test/integration/lib/ensure.sh b/test/integration/lib/ensure.sh
index c2942b3f..fb9b137b 100644
--- a/test/integration/lib/ensure.sh
+++ b/test/integration/lib/ensure.sh
@@ -5,10 +5,10 @@
if ! hash minikube 2>/dev/null; then
fail "Minikube needs to be installed."
fi
-if [ ! $(minikube status --format '{{.MinikubeStatus}}') == "Running" ]; then
+if [ ! "$(minikube status --format '{{.Host}}')" == "Running" ]; then
fail "Minikube is not running."
fi
-if [ ! $(minikube status --format '{{.ClusterStatus}}') == "Running" ]; then
+if [ ! "$(minikube status --format '{{.APIServer}}')" == "Running" ]; then
fail "Minikube Cluster is not running."
fi
if ! kubectl version 1> /dev/null; then
diff --git a/test/integration/run.sh b/test/integration/run.sh
index 1b163a31..a2bc2708 100755
--- a/test/integration/run.sh
+++ b/test/integration/run.sh
@@ -27,7 +27,8 @@ export HELM_DATA_HOME="${helm_dir}/data"
export HELM_HOME="${HELM_DATA_HOME}"
export HELM_PLUGINS="${HELM_DATA_HOME}/plugins"
export HELM_CONFIG_HOME="${helm_dir}/config"
-HELM_DIFF_VERSION="${HELM_DIFF_VERSION:-3.9.11}"
+HELM_DIFF_VERSION="${HELM_DIFF_VERSION:-3.11.0}"
+HELM_GIT_VERSION="${HELM_GIT_VERSION:-1.3.0}"
HELM_SECRETS_VERSION="${HELM_SECRETS_VERSION:-3.15.0}"
export GNUPGHOME="${PWD}/${dir}/.gnupg"
export SOPS_PGP_FP="B2D6D7BBEC03B2E66571C8C00AD18E16CFDEF700"
@@ -69,7 +70,9 @@ function cleanup() {
set -e
trap cleanup EXIT
info "Using namespace: ${test_ns}"
-${helm} plugin ls | grep diff || ${helm} plugin install https://github.com/databus23/helm-diff --version v${HELM_DIFF_VERSION}
+info "Using Helm version:" $(${helm} version --short | grep -o 'v[0-9.]\+')
+${helm} plugin ls | grep "^diff" || ${helm} plugin install https://github.com/databus23/helm-diff --version v${HELM_DIFF_VERSION}
+${helm} plugin ls | grep "^helm-git" || ${helm} plugin install https://github.com/aslafy-z/helm-git --version v${HELM_GIT_VERSION}
info "Using Kustomize version: $(kustomize version --short | grep -o 'v[0-9.]\+')"
${kubectl} get namespace ${test_ns} &> /dev/null && warn "Namespace ${test_ns} exists, from a previous test run?"
${kubectl} create namespace ${test_ns} || fail "Could not create namespace ${test_ns}"
@@ -96,6 +99,9 @@ ${kubectl} create namespace ${test_ns} || fail "Could not create namespace ${tes
. ${dir}/test-cases/deps-mr-1011.sh
. ${dir}/test-cases/deps-kustomization-i-1402.sh
. ${dir}/test-cases/hcl-secrets.sh
+. ${dir}/test-cases/issue-1749.sh
+. ${dir}/test-cases/issue-1893.sh
+. ${dir}/test-cases/state-values-set-cli-args-in-environments.sh
# ALL DONE -----------------------------------------------------------------------------------------------------------
diff --git a/test/integration/test-cases/chart-needs.sh b/test/integration/test-cases/chart-needs.sh
index 76cc3814..2ce8e63d 100644
--- a/test/integration/test-cases/chart-needs.sh
+++ b/test/integration/test-cases/chart-needs.sh
@@ -1,14 +1,7 @@
chart_need_case_input_dir="${cases_dir}/chart-needs/input"
chart_need_case_output_dir="${cases_dir}/chart-needs/output"
-config_file="helmfile.yaml"
-if [[ ${HELMFILE_V1MODE} = true ]]; then
- pushd "${chart_need_case_input_dir}"
- mv "${config_file}" "${config_file}.gotmpl"
- config_file="${config_file}.gotmpl"
- popd
-fi
-
+config_file="helmfile.yaml.gotmpl"
chart_needs_tmp=$(mktemp -d)
chart_needs_template_reverse=${chart_needs_tmp}/chart.needs.template.log
chart_needs_lint_reverse=${chart_needs_tmp}/chart.needs.lint.log
diff --git a/test/integration/test-cases/chart-needs/input/helmfile.yaml b/test/integration/test-cases/chart-needs/input/helmfile.yaml.gotmpl
similarity index 100%
rename from test/integration/test-cases/chart-needs/input/helmfile.yaml
rename to test/integration/test-cases/chart-needs/input/helmfile.yaml.gotmpl
diff --git a/test/integration/test-cases/chartify-jsonPatches-and-strategicMergePatches.sh b/test/integration/test-cases/chartify-jsonPatches-and-strategicMergePatches.sh
index 2fd4e5d3..ea5d4a22 100644
--- a/test/integration/test-cases/chartify-jsonPatches-and-strategicMergePatches.sh
+++ b/test/integration/test-cases/chartify-jsonPatches-and-strategicMergePatches.sh
@@ -1,14 +1,7 @@
chartify_jsonPatches_and_strategicMergePatches_case_input_dir="${cases_dir}/chartify-jsonPatches-and-strategicMergePatches/input"
chartify_jsonPatches_and_strategicMergePatches_case_output_dir="${cases_dir}/chartify-jsonPatches-and-strategicMergePatches/output"
-config_file="helmfile.yaml"
-if [[ ${HELMFILE_V1MODE} = true ]]; then
- pushd "${chartify_jsonPatches_and_strategicMergePatches_case_input_dir}"
- mv "${config_file}" "${config_file}.gotmpl"
- config_file="${config_file}.gotmpl"
- popd
-fi
-
+config_file="helmfile.yaml.gotmpl"
chartify_jsonPatches_and_strategicMergePatches_tmp=$(mktemp -d)
chartify_jsonPatches_and_strategicMergePatches_template_reverse=${chartify_jsonPatches_and_strategicMergePatches_tmp}/chartify_jsonPatches_and_strategicMergePatches.template.log
diff --git a/test/integration/test-cases/chartify-jsonPatches-and-strategicMergePatches/input/helmfile.yaml b/test/integration/test-cases/chartify-jsonPatches-and-strategicMergePatches/input/helmfile.yaml.gotmpl
similarity index 100%
rename from test/integration/test-cases/chartify-jsonPatches-and-strategicMergePatches/input/helmfile.yaml
rename to test/integration/test-cases/chartify-jsonPatches-and-strategicMergePatches/input/helmfile.yaml.gotmpl
diff --git a/test/integration/test-cases/chartify.sh b/test/integration/test-cases/chartify.sh
index 581e2d00..8c6e2d3a 100644
--- a/test/integration/test-cases/chartify.sh
+++ b/test/integration/test-cases/chartify.sh
@@ -1,27 +1,22 @@
chartify_case_input_dir="${cases_dir}/chartify/input"
chartify_case_output_dir="${cases_dir}/chartify/output"
-config_file="helmfile.yaml"
-if [[ ${HELMFILE_V1MODE} = true ]]; then
- pushd "${chartify_case_input_dir}"
- mv "${config_file}" "${config_file}.gotmpl"
- config_file="${config_file}.gotmpl"
- popd
-fi
-
+config_file="helmfile.yaml.gotmpl"
chartify_tmp=$(mktemp -d)
chartify_template_reverse=${chartify_tmp}/chartify.template.log
-
test_start "helmfile template with chartify"
info "Comparing template/chartify"
-${helmfile} -f ${chartify_case_input_dir}/${config_file} template > ${chartify_template_reverse} || fail "\"helmfile template\" shouldn't fail"
+${helmfile} -f ${chartify_case_input_dir}/${config_file} template >${chartify_template_reverse} || fail "\"helmfile template\" shouldn't fail"
./dyff between -bs ${chartify_case_output_dir}/template ${chartify_template_reverse} || fail "\"helmfile template\" should be consistent"
info "Comparing template/chartify with set"
-${helmfile} -f ${chartify_case_input_dir}/${config_file} template --set image.tag=v2 > ${chartify_template_reverse} || fail "\"helmfile template\" shouldn't fail"
+${helmfile} -f ${chartify_case_input_dir}/${config_file} template --set image.tag=v2 >${chartify_template_reverse} || fail "\"helmfile template\" shouldn't fail"
./dyff between -bs ${chartify_case_output_dir}/template-set ${chartify_template_reverse} || fail "\"helmfile template\" should be consistent"
+info "Comparing template/chartify with values"
+${helmfile} -f ${chartify_case_input_dir}/${config_file} template --values "./extra-values.yaml" >${chartify_template_reverse} || fail "\"helmfile template\" shouldn't fail"
+./dyff between -bs ${chartify_case_output_dir}/template-values ${chartify_template_reverse} || fail "\"helmfile template\" should be consistent"
-test_pass "helmfile template with chartify"
\ No newline at end of file
+test_pass "helmfile template with chartify"
diff --git a/test/integration/test-cases/chartify/input/extra-values.yaml b/test/integration/test-cases/chartify/input/extra-values.yaml
new file mode 100644
index 00000000..6c94f108
--- /dev/null
+++ b/test/integration/test-cases/chartify/input/extra-values.yaml
@@ -0,0 +1,3 @@
+---
+image:
+ tag: v3
diff --git a/test/integration/test-cases/chartify/input/helmfile.yaml b/test/integration/test-cases/chartify/input/helmfile.yaml.gotmpl
similarity index 100%
rename from test/integration/test-cases/chartify/input/helmfile.yaml
rename to test/integration/test-cases/chartify/input/helmfile.yaml.gotmpl
diff --git a/test/integration/test-cases/chartify/output/template-values b/test/integration/test-cases/chartify/output/template-values
new file mode 100644
index 00000000..f34afa09
--- /dev/null
+++ b/test/integration/test-cases/chartify/output/template-values
@@ -0,0 +1,61 @@
+---
+# Source: httpbin/templates/patched_resources.yaml
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ app: httpbin
+ chart: httpbin-0.1.0
+ heritage: Helm
+ release: httpbin
+ name: httpbin-httpbin
+spec:
+ ports:
+ - name: httpbin
+ port: 8000
+ protocol: TCP
+ targetPort: 8000
+ selector:
+ app: httpbin
+ release: httpbin
+ type: LoadBalancer
+---
+# Source: httpbin/templates/patched_resources.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ app: httpbin
+ chart: httpbin-0.1.0
+ heritage: Helm
+ release: httpbin
+ name: httpbin-httpbin
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ app: httpbin
+ strategy:
+ type: Recreate
+ template:
+ metadata:
+ labels:
+ app: httpbin
+ release: httpbin
+ spec:
+ containers:
+ - image: docker.io/citizenstig/httpbin:v3
+ imagePullPolicy: Always
+ livenessProbe:
+ httpGet:
+ path: /
+ port: 8000
+ name: httpbin
+ ports:
+ - containerPort: 8000
+ readinessProbe:
+ httpGet:
+ path: /
+ port: 8000
+ resources: {}
+status: {}
diff --git a/test/integration/test-cases/cli-overwrite-environment-values.sh b/test/integration/test-cases/cli-overwrite-environment-values.sh
index 2835b849..8e51e159 100644
--- a/test/integration/test-cases/cli-overwrite-environment-values.sh
+++ b/test/integration/test-cases/cli-overwrite-environment-values.sh
@@ -6,24 +6,12 @@ cli_overwrite_environment_values_reverse=${cli_overwrite_environment_values_tmp}
case_title="cli overwrite environment values"
-if [[ ${HELMFILE_V1MODE} = true ]]; then
- test_start "$case_title for v1"
- info "Comparing ${case_title} for v1 output ${cli_overwrite_environment_values_reverse} with ${cli_overwrite_environment_values_output_dir}/overwritten.yaml"
- for i in $(seq 10); do
- info "Comparing build/cli-overwrite-environment-values #$i"
- ${helmfile} -f ${cli_overwrite_environment_values_input_dir}/input_v1.yaml.gotmpl template --state-values-set ns=test3 > ${cli_overwrite_environment_values_reverse} || fail "\"helmfile template\" shouldn't fail"
- diff -u ${cli_overwrite_environment_values_output_dir}/output_v1.yaml ${cli_overwrite_environment_values_reverse} || fail "\"helmfile template\" should be consistent"
- echo code=$?
- done
- test_pass "cli overwrite environment values for v1"
-else
- test_start "${case_title}"
- info "Comparing ${case_title} output ${cli_overwrite_environment_values_reverse} with ${cli_overwrite_environment_values_output_dir}/overwritten.yaml"
- for i in $(seq 10); do
- info "Comparing build/cli-overwrite-environment-values #$i"
- ${helmfile} -f ${cli_overwrite_environment_values_input_dir}/input_v1.yaml.gotmpl template --state-values-set ns=test3 > ${cli_overwrite_environment_values_reverse} || fail "\"helmfile template\" shouldn't fail"
- diff -u ${cli_overwrite_environment_values_output_dir}/output_v1.yaml ${cli_overwrite_environment_values_reverse} || fail "\"helmfile template\" should be consistent"
- echo code=$?
- done
- test_pass "${case_title}"
-fi
\ No newline at end of file
+test_start "$case_title"
+info "Comparing ${case_title} for output ${cli_overwrite_environment_values_reverse} with ${cli_overwrite_environment_values_output_dir}/overwritten.yaml"
+for i in $(seq 10); do
+ info "Comparing build/cli-overwrite-environment-values #$i"
+ ${helmfile} -f ${cli_overwrite_environment_values_input_dir}/input.yaml.gotmpl template --state-values-set ns=test3 --state-values-set-string imageTag=1.23.3,zone="zone1,zone2" > ${cli_overwrite_environment_values_reverse} || fail "\"helmfile template\" shouldn't fail"
+ diff -u ${cli_overwrite_environment_values_output_dir}/output.yaml ${cli_overwrite_environment_values_reverse} || fail "\"helmfile template\" should be consistent"
+ echo code=$?
+done
+test_pass "cli overwrite environment values for v1"
\ No newline at end of file
diff --git a/test/integration/test-cases/cli-overwrite-environment-values/input/input.yaml b/test/integration/test-cases/cli-overwrite-environment-values/input/input.yaml
deleted file mode 100644
index 28706d92..00000000
--- a/test/integration/test-cases/cli-overwrite-environment-values/input/input.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
-environments:
- default:
- values:
- - base.yaml
- - override.yaml
-
-repositories:
- - name: bitnami
- url: https://charts.bitnami.com/bitnami
-
-releases:
- - name: test
- chart: bitnami/nginx
- namespace: {{ .Values.ns }}
- version: 13.2.27
- values:
- - values.yaml.gotmpl
diff --git a/test/integration/test-cases/cli-overwrite-environment-values/input/input_v1.yaml.gotmpl b/test/integration/test-cases/cli-overwrite-environment-values/input/input.yaml.gotmpl
similarity index 100%
rename from test/integration/test-cases/cli-overwrite-environment-values/input/input_v1.yaml.gotmpl
rename to test/integration/test-cases/cli-overwrite-environment-values/input/input.yaml.gotmpl
diff --git a/test/integration/test-cases/cli-overwrite-environment-values/input/values.yaml.gotmpl b/test/integration/test-cases/cli-overwrite-environment-values/input/values.yaml.gotmpl
index afc1af27..a1635c7b 100644
--- a/test/integration/test-cases/cli-overwrite-environment-values/input/values.yaml.gotmpl
+++ b/test/integration/test-cases/cli-overwrite-environment-values/input/values.yaml.gotmpl
@@ -1,2 +1,5 @@
image:
- tag: {{ .Values.ns }}
\ No newline at end of file
+ tag: {{ .Values.imageTag }}
+
+podAnnotations:
+ zone: {{ .Values.zone }}
diff --git a/test/integration/test-cases/cli-overwrite-environment-values/output/output.yaml b/test/integration/test-cases/cli-overwrite-environment-values/output/output.yaml
index ae8f779c..ba0f5cd7 100644
--- a/test/integration/test-cases/cli-overwrite-environment-values/output/output.yaml
+++ b/test/integration/test-cases/cli-overwrite-environment-values/output/output.yaml
@@ -1,9 +1,3 @@
-Warning: environments and releases cannot be defined within the same YAML part. Use --- to extract the environments into a dedicated part
-Warning: environments and releases cannot be defined within the same YAML part. Use --- to extract the environments into a dedicated part
-Adding repo bitnami https://charts.bitnami.com/bitnami
-"bitnami" has been added to your repositories
-
-Templating release=test, chart=bitnami/nginx
---
# Source: nginx/templates/svc.yaml
apiVersion: v1
@@ -57,6 +51,7 @@ spec:
app.kubernetes.io/instance: test
app.kubernetes.io/managed-by: Helm
annotations:
+ zone: "zone1,zone2"
spec:
automountServiceAccountToken: false
@@ -81,7 +76,7 @@ spec:
initContainers:
containers:
- name: nginx
- image: docker.io/bitnami/nginx:test3
+ image: docker.io/bitnami/nginx:1.23.3
imagePullPolicy: "IfNotPresent"
env:
- name: BITNAMI_DEBUG
diff --git a/test/integration/test-cases/cli-overwrite-environment-values/output/output_v1.yaml b/test/integration/test-cases/cli-overwrite-environment-values/output/output_v1.yaml
deleted file mode 100644
index 04eafff0..00000000
--- a/test/integration/test-cases/cli-overwrite-environment-values/output/output_v1.yaml
+++ /dev/null
@@ -1,110 +0,0 @@
----
-# Source: nginx/templates/svc.yaml
-apiVersion: v1
-kind: Service
-metadata:
- name: test-nginx
- namespace: "test3"
- labels:
- app.kubernetes.io/name: nginx
- helm.sh/chart: nginx-13.2.27
- app.kubernetes.io/instance: test
- app.kubernetes.io/managed-by: Helm
- annotations:
-spec:
- type: LoadBalancer
- sessionAffinity: None
- externalTrafficPolicy: "Cluster"
- ports:
- - name: http
- port: 80
- targetPort: http
- selector:
- app.kubernetes.io/name: nginx
- app.kubernetes.io/instance: test
----
-# Source: nginx/templates/deployment.yaml
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: test-nginx
- namespace: "test3"
- labels:
- app.kubernetes.io/name: nginx
- helm.sh/chart: nginx-13.2.27
- app.kubernetes.io/instance: test
- app.kubernetes.io/managed-by: Helm
-spec:
- replicas: 1
- strategy:
- rollingUpdate: {}
- type: RollingUpdate
- selector:
- matchLabels:
- app.kubernetes.io/name: nginx
- app.kubernetes.io/instance: test
- template:
- metadata:
- labels:
- app.kubernetes.io/name: nginx
- helm.sh/chart: nginx-13.2.27
- app.kubernetes.io/instance: test
- app.kubernetes.io/managed-by: Helm
- annotations:
- spec:
-
- automountServiceAccountToken: false
- shareProcessNamespace: false
- serviceAccountName: default
- affinity:
- podAffinity:
-
- podAntiAffinity:
- preferredDuringSchedulingIgnoredDuringExecution:
- - podAffinityTerm:
- labelSelector:
- matchLabels:
- app.kubernetes.io/name: nginx
- app.kubernetes.io/instance: test
- topologyKey: kubernetes.io/hostname
- weight: 1
- nodeAffinity:
-
- hostNetwork: false
- hostIPC: false
- initContainers:
- containers:
- - name: nginx
- image: docker.io/bitnami/nginx:test3
- imagePullPolicy: "IfNotPresent"
- env:
- - name: BITNAMI_DEBUG
- value: "false"
- - name: NGINX_HTTP_PORT_NUMBER
- value: "8080"
- envFrom:
- ports:
- - name: http
- containerPort: 8080
- livenessProbe:
- failureThreshold: 6
- initialDelaySeconds: 30
- periodSeconds: 10
- successThreshold: 1
- timeoutSeconds: 5
- tcpSocket:
- port: http
- readinessProbe:
- failureThreshold: 3
- initialDelaySeconds: 5
- periodSeconds: 5
- successThreshold: 1
- timeoutSeconds: 3
- tcpSocket:
- port: http
- resources:
- limits: {}
- requests: {}
- volumeMounts:
- volumes:
-
diff --git a/test/integration/test-cases/happypath.sh b/test/integration/test-cases/happypath.sh
index a9778a1d..2968a554 100644
--- a/test/integration/test-cases/happypath.sh
+++ b/test/integration/test-cases/happypath.sh
@@ -2,14 +2,7 @@ test_start "happypath - simple rollout of httpbin chart"
happypath_case_input_dir="${cases_dir}/happypath/input"
happypath_case_output_dir="${cases_dir}/happypath/output"
-config_file="happypath.yaml"
-
-if [[ ${HELMFILE_V1MODE} = true ]]; then
- pushd "${happypath_case_input_dir}"
- mv "${config_file}" "${config_file}.gotmpl"
- config_file="${config_file}.gotmpl"
- popd
-fi
+config_file="happypath.yaml.gotmpl"
info "Diffing ${happypath_case_input_dir}/${config_file}"
bash -c "${helmfile} -f ${happypath_case_input_dir}/${config_file} diff --detailed-exitcode; code="'$?'"; [ "'${code}'" -eq 2 ]" || fail "unexpected exit code returned by helmfile diff"
diff --git a/test/integration/test-cases/happypath/input/happypath.yaml b/test/integration/test-cases/happypath/input/happypath.yaml.gotmpl
similarity index 100%
rename from test/integration/test-cases/happypath/input/happypath.yaml
rename to test/integration/test-cases/happypath/input/happypath.yaml.gotmpl
diff --git a/test/integration/test-cases/issue-1749.sh b/test/integration/test-cases/issue-1749.sh
new file mode 100644
index 00000000..22344957
--- /dev/null
+++ b/test/integration/test-cases/issue-1749.sh
@@ -0,0 +1,12 @@
+issue_1749_input_dir="${cases_dir}/issue-1749/input"
+helmfile_real="$(pwd)/${helmfile}"
+
+test_start "issue 1749 helmfile.d template --args --dry-run=server"
+cd "${issue_1749_input_dir}"
+${helmfile_real} template --args --dry-run=server || fail "\"issue 1749 helmfile.d template --args --dry-run=server\" shouldn't fail"
+cd -
+test_pass "issue 1749 helmfile.d template --args --dry-run=server"
+
+test_start "issue 1749 helmfile.yaml template --args --dry-run=server"
+${helmfile_real} template -f "${issue_1749_input_dir}/helmfile-2in1.yaml.gotmpl" --args --dry-run=server || fail "\"issue 1749 helmfile.yaml template --args --dry-run=server\" shouldn't fail"
+test_pass "issue 1749 helmfile.yaml template --args --dry-run=server"
diff --git a/test/integration/test-cases/issue-1749/input/helmfile-2in1.yaml.gotmpl b/test/integration/test-cases/issue-1749/input/helmfile-2in1.yaml.gotmpl
new file mode 100644
index 00000000..6f699a06
--- /dev/null
+++ b/test/integration/test-cases/issue-1749/input/helmfile-2in1.yaml.gotmpl
@@ -0,0 +1,23 @@
+releases:
+ - name: test1
+ chart: ../../../charts/raw
+ values:
+ - templates:
+ - |
+ apiVersion: v1
+ kind: ConfigMap
+ metadata:
+ name: {{`{{ .Release.Name }}`}}
+ data:
+ foo: {{`{{ (first (lookup "v1" "Namespace" "" "").items).metadata.name }}`}}
+ - name: test2
+ chart: ../../../charts/raw
+ values:
+ - templates:
+ - |
+ apiVersion: v1
+ kind: ConfigMap
+ metadata:
+ name: {{`{{ .Release.Name }}`}}
+ data:
+ foo: {{`{{ (first (lookup "v1" "Namespace" "" "").items).metadata.name }}`}}
diff --git a/test/integration/test-cases/issue-1749/input/helmfile.d/helmfile1.yaml.gotmpl b/test/integration/test-cases/issue-1749/input/helmfile.d/helmfile1.yaml.gotmpl
new file mode 100644
index 00000000..d2ec3c45
--- /dev/null
+++ b/test/integration/test-cases/issue-1749/input/helmfile.d/helmfile1.yaml.gotmpl
@@ -0,0 +1,16 @@
+repositories:
+- name: bitnami
+ url: https://charts.bitnami.com/bitnami
+
+releases:
+ - name: test1
+ chart: ../../../../charts/raw
+ values:
+ - templates:
+ - |
+ apiVersion: v1
+ kind: ConfigMap
+ metadata:
+ name: {{`{{ .Release.Name }}`}}
+ data:
+ foo: {{`{{ (first (lookup "v1" "Namespace" "" "").items).metadata.name }}`}}
diff --git a/test/integration/test-cases/issue-1749/input/helmfile.d/helmfile2.yaml.gotmpl b/test/integration/test-cases/issue-1749/input/helmfile.d/helmfile2.yaml.gotmpl
new file mode 100644
index 00000000..17e616e6
--- /dev/null
+++ b/test/integration/test-cases/issue-1749/input/helmfile.d/helmfile2.yaml.gotmpl
@@ -0,0 +1,16 @@
+repositories:
+- name: prometheus-community
+ url: https://prometheus-community.github.io/helm-charts
+
+releases:
+ - name: test2
+ chart: ../../../../charts/raw
+ values:
+ - templates:
+ - |
+ apiVersion: v1
+ kind: ConfigMap
+ metadata:
+ name: {{`{{ .Release.Name }}`}}
+ data:
+ foo: {{`{{ (first (lookup "v1" "Namespace" "" "").items).metadata.name }}`}}
diff --git a/test/integration/test-cases/issue-1893.sh b/test/integration/test-cases/issue-1893.sh
new file mode 100644
index 00000000..0306275b
--- /dev/null
+++ b/test/integration/test-cases/issue-1893.sh
@@ -0,0 +1,8 @@
+issue_1893_input_dir="${cases_dir}/issue-1893/input"
+helmfile_real="$(pwd)/${helmfile}"
+
+test_start "issue 1893 helmfile template"
+cd "${issue_1893_input_dir}"
+${helmfile_real} template || fail "\"issue 1893 helmfile template shouldn't fail"
+cd -
+test_pass "issue 1893 helmfile template"
\ No newline at end of file
diff --git a/test/integration/test-cases/issue-1893/input/helmfile.yaml b/test/integration/test-cases/issue-1893/input/helmfile.yaml
new file mode 100644
index 00000000..f52eaef8
--- /dev/null
+++ b/test/integration/test-cases/issue-1893/input/helmfile.yaml
@@ -0,0 +1,20 @@
+---
+repositories:
+- name: chartify-testdata
+ url: git+https://github.com/helmfile/chartify@testdata/charts/importvalues?ref=master
+
+releases:
+- name: importvalues
+ chart: chartify-testdata/importvalues
+ version: 0.1.0
+ transformers:
+ - apiVersion: builtin
+ kind: ValueAddTransformer
+ metadata:
+ name: add-annotation-issue
+ targets:
+ - fieldPath: metadata/annotations/issue
+ selector:
+ kind: ConfigMap
+ name: importvalues-imported-values
+ value: "1893"
\ No newline at end of file
diff --git a/test/integration/test-cases/postrender.sh b/test/integration/test-cases/postrender.sh
index 5a1a2aee..dfeab508 100644
--- a/test/integration/test-cases/postrender.sh
+++ b/test/integration/test-cases/postrender.sh
@@ -1,14 +1,7 @@
postrender_case_input_dir="${cases_dir}/postrender/input"
postrender_case_output_dir="${cases_dir}/postrender/output"
-config_file="helmfile.yaml"
-if [[ ${HELMFILE_V1MODE} = true ]]; then
- pushd "${postrender_case_input_dir}"
- mv "${config_file}" "${config_file}.gotmpl"
- config_file="${config_file}.gotmpl"
- popd
-fi
-
+config_file="helmfile.yaml.gotmpl"
postrender_diff_out_file=${postrender_case_output_dir}/diff-result
if [[ $EXTRA_HELMFILE_FLAGS == *--enable-live-output* ]]; then
postrender_diff_out_file=${postrender_case_output_dir}/diff-result-live
diff --git a/test/integration/test-cases/postrender/input/helmfile.yaml b/test/integration/test-cases/postrender/input/helmfile.yaml.gotmpl
similarity index 100%
rename from test/integration/test-cases/postrender/input/helmfile.yaml
rename to test/integration/test-cases/postrender/input/helmfile.yaml.gotmpl
diff --git a/test/integration/test-cases/regression.sh b/test/integration/test-cases/regression.sh
index 8a68d491..bc2ea412 100644
--- a/test/integration/test-cases/regression.sh
+++ b/test/integration/test-cases/regression.sh
@@ -4,44 +4,20 @@ test_start "regression tests"
regression_case_input_dir="${cases_dir}/regression/input"
info "https://github.com/roboll/helmfile/issues/1857"
-config_file="issue.1857.yaml"
-if [[ ${HELMFILE_V1MODE} = true ]]; then
- pushd "${regression_case_input_dir}"
- mv "${config_file}" "${config_file}.gotmpl"
- config_file="${config_file}.gotmpl"
- popd
-fi
+config_file="issue.1857.yaml.gotmpl"
(${helmfile} -f ${regression_case_input_dir}/${config_file} --state-values-set grafanaEnabled=true template | grep grafana 1>/dev/null) || fail "\"helmfile template\" shouldn't include grafana"
! (${helmfile} -f ${regression_case_input_dir}/${config_file} --state-values-set grafanaEnabled=false template | grep grafana) || fail "\"helmfile template\" shouldn't include grafana"
info "https://github.com/roboll/helmfile/issues/1867"
-config_file="issue.1867.yaml"
-if [[ ${HELMFILE_V1MODE} = true ]]; then
- pushd "${regression_case_input_dir}"
- mv "${config_file}" "${config_file}.gotmpl"
- config_file="${config_file}.gotmpl"
- popd
-fi
+config_file="issue.1867.yaml.gotmpl"
(${helmfile} -f ${regression_case_input_dir}/${config_file} template 1>/dev/null) || fail "\"helmfile template\" shouldn't fail"
info "https://github.com/roboll/helmfile/issues/2118"
-config_file="issue.2118.yaml"
-if [[ ${HELMFILE_V1MODE} = true ]]; then
- pushd "${regression_case_input_dir}"
- mv "${config_file}" "${config_file}.gotmpl"
- config_file="${config_file}.gotmpl"
- popd
-fi
+config_file="issue.2118.yaml.gotmpl"
(${helmfile} -f ${regression_case_input_dir}/${config_file} template 1>/dev/null) || fail "\"helmfile template\" shouldn't fail"
info "https://github.com/helmfile/helmfile/issues/1682"
-config_file="issue.1682.yaml"
-if [[ ${HELMFILE_V1MODE} = true ]]; then
- pushd "${regression_case_input_dir}"
- mv "${config_file}" "${config_file}.gotmpl"
- config_file="${config_file}.gotmpl"
- popd
-fi
+config_file="issue.1682.yaml.gotmpl"
(${helmfile} -f ${regression_case_input_dir}/${config_file} deps 1>/dev/null) || fail "\"helmfile deps\" shouldn't fail"
test_pass "regression tests"
\ No newline at end of file
diff --git a/test/integration/test-cases/regression/input/issue.1682.yaml b/test/integration/test-cases/regression/input/issue.1682.yaml.gotmpl
similarity index 100%
rename from test/integration/test-cases/regression/input/issue.1682.yaml
rename to test/integration/test-cases/regression/input/issue.1682.yaml.gotmpl
diff --git a/test/integration/test-cases/regression/input/issue.1857.yaml b/test/integration/test-cases/regression/input/issue.1857.yaml.gotmpl
similarity index 100%
rename from test/integration/test-cases/regression/input/issue.1857.yaml
rename to test/integration/test-cases/regression/input/issue.1857.yaml.gotmpl
diff --git a/test/integration/test-cases/regression/input/issue.1867.yaml b/test/integration/test-cases/regression/input/issue.1867.yaml.gotmpl
similarity index 100%
rename from test/integration/test-cases/regression/input/issue.1867.yaml
rename to test/integration/test-cases/regression/input/issue.1867.yaml.gotmpl
diff --git a/test/integration/test-cases/regression/input/issue.2118.yaml b/test/integration/test-cases/regression/input/issue.2118.yaml.gotmpl
similarity index 100%
rename from test/integration/test-cases/regression/input/issue.2118.yaml
rename to test/integration/test-cases/regression/input/issue.2118.yaml.gotmpl
diff --git a/test/integration/test-cases/secretssops.sh b/test/integration/test-cases/secretssops.sh
index b4c53f79..b5085275 100644
--- a/test/integration/test-cases/secretssops.sh
+++ b/test/integration/test-cases/secretssops.sh
@@ -4,13 +4,7 @@ sops="sops --hc-vault-transit $VAULT_ADDR/v1/sops/keys/key"
secretssops_case_input_dir="${cases_dir}/secretssops/input"
secretssops_case_output_dir="${cases_dir}/secretssops/output"
-config_file="secretssops.yaml"
-if [[ ${HELMFILE_V1MODE} = true ]]; then
- pushd "${secretssops_case_input_dir}"
- mv "${config_file}" "${config_file}.gotmpl"
- config_file="${config_file}.gotmpl"
- popd
-fi
+config_file="secretssops.yaml.gotmpl"
mkdir -p ${secretssops_case_input_dir}/tmp
diff --git a/test/integration/test-cases/secretssops/input/secretssops.yaml b/test/integration/test-cases/secretssops/input/secretssops.yaml.gotmpl
similarity index 100%
rename from test/integration/test-cases/secretssops/input/secretssops.yaml
rename to test/integration/test-cases/secretssops/input/secretssops.yaml.gotmpl
diff --git a/test/integration/test-cases/state-values-set-cli-args-in-environments.sh b/test/integration/test-cases/state-values-set-cli-args-in-environments.sh
new file mode 100644
index 00000000..e9de8f8d
--- /dev/null
+++ b/test/integration/test-cases/state-values-set-cli-args-in-environments.sh
@@ -0,0 +1,14 @@
+state_values_set_cli_args_in_environments_input_dir="${cases_dir}/state-values-set-cli-args-in-environments/input"
+state_values_set_cli_args_in_environments_output_dir="${cases_dir}/state-values-set-cli-args-in-environments/output"
+
+state_values_set_cli_args_in_environments_tmp=$(mktemp -d)
+state_values_set_cli_args_in_environments_reverse=${state_values_set_cli_args_in_environments_tmp}/state.values.set.cli.args.build.yaml
+
+test_start "state values set cli args in environments"
+info "Comparing state values set cli args environments output ${state_values_set_cli_args_in_environments_reverse} with ${state_values_set_cli_args_in_environments_output_dir}/output.yaml"
+
+${helmfile} -f ${state_values_set_cli_args_in_environments_input_dir}/helmfile.yaml.gotmpl template $(cat "$state_values_set_cli_args_in_environments_input_dir/helmfile-extra-args") --skip-deps > "${state_values_set_cli_args_in_environments_reverse}" || fail "\"helmfile template\" shouldn't fail"
+./dyff between -bs "${state_values_set_cli_args_in_environments_output_dir}/output.yaml" "${state_values_set_cli_args_in_environments_reverse}" || fail "\"helmfile template\" should be consistent"
+echo code=$?
+
+test_pass "state values set cli args in environments"
diff --git a/test/integration/test-cases/state-values-set-cli-args-in-environments/input/environments.yaml.gotmpl b/test/integration/test-cases/state-values-set-cli-args-in-environments/input/environments.yaml.gotmpl
new file mode 100644
index 00000000..e822c582
--- /dev/null
+++ b/test/integration/test-cases/state-values-set-cli-args-in-environments/input/environments.yaml.gotmpl
@@ -0,0 +1,2 @@
+---
+foo: {{ .Values.foo }}
diff --git a/test/integration/test-cases/state-values-set-cli-args-in-environments/input/helmfile-extra-args b/test/integration/test-cases/state-values-set-cli-args-in-environments/input/helmfile-extra-args
new file mode 100644
index 00000000..aed11348
--- /dev/null
+++ b/test/integration/test-cases/state-values-set-cli-args-in-environments/input/helmfile-extra-args
@@ -0,0 +1 @@
+--state-values-set foo=bar
diff --git a/test/integration/test-cases/state-values-set-cli-args-in-environments/input/helmfile.yaml.gotmpl b/test/integration/test-cases/state-values-set-cli-args-in-environments/input/helmfile.yaml.gotmpl
new file mode 100644
index 00000000..e7cefc94
--- /dev/null
+++ b/test/integration/test-cases/state-values-set-cli-args-in-environments/input/helmfile.yaml.gotmpl
@@ -0,0 +1,17 @@
+environments:
+ default:
+ values:
+ - environments.yaml.gotmpl
+---
+releases:
+- name: state-value-set-args-environments
+ chart: ../../../charts/raw
+ values:
+ - templates:
+ - |
+ apiVersion: v1
+ kind: ConfigMap
+ metadata:
+ name: test
+ data:
+ foo: {{ .Values.foo }}
diff --git a/test/integration/test-cases/state-values-set-cli-args-in-environments/output/output.yaml b/test/integration/test-cases/state-values-set-cli-args-in-environments/output/output.yaml
new file mode 100644
index 00000000..e0451d01
--- /dev/null
+++ b/test/integration/test-cases/state-values-set-cli-args-in-environments/output/output.yaml
@@ -0,0 +1,8 @@
+---
+# Source: raw/templates/resources.yaml
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: test
+data:
+ foo: bar
diff --git a/test/integration/test-cases/v1-subhelmfile-multi-bases-with-array-values.sh b/test/integration/test-cases/v1-subhelmfile-multi-bases-with-array-values.sh
index a234fb19..113f45fa 100644
--- a/test/integration/test-cases/v1-subhelmfile-multi-bases-with-array-values.sh
+++ b/test/integration/test-cases/v1-subhelmfile-multi-bases-with-array-values.sh
@@ -1,19 +1,20 @@
-if [[ ${HELMFILE_V1MODE} = true ]]; then
- v1_subhelmfile_multi_bases_with_array_values_input_dir="${cases_dir}/v1-subhelmfile-multi-bases-with-array-values/input"
- v1_subhelmfile_multi_bases_with_array_values_output_dir="${cases_dir}/v1-subhelmfile-multi-bases-with-array-values/output"
+v1_subhelmfile_multi_bases_with_array_values_input_dir="${cases_dir}/v1-subhelmfile-multi-bases-with-array-values/input"
+v1_subhelmfile_multi_bases_with_array_values_output_dir="${cases_dir}/v1-subhelmfile-multi-bases-with-array-values/output"
- yaml_overwrite_tmp=$(mktemp -d)
- yaml_overwrite_reverse=${yaml_overwrite_tmp}/helmfile_template_result
+yaml_overwrite_tmp=$(mktemp -d)
+yaml_overwrite_reverse=${yaml_overwrite_tmp}/helmfile_template_result
- test_start "v1 subhelmfile multi bases with array values"
- info "Comparing v1 subhelmfile multi bases with array values output ${yaml_overwrite_reverse} with ${v1_subhelmfile_multi_bases_with_array_values_output_dir}/result"
- for i in $(seq 10); do
- info "Comparing build/v1-subhelmfile-multi-bases-with-array-values #$i"
- ${helmfile} -f ${v1_subhelmfile_multi_bases_with_array_values_input_dir}/helmfile.yaml.gotmpl template -e dev &> ${yaml_overwrite_reverse} || fail "\"helmfile template\" shouldn't fail"
- diff -u ${v1_subhelmfile_multi_bases_with_array_values_output_dir}/result ${yaml_overwrite_reverse} || fail "\"helmfile template\" should be consistent"
- echo code=$?
- done
- test_pass "v1 subhelmfile multi bases with array values"
-else
- test_pass "[skipped] v1 subhelmfile multi bases with array values"
-fi
\ No newline at end of file
+v1_subhelmfile_multi_bases_with_array_values_output_file=${v1_subhelmfile_multi_bases_with_array_values_output_dir}/result
+if [[ $EXTRA_HELMFILE_FLAGS == *--enable-live-output* ]]; then
+ v1_subhelmfile_multi_bases_with_array_values_output_file=${v1_subhelmfile_multi_bases_with_array_values_output_dir}/result-live
+fi
+
+test_start "v1 subhelmfile multi bases with array values"
+info "Comparing v1 subhelmfile multi bases with array values output ${yaml_overwrite_reverse} with ${v1_subhelmfile_multi_bases_with_array_values_output_file}"
+for i in $(seq 10); do
+ info "Comparing build/v1-subhelmfile-multi-bases-with-array-values #$i"
+ ${helmfile} -f ${v1_subhelmfile_multi_bases_with_array_values_input_dir}/helmfile.yaml.gotmpl template -e dev &> ${yaml_overwrite_reverse} || fail "\"helmfile template\" shouldn't fail"
+ diff -u ${v1_subhelmfile_multi_bases_with_array_values_output_file} ${yaml_overwrite_reverse} || fail "\"helmfile template\" should be consistent"
+ echo code=$?
+done
+test_pass "v1 subhelmfile multi bases with array values"
\ No newline at end of file
diff --git a/test/integration/test-cases/v1-subhelmfile-multi-bases-with-array-values/output/result-live b/test/integration/test-cases/v1-subhelmfile-multi-bases-with-array-values/output/result-live
new file mode 100644
index 00000000..ba42d6c6
--- /dev/null
+++ b/test/integration/test-cases/v1-subhelmfile-multi-bases-with-array-values/output/result-live
@@ -0,0 +1,25 @@
+Live output is enabled
+Adding repo incubator https://charts.helm.sh/incubator/
+"incubator" has been added to your repositories
+
+Templating release=helmfile-test, chart=incubator/raw
+---
+# Source: raw/templates/resources.yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ labels:
+ app: raw
+ chart: raw-0.1.0
+ heritage: Helm
+ release: helmfile-test
+ name: test
+spec:
+ containers:
+ - command:
+ - /bin/sh
+ - -c
+ - env
+ image: registry.k8s.io/busybox
+ name: test-container
+
diff --git a/test/integration/test-cases/yaml-overwrite.sh b/test/integration/test-cases/yaml-overwrite.sh
index a4a45825..617d8f97 100644
--- a/test/integration/test-cases/yaml-overwrite.sh
+++ b/test/integration/test-cases/yaml-overwrite.sh
@@ -1,19 +1,15 @@
-if [[ ${HELMFILE_V1MODE} = true ]]; then
- yaml_overwrite_case_input_dir="${cases_dir}/yaml-overwrite/input"
- yaml_overwrite_case_output_dir="${cases_dir}/yaml-overwrite/output"
+yaml_overwrite_case_input_dir="${cases_dir}/yaml-overwrite/input"
+yaml_overwrite_case_output_dir="${cases_dir}/yaml-overwrite/output"
- yaml_overwrite_tmp=$(mktemp -d)
- yaml_overwrite_reverse=${yaml_overwrite_tmp}/yaml.override.build.yaml
+yaml_overwrite_tmp=$(mktemp -d)
+yaml_overwrite_reverse=${yaml_overwrite_tmp}/yaml.override.build.yaml
- test_start "yaml overwrite feature"
- info "Comparing yaml overwrite feature output ${yaml_overwrite_reverse} with ${yaml_overwrite_case_output_dir}/overwritten.yaml"
- for i in $(seq 10); do
- info "Comparing build/yaml-overwrite #$i"
- ${helmfile} -f ${yaml_overwrite_case_input_dir}/issue.657.yaml.gotmpl template --skip-deps > ${yaml_overwrite_reverse} || fail "\"helmfile template\" shouldn't fail"
- ./dyff between -bs ${yaml_overwrite_case_output_dir}/overwritten.yaml ${yaml_overwrite_reverse} || fail "\"helmfile template\" should be consistent"
- echo code=$?
- done
- test_pass "yaml overwrite feature"
-else
- test_pass "[skipped] yaml overwrite feature"
-fi
\ No newline at end of file
+test_start "yaml overwrite feature"
+info "Comparing yaml overwrite feature output ${yaml_overwrite_reverse} with ${yaml_overwrite_case_output_dir}/overwritten.yaml"
+for i in $(seq 10); do
+ info "Comparing build/yaml-overwrite #$i"
+ ${helmfile} -f ${yaml_overwrite_case_input_dir}/issue.657.yaml.gotmpl template --skip-deps > ${yaml_overwrite_reverse} || fail "\"helmfile template\" shouldn't fail"
+ ./dyff between -bs ${yaml_overwrite_case_output_dir}/overwritten.yaml ${yaml_overwrite_reverse} || fail "\"helmfile template\" should be consistent"
+ echo code=$?
+done
+test_pass "yaml overwrite feature"
\ No newline at end of file