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)


Reply via email to