Hello community, here is the log from the commit of package helmfile for openSUSE:Factory checked in at 2020-07-27 17:39:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/helmfile (Old) and /work/SRC/openSUSE:Factory/.helmfile.new.3592 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "helmfile" Mon Jul 27 17:39:23 2020 rev:2 rq:822748 version:0.125.0 Changes: -------- --- /work/SRC/openSUSE:Factory/helmfile/helmfile.changes 2020-07-24 09:56:59.065467038 +0200 +++ /work/SRC/openSUSE:Factory/.helmfile.new.3592/helmfile.changes 2020-07-27 17:40:07.130983968 +0200 @@ -1,0 +2,26 @@ +Fri Jul 24 12:50:14 UTC 2020 - Manfred Hollstein <manfre...@gmx.net> + +- v0.125.0: Add pre/postuninstall hooks (#1375) + * ee8ea50 (HEAD, tag: v0.125.0, origin/master, origin/HEAD, master) + Add pre/postuninstall hooks (#1375) + * b5830a3 Add ability to use go-getter for fetching remote manifests + directory as chart (#1374) + +- v0.124.0: Add disableValidation and disableOpenAPIValidation per + release (#1373) + * 4fde6e1 (HEAD, tag: v0.124.0, master) Add disableValidation and + disableOpenAPIValidation per release (#1373) + * a5e790c Add Jenkins OSS to the list of users (#1372) + * 1e956ae Fix list failure when patches are used (#1371) + +- v0.123.0: Bump variantdev/vals for better Variant KV v2 support + (#1367) + * 1671b8b (HEAD, tag: v0.123.0, origin/master, origin/HEAD, master) + Bump variantdev/vals for better Variant KV v2 support (#1367) + +- v0.122.2: Bump chartify to 0.3.11 (#1366) + * 608ba19 (HEAD, tag: v0.122.2, origin/master, origin/HEAD, master) + Bump chartify to 0.3.11 (#1366) + * daf7d3b fix the issue in the documentation (#1364) + +------------------------------------------------------------------- Old: ---- helmfile-0.121.1.tar.gz New: ---- helmfile-0.125.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ helmfile.spec ++++++ --- /var/tmp/diff_new_pack.jzVwQR/_old 2020-07-27 17:40:12.658989158 +0200 +++ /var/tmp/diff_new_pack.jzVwQR/_new 2020-07-27 17:40:12.662989162 +0200 @@ -16,9 +16,9 @@ # Please submit bugfixes or comments via https://bugs.opensuse.org/ # -%define git_commit 4bbb1699a3d35b0af68630f7df7312dd63df6c88 +%define git_commit ee8ea507a6c33eb0ce288059856c37fdee88f4d0 Name: helmfile -Version: 0.121.1 +Version: 0.125.0 Release: 0 Summary: Deploy Kubernetes Helm Charts License: MIT @@ -50,7 +50,7 @@ go build -mod=vendor -buildmode=pie %install -make TAG=%{version} install +make TAG=v%{version} install mkdir -p %{buildroot}%{_bindir} install -m755 ${HOME}/go/bin/helmfile %{buildroot}/%{_bindir}/helmfile ++++++ _service ++++++ --- /var/tmp/diff_new_pack.jzVwQR/_old 2020-07-27 17:40:12.694989192 +0200 +++ /var/tmp/diff_new_pack.jzVwQR/_new 2020-07-27 17:40:12.694989192 +0200 @@ -5,7 +5,7 @@ <param name="exclude">.git</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> - <param name="revision">v0.121.1</param> + <param name="revision">v0.125.0</param> <param name="changesgenerate">enable</param> </service> <service name="recompress" mode="disabled"> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.jzVwQR/_old 2020-07-27 17:40:12.710989207 +0200 +++ /var/tmp/diff_new_pack.jzVwQR/_new 2020-07-27 17:40:12.710989207 +0200 @@ -1,4 +1,4 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/roboll/helmfile.git</param> - <param name="changesrevision">4bbb1699a3d35b0af68630f7df7312dd63df6c88</param></service></servicedata> + <param name="changesrevision">ee8ea507a6c33eb0ce288059856c37fdee88f4d0</param></service></servicedata> ++++++ helmfile-0.121.1.tar.gz -> helmfile-0.125.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.121.1/Dockerfile new/helmfile-0.125.0/Dockerfile --- old/helmfile-0.121.1/Dockerfile 2020-07-17 02:41:05.000000000 +0200 +++ new/helmfile-0.125.0/Dockerfile 2020-07-22 18:09:36.000000000 +0200 @@ -28,7 +28,7 @@ # we should be able to install using apk add. ENV KUBECTL_VERSION="v1.14.5" ENV KUBECTL_SHA256="26681319de56820a8467c9407e9203d5b15fb010ffc75ac5b99c9945ad0bd28c" -RUN curl --retry 3 -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \ +RUN curl --retry 3 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \ sha256sum kubectl | grep ${KUBECTL_SHA256} && \ chmod +x kubectl && \ mv kubectl /usr/local/bin/kubectl diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.121.1/Dockerfile.helm3 new/helmfile-0.125.0/Dockerfile.helm3 --- old/helmfile-0.121.1/Dockerfile.helm3 2020-07-17 02:41:05.000000000 +0200 +++ new/helmfile-0.125.0/Dockerfile.helm3 2020-07-22 18:09:36.000000000 +0200 @@ -27,7 +27,7 @@ # we should be able to install using apk add. ENV KUBECTL_VERSION="v1.14.5" ENV KUBECTL_SHA256="26681319de56820a8467c9407e9203d5b15fb010ffc75ac5b99c9945ad0bd28c" -RUN curl --retry 3 -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \ +RUN curl --retry 3 --retry-connrefused -LO "https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \ sha256sum kubectl | grep ${KUBECTL_SHA256} && \ chmod +x kubectl && \ mv kubectl /usr/local/bin/kubectl diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.121.1/README.md new/helmfile-0.125.0/README.md --- old/helmfile-0.121.1/README.md 2020-07-17 02:41:05.000000000 +0200 +++ new/helmfile-0.125.0/README.md 2020-07-22 18:09:36.000000000 +0200 @@ -672,7 +672,7 @@ `values.yaml.gotmpl` ```yaml -domain: {{ .Values | get "my.domain" "dev.example.com" }} +domain: {{ .Values | get "domain" "dev.example.com" }} ``` `helmfile sync` installs `myapp` with the value `domain=dev.example.com`, @@ -957,6 +957,8 @@ - `prepare` - `presync` +- `preuninstall` +- `postuninstall` - `postsync` - `cleanup` @@ -964,9 +966,15 @@ Hooks associated to `cleanup` events are triggered after each release is processed. -Hooks associated to `presync` events are triggered before each release is applied to the remote cluster. This is the ideal event to execute any commands that may mutate the cluster state as it will not be run for read-only operations like `lint`, `diff` or `template`. +Hooks associated to `presync` events are triggered before each release is applied to the remote cluster. +This is the ideal event to execute any commands that may mutate the cluster state as it will not be run for read-only operations like `lint`, `diff` or `template`. -Hooks associated to `postsync` events are triggered after each release is applied to the remote cluster. This is the ideal event to execute any commands that may mutate the cluster state as it will not be run for read-only operations like `lint`, `diff` or `template`. +`preuninstall` hooks are triggered immediately before a release is uninstalled as part of `helmfile apply`, `helmfile sync`, `helmfile delete`, and `helmfile destroy`. + +Hooks associated to `postsync` events are triggered after each release is applied to the remote cluster. +This is the ideal event to execute any commands that may mutate the cluster state as it will not be run for read-only operations like `lint`, `diff` or `template`. + +`postuninstall` hooks are triggered immediately after successful uninstall of a release while running `helmfile apply`, `helmfile sync`, `helmfile delete`, `helmfile destroy`. The following is an example hook that just prints the contextual information provided to hook: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.121.1/USERS.md new/helmfile-0.125.0/USERS.md --- old/helmfile-0.121.1/USERS.md 2020-07-17 02:41:05.000000000 +0200 +++ new/helmfile-0.125.0/USERS.md 2020-07-22 18:09:36.000000000 +0200 @@ -22,4 +22,5 @@ | [American Express](https://www.americanexpress.com) | proof-of-concept | Orchestration of both internal cluster workloads and local developer environments. | London, GB | January 2020 | | [Sportradar](https://www.sportradar.com) | production | Since mid-2019, we've been deploying our core infrastructure and several application stacks with Helmfile. | St. Gallen, Switzerland | March 2020 | | [PedidosYa](https://www.pedidosya.com) | production | | Montevideo, Uruguay | June 2020 | +| [Jenkins OSS](https://jenkins.io) | production | [jenkins-infra/charts](https://github.com/jenkins-infra/charts) | * | July 2020 | <!-- TABLE_END --> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.121.1/go.mod new/helmfile-0.125.0/go.mod --- old/helmfile-0.121.1/go.mod 2020-07-17 02:41:05.000000000 +0200 +++ new/helmfile-0.125.0/go.mod 2020-07-22 18:09:36.000000000 +0200 @@ -24,10 +24,9 @@ github.com/spf13/cobra v0.0.3 github.com/tatsushid/go-prettytable v0.0.0-20141013043238-ed2d14c29939 github.com/urfave/cli v1.20.0 - github.com/variantdev/chartify v0.3.8 + github.com/variantdev/chartify v0.3.11 github.com/variantdev/dag v0.0.0-20191028002400-bb0b3c785363 - github.com/variantdev/vals v0.7.1 - go.mozilla.org/sops v0.0.0-20190912205235-14a22d7a7060 // indirect + github.com/variantdev/vals v0.10.0 go.uber.org/multierr v1.1.0 go.uber.org/zap v1.9.1 golang.org/x/crypto v0.0.0-20191029031824-8986dd9e96cf // indirect diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.121.1/go.sum new/helmfile-0.125.0/go.sum --- old/helmfile-0.121.1/go.sum 2020-07-17 02:41:05.000000000 +0200 +++ new/helmfile-0.125.0/go.sum 2020-07-22 18:09:36.000000000 +0200 @@ -167,6 +167,8 @@ github.com/aws/aws-sdk-go v1.25.22/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.29.34 h1:yrzwfDaZFe9oT4AmQeNNunSQA7c0m2chz0B43+bJ1ok= github.com/aws/aws-sdk-go v1.29.34/go.mod h1:1KvfttTE3SPKMpo8g2c6jL3ZKfXtFvKscTgahTma5Xg= +github.com/aws/aws-sdk-go v1.30.7 h1:IaXfqtioP6p9SFAnNfsqdNczbR5UNbYqvcZUSsCAdTY= +github.com/aws/aws-sdk-go v1.30.7/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -260,6 +262,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fujiwara/tfstate-lookup v0.0.4 h1:NGH9y+U4RDO3ooMYjK+fq1iYAkrBfCNZbZwX4HqQnBo= github.com/fujiwara/tfstate-lookup v0.0.4/go.mod h1:kluvnw25uJ8bszZldMoewWxylt7QFvuzTGN+Rr911qs= +github.com/fujiwara/tfstate-lookup v0.0.9 h1:U/iAQusJBJ5EsxdU48rZGaUSMiZmK8cTCkyCJpiFnMw= +github.com/fujiwara/tfstate-lookup v0.0.9/go.mod h1:08o5Rm5pKzvIxoZe3D0NIT8AHYBqTzyUU03BZ/c0IKA= github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa h1:RDBNVkRviHZtvDvId8XSGPu3rmpmSe+wKRcEWNgsfWU= github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= github.com/gammazero/deque v0.0.0-20190130191400-2afb3858e9c7 h1:D2LrfOPgGHQprIxmsTpxtzhpmF66HoM6rXSmcqaX7h8= @@ -535,6 +539,8 @@ github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= +github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/joyent/triton-go v0.0.0-20190112182421-51ffac552869/go.mod h1:U+RSyWxWd04xTqnuOQxnai7XGS2PrPY2cfGoDKtMHjA= github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -771,6 +777,7 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.0 h1:DMOzIV76tmoDNE9pX6RSN0aDtCYeCg5VueieJaAo1uw= github.com/stretchr/testify v1.5.0/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= 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= @@ -814,6 +821,12 @@ github.com/variantdev/chartify v0.3.7/go.mod h1:0tw+4doFHsNnhttYx7I9Pv/dsZ82BD4UuTV9saBOcfw= github.com/variantdev/chartify v0.3.8 h1:EnFMwgDHsadvDWr9oUSwtdcIFEtoPLiUmmIEVRHrrrg= github.com/variantdev/chartify v0.3.8/go.mod h1:0tw+4doFHsNnhttYx7I9Pv/dsZ82BD4UuTV9saBOcfw= +github.com/variantdev/chartify v0.3.9 h1:pkfnXOsMd3PT6zpQDmKYIPJws1UlKe7QQhlIX0wLJ+I= +github.com/variantdev/chartify v0.3.9/go.mod h1:0tw+4doFHsNnhttYx7I9Pv/dsZ82BD4UuTV9saBOcfw= +github.com/variantdev/chartify v0.3.10 h1:hi/9z0GPPOKAubemWhJwwsnYJnCKKdIZyo1ouOF6M7Q= +github.com/variantdev/chartify v0.3.10/go.mod h1:0tw+4doFHsNnhttYx7I9Pv/dsZ82BD4UuTV9saBOcfw= +github.com/variantdev/chartify v0.3.11 h1:+jknp9CQ4kvgVMifuwxuu8/5UAVajuNrPBLWnTCTNpA= +github.com/variantdev/chartify v0.3.11/go.mod h1:0tw+4doFHsNnhttYx7I9Pv/dsZ82BD4UuTV9saBOcfw= github.com/variantdev/dag v0.0.0-20191028002400-bb0b3c785363 h1:KrfQBEUn+wEOQ/6UIfoqRDvn+Q/wZridQ7t0G1vQqKE= github.com/variantdev/dag v0.0.0-20191028002400-bb0b3c785363/go.mod h1:pH1TQsNSLj2uxMo9NNl9zdGy01Wtn+/2MT96BrKmVyE= github.com/variantdev/vals v0.4.0 h1:O1O7/sWhlvozcY2DjZBzlE1notxwVo6UBT1+w7HsO/k= @@ -824,6 +837,10 @@ github.com/variantdev/vals v0.6.0/go.mod h1:28iJwAamsfHevGLXO7QKmVWmwa79xM06sRjw8eGY73U= github.com/variantdev/vals v0.7.1 h1:SXhRvduRposBURQPB+/h4LyY6/t7VydVlQLWGDu9Go4= github.com/variantdev/vals v0.7.1/go.mod h1:28iJwAamsfHevGLXO7QKmVWmwa79xM06sRjw8eGY73U= +github.com/variantdev/vals v0.9.3 h1:l9AT8UgvgU1GBADg5ZPssDVkZTkRr9SaVjvinVjQebk= +github.com/variantdev/vals v0.9.3/go.mod h1:tAQZUHZAYfgNJJ3BzmUDXeN+r6RLk0HQPSQ+gdYSP5I= +github.com/variantdev/vals v0.10.0 h1:2diYujperePiJGQbQx5TEjWzhM0J7WM5+8UZnPXiaOc= +github.com/variantdev/vals v0.10.0/go.mod h1:tAQZUHZAYfgNJJ3BzmUDXeN+r6RLk0HQPSQ+gdYSP5I= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.121.1/pkg/app/app.go new/helmfile-0.125.0/pkg/app/app.go --- old/helmfile-0.121.1/pkg/app/app.go 2020-07-17 02:41:05.000000000 +0200 +++ new/helmfile-0.125.0/pkg/app/app.go 2020-07-22 18:09:36.000000000 +0200 @@ -342,7 +342,7 @@ func (a *App) PrintState(c StateConfigProvider) error { return a.VisitDesiredStatesWithReleasesFiltered(a.FileOrDir, func(st *state.HelmState) (errs []error) { - err := NewRun(st, nil, NewContext()).withPreparedCharts(false, "build", func() { + err := NewRun(st, a.getHelm(st), NewContext()).withPreparedCharts(false, "build", func() { state, err := st.ToYaml() if err != nil { errs = []error{err} @@ -365,7 +365,7 @@ var releases []*HelmRelease err := a.VisitDesiredStatesWithReleasesFiltered(a.FileOrDir, func(st *state.HelmState) []error { - err := NewRun(st, nil, NewContext()).withPreparedCharts(false, "list", func() { + err := NewRun(st, a.getHelm(st), NewContext()).withPreparedCharts(false, "list", func() { //var releases m for _, r := range st.Releases { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.121.1/pkg/app/app_test.go new/helmfile-0.125.0/pkg/app/app_test.go --- old/helmfile-0.121.1/pkg/app/app_test.go 2020-07-17 02:41:05.000000000 +0200 +++ new/helmfile-0.125.0/pkg/app/app_test.go 2020-07-22 18:09:36.000000000 +0200 @@ -2373,16 +2373,16 @@ "/path/to/helmfile.yaml": ` releases: - name: myrelease1 - chart: mychart1 + chart: stable/mychart1 - name: myrelease2 - chart: mychart2 + chart: stable/mychart2 `, } var helm = &mockHelmExec{} var wantReleases = []mockTemplates{ - {name: "myrelease1", chart: "mychart1", flags: []string{"--namespace", "testNamespace", "--set", "foo=a", "--set", "bar=b", "--output-dir", "output/subdir/helmfile-[a-z0-9]{8}-myrelease1"}}, - {name: "myrelease2", chart: "mychart2", flags: []string{"--namespace", "testNamespace", "--set", "foo=a", "--set", "bar=b", "--output-dir", "output/subdir/helmfile-[a-z0-9]{8}-myrelease2"}}, + {name: "myrelease1", chart: "stable/mychart1", flags: []string{"--namespace", "testNamespace", "--set", "foo=a", "--set", "bar=b", "--output-dir", "output/subdir/helmfile-[a-z0-9]{8}-myrelease1"}}, + {name: "myrelease2", chart: "stable/mychart2", flags: []string{"--namespace", "testNamespace", "--set", "foo=a", "--set", "bar=b", "--output-dir", "output/subdir/helmfile-[a-z0-9]{8}-myrelease2"}}, } var buffer bytes.Buffer @@ -2407,7 +2407,9 @@ valsRuntime: valsRuntime, }, files) - app.Template(configImpl{set: []string{"foo=a", "bar=b"}}) + if err := app.Template(configImpl{set: []string{"foo=a", "bar=b"}}); err != nil { + t.Fatalf("%v", err) + } for i := range wantReleases { if wantReleases[i].name != helm.templated[i].name { @@ -2438,13 +2440,13 @@ - helmfile.test/v2 releases: - name: myrelease1 - chart: mychart1 + chart: stable/mychart1 `, } var helm = &mockHelmExec{} var wantReleases = []mockTemplates{ - {name: "myrelease1", chart: "mychart1", flags: []string{"--api-versions", "helmfile.test/v1", "--api-versions", "helmfile.test/v2", "--namespace", "testNamespace", "--output-dir", "output/subdir/helmfile-[a-z0-9]{8}-myrelease1"}}, + {name: "myrelease1", chart: "stable/mychart1", flags: []string{"--api-versions", "helmfile.test/v1", "--api-versions", "helmfile.test/v2", "--namespace", "testNamespace", "--output-dir", "output/subdir/helmfile-[a-z0-9]{8}-myrelease1"}}, } var buffer bytes.Buffer @@ -2469,7 +2471,9 @@ valsRuntime: valsRuntime, }, files) - app.Template(configImpl{}) + if err := app.Template(configImpl{}); err != nil { + t.Fatalf("%v", err) + } for i := range wantReleases { if wantReleases[i].name != helm.templated[i].name { @@ -2803,16 +2807,16 @@ "/path/to/helmfile.yaml": ` releases: - name: bar - chart: mychart2 + chart: stable/mychart2 - name: foo - chart: mychart1 + chart: stable/mychart1 installed: false needs: - bar `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: nil, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: nil, }, lists: map[exectest.ListKey]string{ exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault--deployed--failed--pending"}: ``, @@ -2833,19 +2837,19 @@ "/path/to/helmfile.yaml": ` releases: - name: baz - chart: mychart3 + chart: stable/mychart3 - name: foo - chart: mychart1 + chart: stable/mychart1 needs: - bar - name: bar - chart: mychart2 + chart: stable/mychart2 `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "baz", Chart: "mychart3", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "baz", Chart: "stable/mychart3", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, lists: map[exectest.ListKey]string{}, upgraded: []exectest.Release{ @@ -2862,13 +2866,13 @@ 0: 1: releases: 2: - name: baz - 3: chart: mychart3 + 3: chart: stable/mychart3 4: - name: foo - 5: chart: mychart1 + 5: chart: stable/mychart1 6: needs: 7: - bar 8: - name: bar - 9: chart: mychart2 + 9: chart: stable/mychart2 10: first-pass produced: &{default map[] map[]} @@ -2880,22 +2884,22 @@ 0: 1: releases: 2: - name: baz - 3: chart: mychart3 + 3: chart: stable/mychart3 4: - name: foo - 5: chart: mychart1 + 5: chart: stable/mychart1 6: needs: 7: - bar 8: - name: bar - 9: chart: mychart2 + 9: chart: stable/mychart2 10: merged environment: &{default map[] map[]} 3 release(s) found in helmfile.yaml Affected releases are: - bar (mychart2) UPDATED - baz (mychart3) UPDATED - foo (mychart1) UPDATED + bar (stable/mychart2) UPDATED + baz (stable/mychart3) UPDATED + foo (stable/mychart1) UPDATED processing 2 groups of releases in this order: GROUP RELEASES @@ -2909,10 +2913,10 @@ getting deployed release version failed:unexpected list key: {^foo$ --kube-contextdefault--deployed--failed--pending} UPDATED RELEASES: -NAME CHART VERSION -baz mychart3 -bar mychart2 -foo mychart1 +NAME CHART VERSION +baz stable/mychart3 +bar stable/mychart2 +foo stable/mychart1 `, }, @@ -2926,16 +2930,16 @@ "/path/to/helmfile.yaml": ` releases: - name: bar - chart: mychart2 + chart: stable/mychart2 - name: foo - chart: mychart1 + chart: stable/mychart1 needs: - bar `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, upgraded: []exectest.Release{ {Name: "bar", Flags: []string{}}, @@ -2949,16 +2953,16 @@ "/path/to/helmfile.yaml": ` releases: - name: foo - chart: mychart1 + chart: stable/mychart1 - name: bar - chart: mychart2 + chart: stable/mychart2 needs: - foo `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, upgraded: []exectest.Release{ {Name: "foo", Flags: []string{}}, @@ -2973,16 +2977,16 @@ "/path/to/helmfile.yaml": ` releases: - name: bar - chart: mychart2 + chart: stable/mychart2 - name: foo - chart: mychart1 + chart: stable/mychart1 needs: - bar `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--namespacetestNamespace--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--namespacetestNamespace--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-contextdefault--namespacetestNamespace--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--namespacetestNamespace--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, upgraded: []exectest.Release{ {Name: "bar", Flags: []string{}}, @@ -2997,16 +3001,16 @@ "/path/to/helmfile.yaml": ` releases: - name: foo - chart: mychart1 + chart: stable/mychart1 - name: bar - chart: mychart2 + chart: stable/mychart2 needs: - foo `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--namespacetestNamespace--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--namespacetestNamespace--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-contextdefault--namespacetestNamespace--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--namespacetestNamespace--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, upgraded: []exectest.Release{ {Name: "foo", Flags: []string{}}, @@ -3020,18 +3024,18 @@ "/path/to/helmfile.yaml": ` releases: - name: foo - chart: mychart1 + chart: stable/mychart1 namespace: ns1 needs: - ns2/bar - name: bar - chart: mychart2 + chart: stable/mychart2 namespace: ns2 `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--namespacens2--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--namespacens1--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-contextdefault--namespacens2--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--namespacens1--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, upgraded: []exectest.Release{ {Name: "bar", Flags: []string{"--kube-context", "default", "--namespace", "ns2"}}, @@ -3045,18 +3049,18 @@ "/path/to/helmfile.yaml": ` releases: - name: bar - chart: mychart2 + chart: stable/mychart2 namespace: ns2 needs: - ns1/foo - name: foo - chart: mychart1 + chart: stable/mychart1 namespace: ns1 `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--namespacens2--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--namespacens1--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-contextdefault--namespacens2--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--namespacens1--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, upgraded: []exectest.Release{ {Name: "foo", Flags: []string{"--kube-context", "default", "--namespace", "ns1"}}, @@ -3071,20 +3075,20 @@ "/path/to/helmfile.yaml": ` releases: - name: foo - chart: mychart1 + chart: stable/mychart1 namespace: ns1 tillerNamespace: tns1 needs: - tns2/ns2/bar - name: bar - chart: mychart2 + chart: stable/mychart2 namespace: ns2 tillerNamespace: tns2 `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--tiller-namespacetns2--kube-contextdefault--namespacens2--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--tiller-namespacetns1--kube-contextdefault--namespacens1--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--tiller-namespacetns2--kube-contextdefault--namespacens2--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "foo", Chart: "stable/mychart1", Flags: "--tiller-namespacetns1--kube-contextdefault--namespacens1--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, upgraded: []exectest.Release{ {Name: "bar", Flags: []string{"--tiller-namespace", "tns2", "--kube-context", "default", "--namespace", "ns2"}}, @@ -3098,20 +3102,20 @@ "/path/to/helmfile.yaml": ` releases: - name: bar - chart: mychart2 + chart: stable/mychart2 namespace: ns2 tillerNamespace: tns2 needs: - tns1/ns1/foo - name: foo - chart: mychart1 + chart: stable/mychart1 namespace: ns1 tillerNamespace: tns1 `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--tiller-namespacetns2--kube-contextdefault--namespacens2--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--tiller-namespacetns1--kube-contextdefault--namespacens1--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--tiller-namespacetns2--kube-contextdefault--namespacens2--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "foo", Chart: "stable/mychart1", Flags: "--tiller-namespacetns1--kube-contextdefault--namespacens1--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, upgraded: []exectest.Release{ {Name: "foo", Flags: []string{"--tiller-namespace", "tns1", "--kube-context", "default", "--namespace", "ns1"}}, @@ -3126,13 +3130,13 @@ 0: 1: releases: 2: - name: bar - 3: chart: mychart2 + 3: chart: stable/mychart2 4: namespace: ns2 5: tillerNamespace: tns2 6: needs: 7: - tns1/ns1/foo 8: - name: foo - 9: chart: mychart1 + 9: chart: stable/mychart1 10: namespace: ns1 11: tillerNamespace: tns1 12: @@ -3146,13 +3150,13 @@ 0: 1: releases: 2: - name: bar - 3: chart: mychart2 + 3: chart: stable/mychart2 4: namespace: ns2 5: tillerNamespace: tns2 6: needs: 7: - tns1/ns1/foo 8: - name: foo - 9: chart: mychart1 + 9: chart: stable/mychart1 10: namespace: ns1 11: tillerNamespace: tns1 12: @@ -3161,8 +3165,8 @@ 2 release(s) found in helmfile.yaml Affected releases are: - bar (mychart2) UPDATED - foo (mychart1) UPDATED + bar (stable/mychart2) UPDATED + foo (stable/mychart1) UPDATED processing 2 groups of releases in this order: GROUP RELEASES @@ -3175,9 +3179,9 @@ getting deployed release version failed:unexpected list key: {^bar$ --tiller-namespacetns2--kube-contextdefault--deployed--failed--pending} UPDATED RELEASES: -NAME CHART VERSION -foo mychart1 -bar mychart2 +NAME CHART VERSION +foo stable/mychart1 +bar stable/mychart2 `, }, @@ -3191,18 +3195,18 @@ "/path/to/helmfile.yaml": ` releases: - name: bar - chart: mychart2 + chart: stable/mychart2 installed: false - name: foo - chart: mychart1 + chart: stable/mychart1 installed: false needs: - bar `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, lists: map[exectest.ListKey]string{ exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE @@ -3224,18 +3228,18 @@ "/path/to/helmfile.yaml": ` releases: - name: bar - chart: mychart2 + chart: stable/mychart2 installed: false needs: - foo - name: foo - chart: mychart1 + chart: stable/mychart1 installed: false `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, lists: map[exectest.ListKey]string{ exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE @@ -3260,17 +3264,17 @@ "/path/to/helmfile.yaml": ` releases: - name: bar - chart: mychart2 + chart: stable/mychart2 - name: foo - chart: mychart1 + chart: stable/mychart1 installed: false needs: - bar `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, lists: map[exectest.ListKey]string{ exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE @@ -3294,17 +3298,17 @@ "/path/to/helmfile.yaml": ` releases: - name: bar - chart: mychart2 + chart: stable/mychart2 installed: false - name: foo - chart: mychart1 + chart: stable/mychart1 needs: - bar `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, lists: map[exectest.ListKey]string{ exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE @@ -3328,17 +3332,17 @@ "/path/to/helmfile.yaml": ` releases: - name: foo - chart: mychart1 + chart: stable/mychart1 installed: false - name: bar - chart: mychart2 + chart: stable/mychart2 needs: - foo `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, lists: map[exectest.ListKey]string{ exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE @@ -3362,17 +3366,17 @@ "/path/to/helmfile.yaml": ` releases: - name: foo - chart: mychart1 + chart: stable/mychart1 - name: bar - chart: mychart2 + chart: stable/mychart2 installed: false needs: - foo `, }, diffs: map[exectest.DiffKey]error{ - exectest.DiffKey{Name: "bar", Chart: "mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, - exectest.DiffKey{Name: "foo", Chart: "mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "bar", Chart: "stable/mychart2", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, + exectest.DiffKey{Name: "foo", Chart: "stable/mychart1", Flags: "--kube-contextdefault--detailed-exitcode"}: helmexec.ExitError{Code: 2}, }, lists: map[exectest.ListKey]string{ exectest.ListKey{Filter: "^foo$", Flags: "--kube-contextdefault--deployed--failed--pending"}: `NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.121.1/pkg/app/run.go new/helmfile-0.125.0/pkg/app/run.go --- old/helmfile-0.121.1/pkg/app/run.go 2020-07-17 02:41:05.000000000 +0200 +++ new/helmfile-0.125.0/pkg/app/run.go 2020-07-22 18:09:36.000000000 +0200 @@ -22,6 +22,10 @@ } func NewRun(st *state.HelmState, helm helmexec.Interface, ctx Context) *Run { + if helm == nil { + panic("Assertion failed: helmexec.Interface must not be nil") + } + return &Run{state: st, helm: helm, ctx: ctx} } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.121.1/pkg/state/helmx.go new/helmfile-0.125.0/pkg/state/helmx.go --- old/helmfile-0.121.1/pkg/state/helmx.go 2020-07-17 02:41:05.000000000 +0200 +++ new/helmfile-0.125.0/pkg/state/helmx.go 2020-07-22 18:09:36.000000000 +0200 @@ -1,7 +1,9 @@ package state import ( + "fmt" "github.com/roboll/helmfile/pkg/helmexec" + "github.com/roboll/helmfile/pkg/remote" "github.com/variantdev/chartify" "os" "path/filepath" @@ -22,20 +24,66 @@ return flags, nil } -func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSpec, workerIndex int) (bool, *chartify.ChartifyOpts, func(), error) { - var opts chartify.ChartifyOpts +func fileExistsAt(path string) bool { + fileInfo, err := os.Stat(path) + return err == nil && fileInfo.Mode().IsRegular() +} + +func directoryExistsAt(path string) bool { + fileInfo, err := os.Stat(path) + return err == nil && fileInfo.Mode().IsDir() +} + +type Chartify struct { + Opts *chartify.ChartifyOpts + Chart string + Clean func() +} + +func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSpec, workerIndex int) (*Chartify, func(), error) { + chartify := &Chartify{ + Opts: &chartify.ChartifyOpts{ + WorkaroundOutputDirIssue: true, + EnableKustomizeAlphaPlugins: true, + ChartVersion: release.Version, + Namespace: release.Namespace, + }, + } - opts.WorkaroundOutputDirIssue = true + var filesNeedCleaning []string + + clean := func() { + st.removeFiles(filesNeedCleaning) + } var shouldRun bool - opts.EnableKustomizeAlphaPlugins = true + chart := release.Chart + if release.Directory != "" && chart == "" { + chart = release.Directory + } - opts.ChartVersion = release.Version + _, err := remote.Parse(chart) + if err != nil { + if release.ForceGoGetter { + return nil, clean, fmt.Errorf("Parsing url from directory of release %q failed due to error %q.\nContinuing the process assuming this is a regular Helm chart or a local directory.", release.Name, err.Error()) + } + } else { + r := remote.NewRemote(st.logger, st.basePath, st.readFile, directoryExistsAt, fileExistsAt) - opts.Namespace = release.Namespace + fetchedDir, err := r.Fetch(chart) + if err != nil { + return nil, clean, fmt.Errorf("fetching %q: %v", chart, err) + } - dir := filepath.Join(st.basePath, release.Chart) + chart = fetchedDir + + filesNeedCleaning = append(filesNeedCleaning, fetchedDir) + } + + chartify.Chart = chart + + dir := filepath.Join(st.basePath, chart) if stat, _ := os.Stat(dir); stat != nil && stat.IsDir() { if exists, err := st.fileExists(filepath.Join(dir, "Chart.yaml")); err == nil && !exists { shouldRun = true @@ -61,28 +109,22 @@ dep += ":" + d.Version } - opts.AdhocChartDependencies = append(opts.AdhocChartDependencies, dep) + chartify.Opts.AdhocChartDependencies = append(chartify.Opts.AdhocChartDependencies, dep) shouldRun = true } - var filesNeedCleaning []string - - clean := func() { - st.removeFiles(filesNeedCleaning) - } - jsonPatches := release.JSONPatches if len(jsonPatches) > 0 { generatedFiles, err := st.generateTemporaryValuesFiles(jsonPatches, release.MissingFileHandler) if err != nil { - return false, nil, clean, err + return nil, clean, err } filesNeedCleaning = append(filesNeedCleaning, generatedFiles...) for _, f := range generatedFiles { - opts.JsonPatches = append(opts.JsonPatches, f) + chartify.Opts.JsonPatches = append(chartify.Opts.JsonPatches, f) } shouldRun = true @@ -92,11 +134,11 @@ if len(strategicMergePatches) > 0 { generatedFiles, err := st.generateTemporaryValuesFiles(strategicMergePatches, release.MissingFileHandler) if err != nil { - return false, nil, clean, err + return nil, clean, err } for _, f := range generatedFiles { - opts.StrategicMergePatches = append(opts.StrategicMergePatches, f) + chartify.Opts.StrategicMergePatches = append(chartify.Opts.StrategicMergePatches, f) } filesNeedCleaning = append(filesNeedCleaning, generatedFiles...) @@ -107,13 +149,15 @@ if shouldRun { generatedFiles, err := st.generateValuesFiles(helm, release, workerIndex) if err != nil { - return false, nil, clean, err + return nil, clean, err } filesNeedCleaning = append(filesNeedCleaning, generatedFiles...) - opts.ValuesFiles = generatedFiles + chartify.Opts.ValuesFiles = generatedFiles + + return chartify, clean, nil } - return shouldRun, &opts, clean, nil + return nil, clean, nil } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/helmfile-0.121.1/pkg/state/state.go new/helmfile-0.125.0/pkg/state/state.go --- old/helmfile-0.121.1/pkg/state/state.go 2020-07-17 02:41:05.000000000 +0200 +++ new/helmfile-0.125.0/pkg/state/state.go 2020-07-22 18:09:36.000000000 +0200 @@ -6,7 +6,6 @@ "encoding/hex" "errors" "fmt" - "github.com/variantdev/chartify" "io" "io/ioutil" "os" @@ -19,6 +18,8 @@ "sync" "text/template" + "github.com/variantdev/chartify" + "github.com/roboll/helmfile/pkg/environment" "github.com/roboll/helmfile/pkg/event" "github.com/roboll/helmfile/pkg/helmexec" @@ -128,10 +129,12 @@ // CreateNamespace, when set to true (default), --create-namespace is passed to helm3 on install/upgrade (ignored for helm2) CreateNamespace *bool `yaml:"createNamespace,omitempty"` - TLS bool `yaml:"tls"` - TLSCACert string `yaml:"tlsCACert,omitempty"` - TLSKey string `yaml:"tlsKey,omitempty"` - TLSCert string `yaml:"tlsCert,omitempty"` + TLS bool `yaml:"tls"` + TLSCACert string `yaml:"tlsCACert,omitempty"` + TLSKey string `yaml:"tlsKey,omitempty"` + TLSCert string `yaml:"tlsCert,omitempty"` + DisableValidation *bool `yaml:"disableValidation,omitempty"` + DisableOpenAPIValidation *bool `yaml:"disableOpenAPIValidation,omitempty"` } // RepositorySpec that defines values for a helm repo @@ -148,9 +151,15 @@ // ReleaseSpec defines the structure of a helm release type ReleaseSpec struct { // Chart is the name of the chart being installed to create this release - Chart string `yaml:"chart,omitempty"` + Chart string `yaml:"chart,omitempty"` + // Directory is an alias to Chart which may be of more fit when you want to use a local/remote directory containing + // K8s manifests or Kustomization as a chart + Directory string `yaml:"directory,omitempty"` + // Version is the semver version or version constraint for the chart Version string `yaml:"version,omitempty"` - Verify *bool `yaml:"verify,omitempty"` + // Verify enables signature verification on fetched chart. + // Beware some (or many?) chart repositories and charts don't seem to support it. + Verify *bool `yaml:"verify,omitempty"` // Devel, when set to true, use development versions, too. Equivalent to version '>0.0.0-0' 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 @@ -174,6 +183,18 @@ // CreateNamespace, when set to true (default), --create-namespace is passed to helm3 on install (ignored for helm2) CreateNamespace *bool `yaml:"createNamespace,omitempty"` + // DisableOpenAPIValidation is rarely used to bypass OpenAPI validations only that is used for e.g. + // work-around against broken CRs + // See also: + // - https://github.com/helm/helm/pull/6819 + // - https://github.com/roboll/helmfile/issues/1167 + DisableOpenAPIValidation *bool `yaml:"disableOpenAPIValidation,omitempty"` + + // DisableValidation is rarely used to bypass the whole validation of manifests against the Kubernetes cluster + // so that `helm diff` can be run containing a chart that installs both CRD and CRs on first install. + // FYI, such diff without `--disable-validation` fails on first install because the K8s cluster doesn't have CRDs registered yet. + DisableValidation *bool `yaml:"disableValidation,omitempty"` + // MissingFileHandler is set to either "Error" or "Warn". "Error" instructs helmfile to fail when unable to find a values or secrets file. When "Warn", it prints the file and continues. // The default value for MissingFileHandler is "Error". MissingFileHandler *string `yaml:"missingFileHandler,omitempty"` @@ -223,6 +244,13 @@ //version of the chart that has really been installed cause desired version may be fuzzy (~2.0.0) installedVersion string + + // ForceGoGetter forces the use of go-getter for fetching remote directory as maniefsts/chart/kustomization + // by parsing the url from `chart` field of the release. + // This is handy when getting the go-getter url parsing error when it doesn't work as expected. + // Without this, any error in url parsing result in silently falling-back to normal process of treating `chart:` as the regular + // helm chart name. + ForceGoGetter bool `yaml:"forceGoGetter,omitempty"` } type Release struct { @@ -520,7 +548,13 @@ } deletionFlags := st.appendConnectionFlags(args, release) m.Lock() - if err := helm.DeleteRelease(context, release.Name, deletionFlags...); err != nil { + if _, err := st.triggerReleaseEvent("preuninstall", nil, release, "sync"); err != nil { + affectedReleases.Failed = 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) + relErr = newReleaseFailedError(release, err) + } else if _, err := st.triggerReleaseEvent("postuninstall", nil, release, "sync"); err != nil { affectedReleases.Failed = append(affectedReleases.Failed, release) relErr = newReleaseFailedError(release, err) } else { @@ -624,7 +658,13 @@ } deletionFlags := st.appendConnectionFlags(args, release) m.Lock() - if err := helm.DeleteRelease(context, release.Name, deletionFlags...); err != nil { + if _, err := st.triggerReleaseEvent("preuninstall", nil, release, "sync"); err != nil { + affectedReleases.Failed = 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) + relErr = newReleaseFailedError(release, err) + } else if _, err := st.triggerReleaseEvent("postuninstall", nil, release, "sync"); err != nil { affectedReleases.Failed = append(affectedReleases.Failed, release) relErr = newReleaseFailedError(release, err) } else { @@ -731,6 +771,7 @@ chartPath string err error } + errs := []error{} jobQueue := make(chan *ReleaseSpec, len(st.Releases)) @@ -755,22 +796,23 @@ for release := range jobQueue { var chartPath string - shouldChartify, opts, clean, err := st.PrepareChartify(helm, release, workerIndex) + chartification, clean, err := st.PrepareChartify(helm, release, workerIndex) defer clean() if err != nil { results <- &downloadResults{err: err} return } - if shouldChartify { + if chartification != nil { c := chartify.New( chartify.HelmBin(st.DefaultHelmBinary), chartify.UseHelm3(helm3), ) - out, err := c.Chartify(release.Name, release.Chart, chartify.WithChartifyOpts(opts)) + out, err := c.Chartify(release.Name, chartification.Chart, chartify.WithChartifyOpts(chartification.Opts)) if err != nil { - errs = append(errs, err) + results <- &downloadResults{err: err} + return } else { // TODO Chartify chartPath = out @@ -796,7 +838,8 @@ if _, err := os.Stat(chartPath); os.IsNotExist(err) { fetchFlags = append(fetchFlags, "--untar", "--untardir", chartPath) if err := helm.Fetch(release.Chart, fetchFlags...); err != nil { - errs = append(errs, err) + results <- &downloadResults{err: err} + return } } // Set chartPath to be the path containing Chart.yaml, if found @@ -1277,13 +1320,24 @@ } context := st.createHelmContext(&release, workerIndex) + if _, err := st.triggerReleaseEvent("preuninstall", nil, &release, "delete"); err != nil { + affectedReleases.Failed = append(affectedReleases.Failed, &release) + + return err + } + if err := helm.DeleteRelease(context, release.Name, flags...); err != nil { affectedReleases.Failed = append(affectedReleases.Failed, &release) return err - } else { - affectedReleases.Deleted = append(affectedReleases.Deleted, &release) - return nil } + + if _, err := st.triggerReleaseEvent("postuninstall", nil, &release, "delete"); err != nil { + affectedReleases.Failed = append(affectedReleases.Failed, &release) + return err + } + + affectedReleases.Deleted = append(affectedReleases.Deleted, &release) + return nil }) } @@ -1771,6 +1825,28 @@ flags = append(flags, "--devel") } + disableOpenAPIValidation := false + if release.DisableOpenAPIValidation != nil { + disableOpenAPIValidation = *release.DisableOpenAPIValidation + } else if st.HelmDefaults.DisableOpenAPIValidation != nil { + disableOpenAPIValidation = *st.HelmDefaults.DisableOpenAPIValidation + } + + if disableOpenAPIValidation { + flags = append(flags, "--disable-openapi-validation") + } + + disableValidation := false + if release.DisableValidation != nil { + disableValidation = *release.DisableValidation + } else if st.HelmDefaults.DisableValidation != nil { + disableValidation = *st.HelmDefaults.DisableValidation + } + + if disableValidation { + flags = append(flags, "--disable-validation") + } + flags = st.appendConnectionFlags(flags, release) var err error ++++++ vendor.tar.gz ++++++ ++++ 11052 lines of diff (skipped)