Hello community,

here is the log from the commit of package helmfile for openSUSE:Factory 
checked in at 2020-10-18 16:35:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/helmfile (Old)
 and      /work/SRC/openSUSE:Factory/.helmfile.new.3486 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "helmfile"

Sun Oct 18 16:35:51 2020 rev:8 rq:842373 version:0.130.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/helmfile/helmfile.changes        2020-09-21 
17:48:33.589203199 +0200
+++ /work/SRC/openSUSE:Factory/.helmfile.new.3486/helmfile.changes      
2020-10-18 16:36:06.432882993 +0200
@@ -1,0 +2,37 @@
+Sun Oct 18 08:48:12 UTC 2020 - Manfred Hollstein <manfre...@gmx.net>
+
+- v0.130.3: Bump vals (#1537)
+  * 563fce4 (HEAD, tag: v0.130.3, origin/master, origin/HEAD, master)
+    Bump vals (#1537)
+  * b287101 Update USERS.md (#1535)
+
+- v0.130.2: Fix concurrent-map-iteration-and-write errors while running 
release h…
+  * ab9fb2c (HEAD, tag: v0.130.2, origin/master, origin/HEAD, master)
+    Fix concurrent-map-iteration-and-write errors while running
+    release hooks (#1534)
+  * c170b5a Minor tweaks for helmfile write-values (#1533)
+  * d9286ed Fix intermittent failures while building deps on local
+    chart (#1532)
+  * 3018e82 Fix multiple --set in --args messed up in helmfile
+    template (#1529)
+  * 34acf14 Bump chartify to v0.4.3 (#1528)
+  * 5d8eba9 Append --force-update for specific helm versions. (#1494)
+  * b284b7b chore: add SettleMint to the USERS list (#1516)
+  * b293ac1 Fix typo (#1523)
+  * 8d9d635 Clarify namespace prefix in needs (#1500)
+
+-------------------------------------------------------------------
+Tue Oct  6 07:19:24 UTC 2020 - Manfred Hollstein <manfre...@gmx.net>
+
+- v0.130.1: Fix: forceNamespace needs shouldRun is true (#1510)
+  * 954673d (HEAD, tag: v0.130.1, origin/master, origin/HEAD, master)
+    Fix: forceNamespace needs shouldRun is true (#1510)
+
+-------------------------------------------------------------------
+Tue Sep 29 10:41:39 UTC 2020 - Manfred Hollstein <manfre...@gmx.net>
+
+- v0.130.0: Add support for ChartCenter (#1492)
+  * 942b9a6 (HEAD, tag: v0.130.0, origin/master, origin/HEAD, master)
+    Add support for ChartCenter (#1492)
+
+-------------------------------------------------------------------

Old:
----
  helmfile-0.129.4.tar.gz

New:
----
  helmfile-0.130.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ helmfile.spec ++++++
--- /var/tmp/diff_new_pack.T9cVUK/_old  2020-10-18 16:36:15.676887107 +0200
+++ /var/tmp/diff_new_pack.T9cVUK/_new  2020-10-18 16:36:15.680887109 +0200
@@ -16,9 +16,9 @@
 # Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
-%define git_commit b176408eb2c351f5730c914a12a72b587aac23f9
+%define git_commit 563fce4adf7abf759ec31b3971d1195704621052
 Name:           helmfile
-Version:        0.129.4
+Version:        0.130.3
 Release:        0
 Summary:        Deploy Kubernetes Helm Charts
 License:        MIT

++++++ _service ++++++
--- /var/tmp/diff_new_pack.T9cVUK/_old  2020-10-18 16:36:15.712887123 +0200
+++ /var/tmp/diff_new_pack.T9cVUK/_new  2020-10-18 16:36:15.716887125 +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.129.4</param>
+    <param name="revision">v0.130.3</param>
     <param name="changesgenerate">enable</param>
   </service>
   <service name="recompress" mode="disabled">

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.T9cVUK/_old  2020-10-18 16:36:15.732887132 +0200
+++ /var/tmp/diff_new_pack.T9cVUK/_new  2020-10-18 16:36:15.732887132 +0200
@@ -1,4 +1,4 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/roboll/helmfile.git</param>
-              <param 
name="changesrevision">b176408eb2c351f5730c914a12a72b587aac23f9</param></service></servicedata>
+              <param 
name="changesrevision">563fce4adf7abf759ec31b3971d1195704621052</param></service></servicedata>

++++++ helmfile-0.129.4.tar.gz -> helmfile-0.130.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/README.md 
new/helmfile-0.130.3/README.md
--- old/helmfile-0.129.4/README.md      2020-09-21 02:44:05.000000000 +0200
+++ new/helmfile-0.130.3/README.md      2020-10-14 02:56:17.000000000 +0200
@@ -616,7 +616,7 @@
   bar: ""
 ```
 
-The resulting, temporary values.yaml that is generated from `values.yaml.tpl` 
would become:
+The resulting, temporary values.yaml that is generated from 
`values.yaml.gotmpl` would become:
 
 ```yaml
 foo:
@@ -848,6 +848,8 @@
   - [TILLER_NAMESPACE/][NAMESPACE/]anotherelease
 ```
 
+Be aware that you have to specify the namespace name if you configured one for 
the release(s).
+
 All the releases listed under `needs` are installed before(or deleted after) 
the release itself.
 
 For the following example, `helmfile [sync|apply]` installs releases in this 
order:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/USERS.md 
new/helmfile-0.130.3/USERS.md
--- old/helmfile-0.129.4/USERS.md       2020-09-21 02:44:05.000000000 +0200
+++ new/helmfile-0.130.3/USERS.md       2020-10-14 02:56:17.000000000 +0200
@@ -25,4 +25,6 @@
 | [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 
|
+| [SettleMint](https://settlemint.com) | production | The SettleMint platform 
allows enterprises to spin up k8s clusters and deploy production grade 
blockchain networks and additional services. Helmfile is in charge of deploying 
these networks and services on demand out of the self service management ui. | 
Belgium, Singapore, UAE, India | October 2020 |
+| [AutoTrader (UK)](https://www.autotrader.co.uk) | production | We've used 
Helmfile for 2+ years to deploy 400+ services | UK | October 2020 |
 <!-- TABLE_END -->
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/go.mod new/helmfile-0.130.3/go.mod
--- old/helmfile-0.129.4/go.mod 2020-09-21 02:44:05.000000000 +0200
+++ new/helmfile-0.130.3/go.mod 2020-10-14 02:56:17.000000000 +0200
@@ -4,7 +4,7 @@
 
 require (
        github.com/Azure/azure-sdk-for-go v35.0.0+incompatible // indirect
-       github.com/Masterminds/semver v1.4.2
+       github.com/Masterminds/semver/v3 v3.1.0
        github.com/Masterminds/sprig/v3 v3.1.0
        github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a
        github.com/go-test/deep v1.0.3
@@ -22,9 +22,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.4.2
+       github.com/variantdev/chartify v0.4.3
        github.com/variantdev/dag v0.0.0-20191028002400-bb0b3c785363
-       github.com/variantdev/vals v0.10.2
+       github.com/variantdev/vals v0.10.3
        go.uber.org/multierr v1.1.0
        go.uber.org/zap v1.9.1
        golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/go.sum new/helmfile-0.130.3/go.sum
--- old/helmfile-0.129.4/go.sum 2020-09-21 02:44:05.000000000 +0200
+++ new/helmfile-0.130.3/go.sum 2020-10-14 02:56:17.000000000 +0200
@@ -181,6 +181,7 @@
 github.com/bgentry/speakeasy v0.1.0/go.mod 
h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
 github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 
h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY=
 github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod 
h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k=
+github.com/blang/semver v3.5.1+incompatible 
h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
 github.com/blang/semver v3.5.1+incompatible/go.mod 
h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
 github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 
h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
 github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod 
h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
@@ -850,6 +851,8 @@
 github.com/variantdev/chartify v0.4.1/go.mod 
h1:Fr4oPNJ4b19knlovn0wBoU2+MZxQdBacmBs30wwgAFk=
 github.com/variantdev/chartify v0.4.2 
h1:Vw647JysxJ4kz+6vOxOmrctRoTTf5qmpleB6hTQEjUk=
 github.com/variantdev/chartify v0.4.2/go.mod 
h1:Fr4oPNJ4b19knlovn0wBoU2+MZxQdBacmBs30wwgAFk=
+github.com/variantdev/chartify v0.4.3 
h1:CRyi9XDCXkgvvgOkNUwXp0oaIJG0BWKjbUZHN3D8xvw=
+github.com/variantdev/chartify v0.4.3/go.mod 
h1:Fr4oPNJ4b19knlovn0wBoU2+MZxQdBacmBs30wwgAFk=
 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=
@@ -868,6 +871,8 @@
 github.com/variantdev/vals v0.10.1/go.mod 
h1:tAQZUHZAYfgNJJ3BzmUDXeN+r6RLk0HQPSQ+gdYSP5I=
 github.com/variantdev/vals v0.10.2 
h1:2ZtEV1BcED2WkfL8pZd0kO4HGpow6faIuFSz+c8zXoM=
 github.com/variantdev/vals v0.10.2/go.mod 
h1:0KbR+woANJnnZakBreV1s8CBsmAY0O2mZNQBqilsU00=
+github.com/variantdev/vals v0.10.3 
h1:cfJZHCwTuiFwwqsnvyR1cDr2jkuM5kHFYKpTPpob/fs=
+github.com/variantdev/vals v0.10.3/go.mod 
h1:0KbR+woANJnnZakBreV1s8CBsmAY0O2mZNQBqilsU00=
 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=
@@ -1108,6 +1113,7 @@
 google.golang.org/api v0.26.0 h1:VJZ8h6E8ip82FRpQl848c5vAadxlTXrUh8RzQzSRm08=
 google.golang.org/api v0.30.0 h1:yfrXXP61wVuLb0vBcG6qaOoIoqYEzOQS8jum51jkv2w=
 google.golang.org/api v0.31.0 h1:1w5Sz/puhxFo9lTtip2n47k7toB/U2nCqOKNHd3Yrbo=
+google.golang.org/api v0.32.0 h1:Le77IccnTqEa8ryp9wIpX5W3zYm7Gf9LhOp9PHcwFts=
 google.golang.org/appengine v1.1.0/go.mod 
h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.2.0/go.mod 
h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.3.0/go.mod 
h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/app/app.go 
new/helmfile-0.130.3/pkg/app/app.go
--- old/helmfile-0.129.4/pkg/app/app.go 2020-09-21 02:44:05.000000000 +0200
+++ new/helmfile-0.130.3/pkg/app/app.go 2020-10-14 02:56:17.000000000 +0200
@@ -1410,6 +1410,15 @@
        // Traverse DAG of all the releases so that we don't suffer from 
false-positive missing dependencies
        st.Releases = allReleases
 
+       args := argparser.GetArgs(c.Args(), st)
+
+       // Reset the extra args if already set, not to break `helm fetch` by 
adding the args intended for `lint`
+       helm.SetExtraArgs()
+
+       if len(args) > 0 {
+               helm.SetExtraArgs(args...)
+       }
+
        if len(releasesToRender) > 0 {
                _, templateErrs := withDAG(st, helm, a.Logger, false, 
a.Wrap(func(subst *state.HelmState, helm helmexec.Interface) []error {
                        var rs []state.ReleaseSpec
@@ -1422,7 +1431,6 @@
 
                        subst.Releases = rs
 
-                       args := argparser.GetArgs(c.Args(), st)
                        opts := &state.TemplateOpts{
                                Set:               c.Set(),
                                OutputDirTemplate: c.OutputDirTemplate(),
@@ -1441,8 +1449,6 @@
        st := r.state
        helm := r.helm
 
-       allReleases := st.GetReleasesWithOverrides()
-
        toRender, err := a.getSelectedReleases(r)
        if err != nil {
                return false, []error{err}
@@ -1466,32 +1472,25 @@
 
        var errs []error
 
-       // Traverse DAG of all the releases so that we don't suffer from 
false-positive missing dependencies
-       st.Releases = allReleases
-
+       // Note: We don't calculate the DAG of releases here unlike other 
helmfile operations,
+       // because there's no need to do so for just writing values.
+       // See the first bullet in 
https://github.com/roboll/helmfile/issues/1460#issuecomment-691863465
        if len(releasesToWrite) > 0 {
-               _, writeErrs := withDAG(st, helm, a.Logger, false, 
a.Wrap(func(subst *state.HelmState, helm helmexec.Interface) []error {
-                       var rs []state.ReleaseSpec
+               var rs []state.ReleaseSpec
 
-                       for _, r := range subst.Releases {
-                               if r2, ok := 
releasesToWrite[state.ReleaseToID(&r)]; ok {
-                                       rs = append(rs, r2)
-                               }
-                       }
-
-                       subst.Releases = rs
+               for _, r := range releasesToWrite {
+                       rs = append(rs, r)
+               }
 
-                       opts := &state.WriteValuesOpts{
-                               Set:                c.Set(),
-                               OutputFileTemplate: c.OutputFileTemplate(),
-                       }
-                       return subst.WriteReleasesValues(helm, c.Values(), opts)
-               }))
+               st.Releases = rs
 
-               if writeErrs != nil && len(writeErrs) > 0 {
-                       errs = append(errs, writeErrs...)
+               opts := &state.WriteValuesOpts{
+                       Set:                c.Set(),
+                       OutputFileTemplate: c.OutputFileTemplate(),
                }
+               errs = st.WriteReleasesValues(helm, c.Values(), opts)
        }
+
        return true, errs
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/app/app_test.go 
new/helmfile-0.130.3/pkg/app/app_test.go
--- old/helmfile-0.129.4/pkg/app/app_test.go    2020-09-21 02:44:05.000000000 
+0200
+++ new/helmfile-0.130.3/pkg/app/app_test.go    2020-10-14 02:56:17.000000000 
+0200
@@ -2462,7 +2462,7 @@
        return helmexec.Version{}
 }
 
-func (helm *mockHelmExec) IsVersionAtLeast(major int, minor int, patch int) 
bool {
+func (helm *mockHelmExec) IsVersionAtLeast(versionStr string) bool {
        return false
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/helmfile-0.129.4/pkg/app/desired_state_file_loader.go 
new/helmfile-0.130.3/pkg/app/desired_state_file_loader.go
--- old/helmfile-0.129.4/pkg/app/desired_state_file_loader.go   2020-09-21 
02:44:05.000000000 +0200
+++ new/helmfile-0.130.3/pkg/app/desired_state_file_loader.go   2020-10-14 
02:56:17.000000000 +0200
@@ -219,6 +219,8 @@
                        if err := mergo.Merge(&finalState.ReleaseSetSpec, 
&currentState.ReleaseSetSpec, mergo.WithOverride); err != nil {
                                return nil, err
                        }
+
+                       finalState.RenderedValues = currentState.RenderedValues
                }
 
                env = &finalState.Env
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/app/mocks_test.go 
new/helmfile-0.130.3/pkg/app/mocks_test.go
--- old/helmfile-0.129.4/pkg/app/mocks_test.go  2020-09-21 02:44:05.000000000 
+0200
+++ new/helmfile-0.130.3/pkg/app/mocks_test.go  2020-10-14 02:56:17.000000000 
+0200
@@ -97,7 +97,7 @@
        return helmexec.Version{}
 }
 
-func (helm *noCallHelmExec) IsVersionAtLeast(major int, minor int, patch int) 
bool {
+func (helm *noCallHelmExec) IsVersionAtLeast(versionStr string) bool {
        helm.doPanic()
        return false
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/exectest/helm.go 
new/helmfile-0.130.3/pkg/exectest/helm.go
--- old/helmfile-0.129.4/pkg/exectest/helm.go   2020-09-21 02:44:05.000000000 
+0200
+++ new/helmfile-0.130.3/pkg/exectest/helm.go   2020-10-14 02:56:17.000000000 
+0200
@@ -6,6 +6,7 @@
        "strings"
        "sync"
 
+       "github.com/Masterminds/semver/v3"
        "github.com/roboll/helmfile/pkg/helmexec"
 )
 
@@ -30,7 +31,7 @@
        Diffed               []Release
        FailOnUnexpectedDiff bool
        FailOnUnexpectedList bool
-       Version              *helmexec.Version
+       Version              *semver.Version
 
        UpdateDepsCallbacks map[string]func(string) error
 
@@ -163,19 +164,20 @@
 }
 
 func (helm *Helm) GetVersion() helmexec.Version {
-       if helm.Version != nil {
-               return *helm.Version
+       return helmexec.Version{
+               Major: int(helm.Version.Major()),
+               Minor: int(helm.Version.Minor()),
+               Patch: int(helm.Version.Patch()),
        }
-
-       return helmexec.Version{}
 }
 
-func (helm *Helm) IsVersionAtLeast(major int, minor int, patch int) bool {
+func (helm *Helm) IsVersionAtLeast(versionStr string) bool {
        if helm.Version == nil {
                return false
        }
 
-       return helm.Version.Major >= major && minor >= helm.Version.Minor && 
patch >= helm.Version.Patch
+       ver := semver.MustParse(versionStr)
+       return helm.Version.Equal(ver) || helm.Version.GreaterThan(ver)
 }
 
 func (helm *Helm) sync(m *sync.Mutex, f func()) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/helmexec/exec.go 
new/helmfile-0.130.3/pkg/helmexec/exec.go
--- old/helmfile-0.129.4/pkg/helmexec/exec.go   2020-09-21 02:44:05.000000000 
+0200
+++ new/helmfile-0.130.3/pkg/helmexec/exec.go   2020-10-14 02:56:17.000000000 
+0200
@@ -6,11 +6,11 @@
        "io/ioutil"
        "os"
        "path/filepath"
-       "regexp"
        "strconv"
        "strings"
        "sync"
 
+       "github.com/Masterminds/semver/v3"
        "go.uber.org/zap"
        "go.uber.org/zap/zapcore"
 )
@@ -22,7 +22,7 @@
 
 type execer struct {
        helmBinary           string
-       version              Version
+       version              semver.Version
        runner               Runner
        logger               *zap.SugaredLogger
        kubeContext          string
@@ -48,51 +48,33 @@
        return zap.New(core).Sugar()
 }
 
-// versionRegex matches versions like v1.1.1 and v1.1
-var versionRegex = 
regexp.MustCompile("v(?P<major>\\d+)\\.(?P<minor>\\d+)(?:\\.(?P<patch>\\d+))?")
-
-func parseHelmVersion(versionStr string) (Version, error) {
+func parseHelmVersion(versionStr string) (semver.Version, error) {
        if len(versionStr) == 0 {
-               return Version{}, nil
+               return semver.Version{}, nil
        }
 
-       matches := versionRegex.FindStringSubmatch(versionStr)
-       if len(matches) == 0 {
-               return Version{}, fmt.Errorf("error parsing helm verion '%s'", 
versionStr)
-       }
-       result := make(map[string]string)
-       for i, name := range versionRegex.SubexpNames() {
-               result[name] = matches[i]
-       }
+       versionStr = strings.TrimLeft(versionStr, "Client: ")
+       versionStr = strings.TrimRight(versionStr, "\n")
 
-       // We ignore errors because regex matches only integers
-       // If any of the parts does not exist - default "0" will be used
-       major, _ := strconv.Atoi(result["major"])
-       minor, _ := strconv.Atoi(result["minor"])
-       patch, _ := strconv.Atoi(result["patch"])
+       ver, err := semver.NewVersion(versionStr)
+       if err != nil {
+               return semver.Version{}, fmt.Errorf("error parsing helm verion 
'%s'", versionStr)
+       }
 
        // Support explicit helm3 opt-in via environment variable
-       if os.Getenv("HELMFILE_HELM3") != "" && major < 3 {
-               return Version{
-                       Major: 3,
-                       Minor: 0,
-                       Patch: 0,
-               }, nil
+       if os.Getenv("HELMFILE_HELM3") != "" && ver.Major() < 3 {
+               return *semver.MustParse("v3.0.0"), nil
        }
 
-       return Version{
-               Major: major,
-               Minor: minor,
-               Patch: patch,
-       }, nil
+       return *ver, nil
 }
 
-func getHelmVersion(helmBinary string, runner Runner) (Version, error) {
+func getHelmVersion(helmBinary string, runner Runner) (semver.Version, error) {
 
        // Autodetect from `helm verison`
        bytes, err := runner.Execute(helmBinary, []string{"version", 
"--client", "--short"}, nil)
        if err != nil {
-               return Version{}, fmt.Errorf("error determining helm version: 
%w", err)
+               return semver.Version{}, fmt.Errorf("error determining helm 
version: %w", err)
        }
 
        return parseHelmVersion(string(bytes))
@@ -130,9 +112,16 @@
                return fmt.Errorf("empty field name")
        }
        args = append(args, "repo", "add", name, repository)
-       if helm.IsHelm3() && helm.IsVersionAtLeast(3, 3, 2) {
-               args = append(args, "--force-update")
+
+       // See https://github.com/helm/helm/pull/8777
+       if cons, err := semver.NewConstraint(">= 3.3.2, < 3.3.4"); err == nil {
+               if cons.Check(&helm.version) {
+                       args = append(args, "--force-update")
+               }
+       } else {
+               panic(err)
        }
+
        if certfile != "" && keyfile != "" {
                args = append(args, "--cert-file", certfile, "--key-file", 
keyfile)
        }
@@ -394,13 +383,18 @@
 }
 
 func (helm *execer) IsHelm3() bool {
-       return helm.version.Major == 3
+       return helm.version.Major() == 3
 }
 
 func (helm *execer) GetVersion() Version {
-       return helm.version
+       return Version{
+               Major: int(helm.version.Major()),
+               Minor: int(helm.version.Minor()),
+               Patch: int(helm.version.Patch()),
+       }
 }
 
-func (helm *execer) IsVersionAtLeast(major int, minor int, patch int) bool {
-       return helm.version.Major >= major && helm.version.Minor >= minor && 
helm.version.Patch >= patch
+func (helm *execer) IsVersionAtLeast(versionStr string) bool {
+       ver := semver.MustParse(versionStr)
+       return helm.version.Equal(ver) || helm.version.GreaterThan(ver)
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/helmexec/exec_test.go 
new/helmfile-0.130.3/pkg/helmexec/exec_test.go
--- old/helmfile-0.129.4/pkg/helmexec/exec_test.go      2020-09-21 
02:44:05.000000000 +0200
+++ new/helmfile-0.130.3/pkg/helmexec/exec_test.go      2020-10-14 
02:56:17.000000000 +0200
@@ -9,6 +9,7 @@
        "reflect"
        "testing"
 
+       "github.com/Masterminds/semver/v3"
        "go.uber.org/zap"
 )
 
@@ -71,6 +72,26 @@
        }
 }
 
+func Test_AddRepo_Helm_3_3_2(t *testing.T) {
+       var buffer bytes.Buffer
+       logger := NewLogger(&buffer, "debug")
+       helm := &execer{
+               helmBinary:  "helm",
+               version:     *semver.MustParse("3.3.2"),
+               logger:      logger,
+               kubeContext: "dev",
+               runner:      &mockRunner{},
+       }
+       helm.AddRepo("myRepo", "https://repo.example.com/";, "", "cert.pem", 
"key.pem", "", "")
+       expected := `Adding repo myRepo https://repo.example.com/
+exec: helm --kube-context dev repo add myRepo https://repo.example.com/ 
--force-update --cert-file cert.pem --key-file key.pem
+exec: helm --kube-context dev repo add myRepo https://repo.example.com/ 
--force-update --cert-file cert.pem --key-file key.pem: 
+`
+       if buffer.String() != expected {
+               t.Errorf("helmexec.AddRepo()\nactual = %v\nexpect = %v", 
buffer.String(), expected)
+       }
+}
+
 func Test_AddRepo(t *testing.T) {
        var buffer bytes.Buffer
        logger := NewLogger(&buffer, "debug")
@@ -557,63 +578,15 @@
 func Test_IsVersionAtLeast(t *testing.T) {
        helm2Runner := mockRunner{output: []byte("Client: v2.16.1+ge13bc94\n")}
        helm := New("helm", NewLogger(os.Stdout, "info"), "dev", &helm2Runner)
-       if !helm.IsVersionAtLeast(2, 1, 0) {
+       if !helm.IsVersionAtLeast("2.1.0") {
                t.Error("helmexec.IsVersionAtLeast - 2.16.1 not atleast 2.1")
        }
 
-       if helm.IsVersionAtLeast(2, 19, 0) {
+       if helm.IsVersionAtLeast("2.19.0") {
                t.Error("helmexec.IsVersionAtLeast - 2.16.1 is atleast 2.19")
        }
 
-       if helm.IsVersionAtLeast(3, 2, 0) {
+       if helm.IsVersionAtLeast("3.2.0") {
                t.Error("helmexec.IsVersionAtLeast - 2.16.1 is atleast 3.2")
        }
-
-}
-
-func Test_parseHelmVersion(t *testing.T) {
-       tests := []struct {
-               ver     string
-               want    Version
-               wantErr bool
-       }{
-               {
-                       ver: "v1.2.3",
-                       want: Version{
-                               Major: 1,
-                               Minor: 2,
-                               Patch: 3,
-                       },
-                       wantErr: false,
-               },
-               {
-                       ver: "v1.2",
-                       want: Version{
-                               Major: 1,
-                               Minor: 2,
-                               Patch: 0,
-                       },
-                       wantErr: false,
-               },
-               {
-                       ver:     "v1",
-                       wantErr: true,
-               },
-               {
-                       ver:     "1.1.1",
-                       wantErr: true,
-               },
-       }
-       for _, tt := range tests {
-               t.Run(tt.ver, func(t *testing.T) {
-                       got, err := parseHelmVersion(tt.ver)
-                       if (err != nil) != tt.wantErr {
-                               t.Errorf("parseHelmVersion() error = %v, 
wantErr %v", err, tt.wantErr)
-                               return
-                       }
-                       if !reflect.DeepEqual(got, tt.want) {
-                               t.Errorf("parseHelmVersion() got = %v, want 
%v", got, tt.want)
-                       }
-               })
-       }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/helmexec/helmexec.go 
new/helmfile-0.130.3/pkg/helmexec/helmexec.go
--- old/helmfile-0.129.4/pkg/helmexec/helmexec.go       2020-09-21 
02:44:05.000000000 +0200
+++ new/helmfile-0.130.3/pkg/helmexec/helmexec.go       2020-10-14 
02:56:17.000000000 +0200
@@ -28,7 +28,7 @@
        DecryptSecret(context HelmContext, name string, flags ...string) 
(string, error)
        IsHelm3() bool
        GetVersion() Version
-       IsVersionAtLeast(major int, minor int, patch int) bool
+       IsVersionAtLeast(versionStr string) bool
 }
 
 type DependencyUpdater interface {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/state/chart_dependency.go 
new/helmfile-0.130.3/pkg/state/chart_dependency.go
--- old/helmfile-0.129.4/pkg/state/chart_dependency.go  2020-09-21 
02:44:05.000000000 +0200
+++ new/helmfile-0.130.3/pkg/state/chart_dependency.go  2020-10-14 
02:56:17.000000000 +0200
@@ -2,18 +2,19 @@
 
 import (
        "fmt"
-       "github.com/Masterminds/semver"
+       "io/ioutil"
+       "os"
+       "path/filepath"
+       "sort"
+       "strings"
+
+       "github.com/Masterminds/semver/v3"
        goversion "github.com/hashicorp/go-version"
        "github.com/r3labs/diff"
        "github.com/roboll/helmfile/pkg/app/version"
        "github.com/roboll/helmfile/pkg/helmexec"
        "go.uber.org/zap"
        "gopkg.in/yaml.v2"
-       "io/ioutil"
-       "os"
-       "path/filepath"
-       "sort"
-       "strings"
 )
 
 type ChartMeta struct {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/state/create.go 
new/helmfile-0.130.3/pkg/state/create.go
--- old/helmfile-0.129.4/pkg/state/create.go    2020-09-21 02:44:05.000000000 
+0200
+++ new/helmfile-0.130.3/pkg/state/create.go    2020-10-14 02:56:17.000000000 
+0200
@@ -145,11 +145,15 @@
                return nil, &StateLoadError{fmt.Sprintf("failed to read %s", 
state.FilePath), err}
        }
 
-       e.Defaults, err = state.loadValuesEntries(nil, state.DefaultValues, 
c.remote)
+       newDefaults, err := state.loadValuesEntries(nil, state.DefaultValues, 
c.remote)
        if err != nil {
                return nil, err
        }
 
+       if err := mergo.Merge(&e.Defaults, newDefaults, mergo.WithOverride, 
mergo.WithOverwriteWithEmptyValue); err != nil {
+               return nil, err
+       }
+
        state.Env = *e
 
        return &state, nil
@@ -181,6 +185,12 @@
 
        state.FilePath = file
 
+       vals, err := state.Env.GetMergedValues()
+       if err != nil {
+               return nil, fmt.Errorf("rendering values: %w", err)
+       }
+       state.RenderedValues = vals
+
        return state, nil
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/state/create_test.go 
new/helmfile-0.130.3/pkg/state/create_test.go
--- old/helmfile-0.129.4/pkg/state/create_test.go       2020-09-21 
02:44:05.000000000 +0200
+++ new/helmfile-0.130.3/pkg/state/create_test.go       2020-10-14 
02:56:17.000000000 +0200
@@ -63,6 +63,35 @@
        }
 }
 
+type stateTestEnv struct {
+       Files   map[string]string
+       WorkDir string
+}
+
+func (testEnv stateTestEnv) MustLoadState(t *testing.T, file, envName string) 
*HelmState {
+       t.Helper()
+
+       testFs := testhelper.NewTestFs(testEnv.Files)
+
+       if testFs.Cwd == "" {
+               testFs.Cwd = "/"
+       }
+
+       yamlContent, ok := testEnv.Files[file]
+       if !ok {
+               t.Fatalf("no file named %q registered", file)
+       }
+
+       r := remote.NewRemote(logger, testFs.Cwd, testFs.ReadFile, 
testFs.DirectoryExistsAt, testFs.FileExistsAt)
+       state, err := NewCreator(logger, testFs.ReadFile, testFs.FileExists, 
testFs.Abs, testFs.Glob, nil, nil, "", r).
+               ParseAndLoad([]byte(yamlContent), filepath.Dir(file), file, 
envName, true, nil)
+       if err != nil {
+               t.Fatalf("unexpected error: %v", err)
+       }
+
+       return state
+}
+
 func TestReadFromYaml_NonDefaultEnv(t *testing.T) {
        yamlFile := "/example/path/to/helmfile.yaml"
        yamlContent := []byte(`environments:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/state/helmx.go 
new/helmfile-0.130.3/pkg/state/helmx.go
--- old/helmfile-0.129.4/pkg/state/helmx.go     2020-09-21 02:44:05.000000000 
+0200
+++ new/helmfile-0.130.3/pkg/state/helmx.go     2020-10-14 02:56:17.000000000 
+0200
@@ -146,6 +146,8 @@
 
        if release.ForceNamespace != "" {
                chartify.Opts.OverrideNamespace = release.ForceNamespace
+
+               shouldRun = true
        }
 
        if shouldRun {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/state/selector_test.go 
new/helmfile-0.130.3/pkg/state/selector_test.go
--- old/helmfile-0.129.4/pkg/state/selector_test.go     2020-09-21 
02:44:05.000000000 +0200
+++ new/helmfile-0.130.3/pkg/state/selector_test.go     2020-10-14 
02:56:17.000000000 +0200
@@ -2,7 +2,6 @@
 
 import (
        "github.com/google/go-cmp/cmp"
-       "gopkg.in/yaml.v2"
        "testing"
 )
 
@@ -70,11 +69,12 @@
     type: bar
 `)
 
-       var state HelmState
-
-       if err := yaml.Unmarshal(example, &state); err != nil {
-               t.Fatal(err)
-       }
+       state := stateTestEnv{
+               Files: map[string]string{
+                       "/helmfile.yaml": string(example),
+               },
+               WorkDir: "/",
+       }.MustLoadState(t, "/helmfile.yaml", "default")
 
        for _, tc := range testcases {
                state.Selectors = tc.selector
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/state/state.go 
new/helmfile-0.130.3/pkg/state/state.go
--- old/helmfile-0.129.4/pkg/state/state.go     2020-09-21 02:44:05.000000000 
+0200
+++ new/helmfile-0.130.3/pkg/state/state.go     2020-10-14 02:56:17.000000000 
+0200
@@ -19,8 +19,6 @@
        "text/template"
 
        "github.com/imdario/mergo"
-       "golang.org/x/sync/errgroup"
-
        "github.com/variantdev/chartify"
 
        "github.com/roboll/helmfile/pkg/environment"
@@ -93,6 +91,11 @@
 
        runner      helmexec.Runner
        valsRuntime vals.Evaluator
+
+       // RenderedValues is the helmfile-wide values that is `.Values`
+       // which is accessible from within the whole helmfile go template.
+       // Note that this is usually computed by DesiredStateLoader from 
ReleaseSetSpec.Env
+       RenderedValues map[string]interface{}
 }
 
 // SubHelmfileSpec defines the subhelmfile path and options
@@ -1044,89 +1047,36 @@
 }
 
 func (st *HelmState) runHelmDepBuilds(helm helmexec.Interface, concurrency 
int, builds []*chartPrepareResult) error {
-       type buildOutput struct {
-               diagnostic string
-       }
-
-       buildQueue := make(chan *chartPrepareResult)
-
-       buildOutputQueue := make(chan *buildOutput)
-
-       buildWorkers := &errgroup.Group{}
-       for i := 0; i < concurrency; i++ {
-               buildWorkers.Go(func() error {
-                       for r := range buildQueue {
-                               out, err := func() (*buildOutput, error) {
-                                       if err := helm.BuildDeps(r.releaseName, 
r.chartPath); err != nil {
-                                               if r.chartFetchedByGoGetter {
-                                                       return &buildOutput{
-                                                               diagnostic: 
fmt.Sprintf(
-                                                                       "WARN: 
`helm dep build` failed. While processing release %q, Helmfile observed that 
remote chart %q fetched by go-getter is seemingly broken. "+
-                                                                               
"One of well-known causes of this is that the chart has outdated Chart.lock, 
which needs the chart maintainer needs to run `helm dep up`. "+
-                                                                               
"Helmfile is tolerating the error to avoid blocking you until the remote chart 
gets fixed. "+
-                                                                               
"But this may result in any failure later if the chart is broken badly. FYI, 
the tolerated error was: %v",
-                                                                       
r.releaseName,
-                                                                       
r.chartName,
-                                                                       
err.Error(),
-                                                               ),
-                                                       }, nil
-                                               }
-                                               return nil, err
-                                       }
-                                       return nil, nil
-                               }()
-
-                               if err != nil {
-                                       return err
-                               }
-
-                               if out != nil {
-                                       buildOutputQueue <- out
-                               }
-                       }
+       // NOTES:
+       // 1. `helm dep build` fails when it was run concurrency on the same 
chart.
+       //    To avoid that, we run `helm dep build` only once per each local 
chart.
+       //
+       //    See https://github.com/roboll/helmfile/issues/1438
+       // 2. Even if it isn't on the same local chart, `helm dep build` 
intermittently fails when run concurrentl
+       //    So we shouldn't use goroutines like we do for other helm 
operations here.
+       //
+       //    See https://github.com/roboll/helmfile/issues/1521
+       for _, r := range builds {
+               if err := helm.BuildDeps(r.releaseName, r.chartPath); err != 
nil {
+                       if r.chartFetchedByGoGetter {
+                               diagnostic := fmt.Sprintf(
+                                       "WARN: `helm dep build` failed. While 
processing release %q, Helmfile observed that remote chart %q fetched by 
go-getter is seemingly broken. "+
+                                               "One of well-known causes of 
this is that the chart has outdated Chart.lock, which needs the chart 
maintainer needs to run `helm dep up`. "+
+                                               "Helmfile is tolerating the 
error to avoid blocking you until the remote chart gets fixed. "+
+                                               "But this may result in any 
failure later if the chart is broken badly. FYI, the tolerated error was: %v",
+                                       r.releaseName,
+                                       r.chartName,
+                                       err.Error(),
+                               )
 
-                       return nil
-               })
-       }
+                               st.logger.Warn(diagnostic)
 
-       diagnosticsAggregator := &sync.WaitGroup{}
-       diagnosticsAggregator.Add(1)
-       go func() {
-               var diagnostics []string
-               for r := range buildOutputQueue {
-                       if d := r.diagnostic; d != "" {
-                               diagnostics = append(diagnostics, d)
+                               continue
                        }
-               }
 
-               sort.Strings(diagnostics)
-               for _, d := range diagnostics {
-                       st.logger.Warn(d)
+                       return fmt.Errorf("building dependencies of local 
chart: %w", err)
                }
-
-               diagnosticsAggregator.Done()
-       }()
-
-       built := map[string]bool{}
-
-       for _, b := range builds {
-               // `helm dep build` fails when it was run concurrency on the 
same chart.
-               // To avoid that, we run `helm dep build` only once per each 
local chart.
-               //
-               // See https://github.com/roboll/helmfile/issues/1438
-               if !built[b.chartPath] {
-                       built[b.chartPath] = true
-                       buildQueue <- b
-               }
-       }
-       close(buildQueue)
-
-       if err := buildWorkers.Wait(); err != nil {
-               return err
        }
-       close(buildOutputQueue)
-
-       diagnosticsAggregator.Wait()
 
        return nil
 }
@@ -1149,15 +1099,8 @@
                o.Apply(opts)
        }
 
-       // Reset the extra args if already set, not to break `helm fetch` by 
adding the args intended for `lint`
-       helm.SetExtraArgs()
-
        errs := []error{}
 
-       if len(args) > 0 {
-               helm.SetExtraArgs(args...)
-       }
-
        for i := range st.Releases {
                release := &st.Releases[i]
 
@@ -1745,10 +1688,7 @@
 }
 
 func (st *HelmState) SelectReleasesWithOverrides() ([]Release, error) {
-       values, err := st.Values()
-       if err != nil {
-               return nil, err
-       }
+       values := st.Values()
        rs, err := markExcludedReleases(st.GetReleasesWithOverrides(), 
st.Selectors, st.CommonLabels, values)
        if err != nil {
                return nil, err
@@ -1885,10 +1825,7 @@
                Logger:        st.logger,
                ReadFile:      st.readFile,
        }
-       vals, err := st.Values()
-       if err != nil {
-               return false, err
-       }
+       vals := st.Values()
        data := map[string]interface{}{
                "Values":          vals,
                "Release":         r,
@@ -2069,7 +2006,7 @@
 
        if release.CreateNamespace != nil && *release.CreateNamespace ||
                release.CreateNamespace == nil && 
(st.HelmDefaults.CreateNamespace == nil || *st.HelmDefaults.CreateNamespace) {
-               if helm.IsVersionAtLeast(3, 2, 0) {
+               if helm.IsVersionAtLeast("3.2.0") {
                        flags = append(flags, "--create-namespace")
                } else if release.CreateNamespace != nil || 
st.HelmDefaults.CreateNamespace != nil {
                        // createNamespace was set explicitly, but not running 
supported version of helm - error
@@ -2209,10 +2146,7 @@
 }
 
 func (st *HelmState) RenderReleaseValuesFileToBytes(release *ReleaseSpec, path 
string) ([]byte, error) {
-       vals, err := st.Values()
-       if err != nil {
-               return nil, err
-       }
+       vals := st.Values()
        templateData := st.createReleaseTemplateData(release, vals)
 
        r := tmpl.NewFileRenderer(st.readFile, filepath.Dir(path), templateData)
@@ -2713,7 +2647,7 @@
        sb.WriteString(release.Name)
 
        if outputFileTemplate == "" {
-               outputFileTemplate = filepath.Join("{{ .State.BaseName }}-{{ 
.State.AbsPathSHA1 }}", "{{ .Release.Name}}.yaml")
+               outputFileTemplate = filepath.Join("{{ .State.BaseName }}-{{ 
.State.AbsPathSHA1 }}", "{{ .Release.Name }}.yaml")
        }
 
        t, err := template.New("output-file").Parse(outputFileTemplate)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/state/state_exec_tmpl.go 
new/helmfile-0.130.3/pkg/state/state_exec_tmpl.go
--- old/helmfile-0.129.4/pkg/state/state_exec_tmpl.go   2020-09-21 
02:44:05.000000000 +0200
+++ new/helmfile-0.130.3/pkg/state/state_exec_tmpl.go   2020-10-14 
02:56:17.000000000 +0200
@@ -8,8 +8,12 @@
        "gopkg.in/yaml.v2"
 )
 
-func (st *HelmState) Values() (map[string]interface{}, error) {
-       return st.Env.GetMergedValues()
+func (st *HelmState) Values() map[string]interface{} {
+       if st.RenderedValues == nil {
+               panic("[bug] RenderedValues is nil")
+       }
+
+       return st.RenderedValues
 }
 
 func (st *HelmState) createReleaseTemplateData(release *ReleaseSpec, vals 
map[string]interface{}) releaseTemplateData {
@@ -78,10 +82,7 @@
 func (st *HelmState) ExecuteTemplates() (*HelmState, error) {
        r := *st
 
-       vals, err := st.Values()
-       if err != nil {
-               return nil, err
-       }
+       vals := st.Values()
 
        for i, rt := range st.Releases {
                if rt.Labels == nil {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/state/state_exec_tmpl_test.go 
new/helmfile-0.130.3/pkg/state/state_exec_tmpl_test.go
--- old/helmfile-0.129.4/pkg/state/state_exec_tmpl_test.go      2020-09-21 
02:44:05.000000000 +0200
+++ new/helmfile-0.130.3/pkg/state/state_exec_tmpl_test.go      2020-10-14 
02:56:17.000000000 +0200
@@ -146,6 +146,7 @@
                                                tt.input,
                                        },
                                },
+                               RenderedValues: map[string]interface{}{},
                        }
 
                        r, err := state.ExecuteTemplates()
@@ -248,6 +249,7 @@
                                                tt.input,
                                        },
                                },
+                               RenderedValues: map[string]interface{}{},
                        }
 
                        r, err := state.ExecuteTemplates()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/state/state_test.go 
new/helmfile-0.130.3/pkg/state/state_test.go
--- old/helmfile-0.129.4/pkg/state/state_test.go        2020-09-21 
02:44:05.000000000 +0200
+++ new/helmfile-0.130.3/pkg/state/state_test.go        2020-10-14 
02:56:17.000000000 +0200
@@ -8,6 +8,7 @@
        "reflect"
        "testing"
 
+       "github.com/Masterminds/semver/v3"
        "github.com/roboll/helmfile/pkg/exectest"
        "github.com/roboll/helmfile/pkg/helmexec"
        "github.com/roboll/helmfile/pkg/testhelper"
@@ -165,7 +166,7 @@
 
        tests := []struct {
                name     string
-               version  *helmexec.Version
+               version  *semver.Version
                defaults HelmSpec
                release  *ReleaseSpec
                want     []string
@@ -582,11 +583,7 @@
                        defaults: HelmSpec{
                                Verify: false,
                        },
-                       version: &helmexec.Version{
-                               Major: 3,
-                               Minor: 2,
-                               Patch: 0,
-                       },
+                       version: semver.MustParse("3.2.0"),
                        release: &ReleaseSpec{
                                Chart:     "test/chart",
                                Version:   "0.1",
@@ -606,11 +603,7 @@
                                Verify:          false,
                                CreateNamespace: &disable,
                        },
-                       version: &helmexec.Version{
-                               Major: 3,
-                               Minor: 2,
-                               Patch: 0,
-                       },
+                       version: semver.MustParse("3.2.0"),
                        release: &ReleaseSpec{
                                Chart:     "test/chart",
                                Version:   "0.1",
@@ -629,11 +622,7 @@
                                Verify:          false,
                                CreateNamespace: &disable,
                        },
-                       version: &helmexec.Version{
-                               Major: 3,
-                               Minor: 2,
-                               Patch: 0,
-                       },
+                       version: semver.MustParse("3.2.0"),
                        release: &ReleaseSpec{
                                Chart:           "test/chart",
                                Version:         "0.1",
@@ -654,11 +643,7 @@
                                Verify:          false,
                                CreateNamespace: &enable,
                        },
-                       version: &helmexec.Version{
-                               Major: 3,
-                               Minor: 2,
-                               Patch: 0,
-                       },
+                       version: semver.MustParse("3.2.0"),
                        release: &ReleaseSpec{
                                Chart:           "test/chart",
                                Version:         "0.1",
@@ -678,11 +663,7 @@
                                Verify:          false,
                                CreateNamespace: &enable,
                        },
-                       version: &helmexec.Version{
-                               Major: 2,
-                               Minor: 16,
-                               Patch: 0,
-                       },
+                       version: semver.MustParse("2.16.0"),
                        release: &ReleaseSpec{
                                Chart:     "test/chart",
                                Version:   "0.1",
@@ -775,11 +756,11 @@
                        want: true,
                },
                {
-                       name: "local chart in 3-level deep dir",
+                       name: "remote chart in 3-level deep dir (e.g. 
ChartCenter)",
                        args: args{
-                               chart: "foo/bar/baz",
+                               chart: "center/bar/baz",
                        },
-                       want: true,
+                       want: false,
                },
        }
        for i := range tests {
@@ -819,6 +800,14 @@
                        want: "remote/app",
                },
                {
+                       name: "chartcenter repo path",
+                       args: args{
+                               basePath: "/Users/jane/code/deploy/charts",
+                               chart:    "center/stable/myapp",
+                       },
+                       want: "center/stable/myapp",
+               },
+               {
                        name: "construct local chart path, parent dir",
                        args: args{
                                basePath: "/Users/jane/code/deploy/charts",
@@ -1041,8 +1030,9 @@
                                ReleaseSetSpec: ReleaseSetSpec{
                                        Releases: tt.releases,
                                },
-                               logger:      logger,
-                               valsRuntime: valsRuntime,
+                               logger:         logger,
+                               valsRuntime:    valsRuntime,
+                               RenderedValues: map[string]interface{}{},
                        }
                        if errs := state.SyncReleases(&AffectedReleases{}, 
tt.helm, []string{}, 1); errs != nil && len(errs) > 0 {
                                if len(errs) != len(tt.wantErrorMsgs) {
@@ -1147,8 +1137,9 @@
                                ReleaseSetSpec: ReleaseSetSpec{
                                        Releases: []ReleaseSpec{tt.release},
                                },
-                               logger:      logger,
-                               valsRuntime: valsRuntime,
+                               logger:         logger,
+                               valsRuntime:    valsRuntime,
+                               RenderedValues: map[string]interface{}{},
                        }
                        fs := testhelper.NewTestFs(map[string]string{})
                        state = injectFs(state, fs)
@@ -1294,8 +1285,9 @@
                                ReleaseSetSpec: ReleaseSetSpec{
                                        Releases: tt.releases,
                                },
-                               logger:      logger,
-                               valsRuntime: valsRuntime,
+                               logger:         logger,
+                               valsRuntime:    valsRuntime,
+                               RenderedValues: map[string]interface{}{},
                        }
                        helm := &exectest.Helm{
                                Lists: map[exectest.ListKey]string{},
@@ -1398,8 +1390,9 @@
                                ReleaseSetSpec: ReleaseSetSpec{
                                        Releases: []ReleaseSpec{tt.release},
                                },
-                               logger:      logger,
-                               valsRuntime: valsRuntime,
+                               logger:         logger,
+                               valsRuntime:    valsRuntime,
+                               RenderedValues: map[string]interface{}{},
                        }
                        helm := &exectest.Helm{
                                Lists: map[exectest.ListKey]string{},
@@ -1527,8 +1520,9 @@
                                ReleaseSetSpec: ReleaseSetSpec{
                                        Releases: tt.releases,
                                },
-                               logger:      logger,
-                               valsRuntime: valsRuntime,
+                               logger:         logger,
+                               valsRuntime:    valsRuntime,
+                               RenderedValues: map[string]interface{}{},
                        }
                        _, errs := state.DiffReleases(tt.helm, []string{}, 1, 
false, false, false, false, false)
                        if errs != nil && len(errs) > 0 {
@@ -1607,6 +1601,7 @@
                                        numRemovedFiles += 1
                                        return nil
                                },
+                               RenderedValues: map[string]interface{}{},
                        }
                        testfs := testhelper.NewTestFs(map[string]string{
                                "/path/to/someFile": `foo: FOO`,
@@ -1693,6 +1688,7 @@
                                        numRemovedFiles += 1
                                        return nil
                                },
+                               RenderedValues: map[string]interface{}{},
                        }
                        testfs := testhelper.NewTestFs(map[string]string{
                                "/path/to/someFile": `foo: bar
@@ -2073,7 +2069,8 @@
                                ReleaseSetSpec: ReleaseSetSpec{
                                        Releases: releases,
                                },
-                               logger: logger,
+                               logger:         logger,
+                               RenderedValues: map[string]interface{}{},
                        }
                        state.Selectors = []string{tt.labels}
                        errs := state.FilterReleases()
@@ -2244,7 +2241,8 @@
                                        },
                                        Releases: releases,
                                },
-                               logger: logger,
+                               logger:         logger,
+                               RenderedValues: map[string]interface{}{},
                        }
                        helm := &exectest.Helm{
                                Lists:   map[exectest.ListKey]string{},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/state/util.go 
new/helmfile-0.130.3/pkg/state/util.go
--- old/helmfile-0.129.4/pkg/state/util.go      2020-09-21 02:44:05.000000000 
+0200
+++ new/helmfile-0.130.3/pkg/state/util.go      2020-10-14 02:56:17.000000000 
+0200
@@ -21,7 +21,8 @@
        return chart == "" ||
                chart[0] == '/' ||
                strings.Index(chart, "/") == -1 ||
-               len(strings.Split(chart, "/")) != 2
+               (len(strings.Split(chart, "/")) != 2 &&
+                       len(strings.Split(chart, "/")) != 3)
 }
 
 func resolveRemoteChart(repoAndChart string) (string, string, bool) {
@@ -29,8 +30,13 @@
                return "", "", false
        }
 
-       parts := strings.Split(repoAndChart, "/")
-       if len(parts) != 2 {
+       uriLike := strings.Index(repoAndChart, "://") > -1
+       if uriLike {
+               return "", "", false
+       }
+
+       parts := strings.SplitN(repoAndChart, "/", 2)
+       if len(parts) < 2 {
                return "", "", false
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/pkg/state/util_test.go 
new/helmfile-0.130.3/pkg/state/util_test.go
--- old/helmfile-0.129.4/pkg/state/util_test.go 2020-09-21 02:44:05.000000000 
+0200
+++ new/helmfile-0.130.3/pkg/state/util_test.go 2020-10-14 02:56:17.000000000 
+0200
@@ -16,12 +16,16 @@
                        expected: false,
                },
                {
+                       input:    "center/stable/mysql",
+                       expected: false,
+               },
+               {
                        input:    "./charts/myapp",
                        expected: true,
                },
                {
-                       input:    "charts/mysubsystem/myapp",
-                       expected: true,
+                       input:    "center/stable/myapp",
+                       expected: false,
                },
                {
                        input:    "./charts/mysubsystem/myapp",
@@ -77,8 +81,10 @@
                        remote: false,
                },
                {
-                       input:  "charts/mysubsystem/myapp",
-                       remote: false,
+                       input:  "center/stable/myapp",
+                       repo:   "center",
+                       chart:  "stable/myapp",
+                       remote: true,
                },
                {
                        input:  "./charts/mysubsystem/myapp",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helmfile-0.129.4/test/integration/happypath.yaml 
new/helmfile-0.130.3/test/integration/happypath.yaml
--- old/helmfile-0.129.4/test/integration/happypath.yaml        2020-09-21 
02:44:05.000000000 +0200
+++ new/helmfile-0.130.3/test/integration/happypath.yaml        2020-10-14 
02:56:17.000000000 +0200
@@ -6,8 +6,8 @@
 repositories:
   - name: stable
     url: https://kubernetes-charts.storage.googleapis.com/
-  - name: incubator
-    url: https://kubernetes-charts-incubator.storage.googleapis.com
+  - name: center
+    url: https://repo.chartcenter.io
 
 helmDefaults:
   kubeContext: minikube
@@ -29,7 +29,7 @@
       - "{{`{{.HelmfileCommand}}`}}"
 
   - name: raw
-    chart: incubator/raw
+    chart: center/incubator/raw
     values:
       - mysecret: {{ .Environment.Values.mysecret }}
       - values.yaml

++++++ vendor.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/Masterminds/semver/.travis.yml 
new/vendor/github.com/Masterminds/semver/.travis.yml
--- old/vendor/github.com/Masterminds/semver/.travis.yml        2020-09-21 
13:00:40.000000000 +0200
+++ new/vendor/github.com/Masterminds/semver/.travis.yml        1970-01-01 
01:00:00.000000000 +0100
@@ -1,27 +0,0 @@
-language: go
-
-go:
-  - 1.6.x
-  - 1.7.x
-  - 1.8.x
-  - 1.9.x
-  - 1.10.x
-  - tip
-
-# Setting sudo access to false will let Travis CI use containers rather than
-# VMs to run the tests. For more details see:
-# - http://docs.travis-ci.com/user/workers/container-based-infrastructure/
-# - http://docs.travis-ci.com/user/workers/standard-infrastructure/
-sudo: false
-
-script:
-  - make setup
-  - make test
-
-notifications:
-  webhooks:
-    urls:
-      - https://webhooks.gitter.im/e/06e3328629952dabe3e0
-    on_success: change  # options: [always|never|change] default: always
-    on_failure: always  # options: [always|never|change] default: always
-    on_start: never     # options: [always|never|change] default: always
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/Masterminds/semver/CHANGELOG.md 
new/vendor/github.com/Masterminds/semver/CHANGELOG.md
--- old/vendor/github.com/Masterminds/semver/CHANGELOG.md       2020-09-21 
13:00:40.000000000 +0200
+++ new/vendor/github.com/Masterminds/semver/CHANGELOG.md       1970-01-01 
01:00:00.000000000 +0100
@@ -1,86 +0,0 @@
-# 1.4.2 (2018-04-10)
-
-## Changed
-- #72: Updated the docs to point to vert for a console appliaction
-- #71: Update the docs on pre-release comparator handling
-
-## Fixed
-- #70: Fix the handling of pre-releases and the 0.0.0 release edge case
-
-# 1.4.1 (2018-04-02)
-
-## Fixed
-- Fixed #64: Fix pre-release precedence issue (thanks @uudashr)
-
-# 1.4.0 (2017-10-04)
-
-## Changed
-- #61: Update NewVersion to parse ints with a 64bit int size (thanks @zknill)
-
-# 1.3.1 (2017-07-10)
-
-## Fixed
-- Fixed #57: number comparisons in prerelease sometimes inaccurate
-
-# 1.3.0 (2017-05-02)
-
-## Added
-- #45: Added json (un)marshaling support (thanks @mh-cbon)
-- Stability marker. See https://masterminds.github.io/stability/
-
-## Fixed
-- #51: Fix handling of single digit tilde constraint (thanks @dgodd)
-
-## Changed
-- #55: The godoc icon moved from png to svg
-
-# 1.2.3 (2017-04-03)
-
-## Fixed
-- #46: Fixed 0.x.x and 0.0.x in constraints being treated as *
-
-# Release 1.2.2 (2016-12-13)
-
-## Fixed
-- #34: Fixed issue where hyphen range was not working with pre-release parsing.
-
-# Release 1.2.1 (2016-11-28)
-
-## Fixed
-- #24: Fixed edge case issue where constraint "> 0" does not handle 
"0.0.1-alpha"
-  properly.
-
-# Release 1.2.0 (2016-11-04)
-
-## Added
-- #20: Added MustParse function for versions (thanks @adamreese)
-- #15: Added increment methods on versions (thanks @mh-cbon)
-
-## Fixed
-- Issue #21: Per the SemVer spec (section 9) a pre-release is unstable and
-  might not satisfy the intended compatibility. The change here ignores 
pre-releases
-  on constraint checks (e.g., ~ or ^) when a pre-release is not part of the
-  constraint. For example, `^1.2.3` will ignore pre-releases while
-  `^1.2.3-alpha` will include them.
-
-# Release 1.1.1 (2016-06-30)
-
-## Changed
-- Issue #9: Speed up version comparison performance (thanks @sdboyer)
-- Issue #8: Added benchmarks (thanks @sdboyer)
-- Updated Go Report Card URL to new location
-- Updated Readme to add code snippet formatting (thanks @mh-cbon)
-- Updating tagging to v[SemVer] structure for compatibility with other tools.
-
-# Release 1.1.0 (2016-03-11)
-
-- Issue #2: Implemented validation to provide reasons a versions failed a
-  constraint.
-
-# Release 1.0.1 (2015-12-31)
-
-- Fixed #1: * constraint failing on valid versions.
-
-# Release 1.0.0 (2015-10-20)
-
-- Initial release
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/Masterminds/semver/LICENSE.txt 
new/vendor/github.com/Masterminds/semver/LICENSE.txt
--- old/vendor/github.com/Masterminds/semver/LICENSE.txt        2020-09-21 
13:00:40.000000000 +0200
+++ new/vendor/github.com/Masterminds/semver/LICENSE.txt        1970-01-01 
01:00:00.000000000 +0100
@@ -1,20 +0,0 @@
-The Masterminds
-Copyright (C) 2014-2015, Matt Butcher and Matt Farina
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/Masterminds/semver/Makefile 
new/vendor/github.com/Masterminds/semver/Makefile
--- old/vendor/github.com/Masterminds/semver/Makefile   2020-09-21 
13:00:40.000000000 +0200
+++ new/vendor/github.com/Masterminds/semver/Makefile   1970-01-01 
01:00:00.000000000 +0100
@@ -1,36 +0,0 @@
-.PHONY: setup
-setup:
-       go get -u gopkg.in/alecthomas/gometalinter.v1
-       gometalinter.v1 --install
-
-.PHONY: test
-test: validate lint
-       @echo "==> Running tests"
-       go test -v
-
-.PHONY: validate
-validate:
-       @echo "==> Running static validations"
-       @gometalinter.v1 \
-         --disable-all \
-         --enable deadcode \
-         --severity deadcode:error \
-         --enable gofmt \
-         --enable gosimple \
-         --enable ineffassign \
-         --enable misspell \
-         --enable vet \
-         --tests \
-         --vendor \
-         --deadline 60s \
-         ./... || exit_code=1
-
-.PHONY: lint
-lint:
-       @echo "==> Running linters"
-       @gometalinter.v1 \
-         --disable-all \
-         --enable golint \
-         --vendor \
-         --deadline 60s \
-         ./... || :
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/Masterminds/semver/README.md 
new/vendor/github.com/Masterminds/semver/README.md
--- old/vendor/github.com/Masterminds/semver/README.md  2020-09-21 
13:00:40.000000000 +0200
+++ new/vendor/github.com/Masterminds/semver/README.md  1970-01-01 
01:00:00.000000000 +0100
@@ -1,165 +0,0 @@
-# SemVer
-
-The `semver` package provides the ability to work with [Semantic 
Versions](http://semver.org) in Go. Specifically it provides the ability to:
-
-* Parse semantic versions
-* Sort semantic versions
-* Check if a semantic version fits within a set of constraints
-* Optionally work with a `v` prefix
-
-[![Stability:
-Active](https://masterminds.github.io/stability/active.svg)](https://masterminds.github.io/stability/active.html)
-[![Build 
Status](https://travis-ci.org/Masterminds/semver.svg)](https://travis-ci.org/Masterminds/semver)
 [![Build 
status](https://ci.appveyor.com/api/projects/status/jfk66lib7hb985k8/branch/master?svg=true&passingText=windows%20build%20passing&failingText=windows%20build%20failing)](https://ci.appveyor.com/project/mattfarina/semver/branch/master)
 
[![GoDoc](https://godoc.org/github.com/Masterminds/semver?status.svg)](https://godoc.org/github.com/Masterminds/semver)
 [![Go Report 
Card](https://goreportcard.com/badge/github.com/Masterminds/semver)](https://goreportcard.com/report/github.com/Masterminds/semver)
-
-## Parsing Semantic Versions
-
-To parse a semantic version use the `NewVersion` function. For example,
-
-```go
-    v, err := semver.NewVersion("1.2.3-beta.1+build345")
-```
-
-If there is an error the version wasn't parseable. The version object has 
methods
-to get the parts of the version, compare it to other versions, convert the
-version back into a string, and get the original string. For more details
-please see the 
[documentation](https://godoc.org/github.com/Masterminds/semver).
-
-## Sorting Semantic Versions
-
-A set of versions can be sorted using the 
[`sort`](https://golang.org/pkg/sort/)
-package from the standard library. For example,
-
-```go
-    raw := []string{"1.2.3", "1.0", "1.3", "2", "0.4.2",}
-    vs := make([]*semver.Version, len(raw))
-       for i, r := range raw {
-               v, err := semver.NewVersion(r)
-               if err != nil {
-                       t.Errorf("Error parsing version: %s", err)
-               }
-
-               vs[i] = v
-       }
-
-       sort.Sort(semver.Collection(vs))
-```
-
-## Checking Version Constraints
-
-Checking a version against version constraints is one of the most featureful
-parts of the package.
-
-```go
-    c, err := semver.NewConstraint(">= 1.2.3")
-    if err != nil {
-        // Handle constraint not being parseable.
-    }
-
-    v, _ := semver.NewVersion("1.3")
-    if err != nil {
-        // Handle version not being parseable.
-    }
-    // Check if the version meets the constraints. The a variable will be true.
-    a := c.Check(v)
-```
-
-## Basic Comparisons
-
-There are two elements to the comparisons. First, a comparison string is a list
-of comma separated and comparisons. These are then separated by || separated or
-comparisons. For example, `">= 1.2, < 3.0.0 || >= 4.2.3"` is looking for a
-comparison that's greater than or equal to 1.2 and less than 3.0.0 or is
-greater than or equal to 4.2.3.
-
-The basic comparisons are:
-
-* `=`: equal (aliased to no operator)
-* `!=`: not equal
-* `>`: greater than
-* `<`: less than
-* `>=`: greater than or equal to
-* `<=`: less than or equal to
-
-_Note, according to the Semantic Version specification pre-releases may not be
-API compliant with their release counterpart. It says,_
-
-> _A pre-release version indicates that the version is unstable and might not 
satisfy the intended compatibility requirements as denoted by its associated 
normal version._
-
-_SemVer comparisons without a pre-release value will skip pre-release versions.
-For example, `>1.2.3` will skip pre-releases when looking at a list of values
-while `>1.2.3-alpha.1` will evaluate pre-releases._
-
-## Hyphen Range Comparisons
-
-There are multiple methods to handle ranges and the first is hyphens ranges.
-These look like:
-
-* `1.2 - 1.4.5` which is equivalent to `>= 1.2, <= 1.4.5`
-* `2.3.4 - 4.5` which is equivalent to `>= 2.3.4, <= 4.5`
-
-## Wildcards In Comparisons
-
-The `x`, `X`, and `*` characters can be used as a wildcard character. This 
works
-for all comparison operators. When used on the `=` operator it falls
-back to the pack level comparison (see tilde below). For example,
-
-* `1.2.x` is equivalent to `>= 1.2.0, < 1.3.0`
-* `>= 1.2.x` is equivalent to `>= 1.2.0`
-* `<= 2.x` is equivalent to `<= 3`
-* `*` is equivalent to `>= 0.0.0`
-
-## Tilde Range Comparisons (Patch)
-
-The tilde (`~`) comparison operator is for patch level ranges when a minor
-version is specified and major level changes when the minor number is missing.
-For example,
-
-* `~1.2.3` is equivalent to `>= 1.2.3, < 1.3.0`
-* `~1` is equivalent to `>= 1, < 2`
-* `~2.3` is equivalent to `>= 2.3, < 2.4`
-* `~1.2.x` is equivalent to `>= 1.2.0, < 1.3.0`
-* `~1.x` is equivalent to `>= 1, < 2`
-
-## Caret Range Comparisons (Major)
-
-The caret (`^`) comparison operator is for major level changes. This is useful
-when comparisons of API versions as a major change is API breaking. For 
example,
-
-* `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0`
-* `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0`
-* `^2.3` is equivalent to `>= 2.3, < 3`
-* `^2.x` is equivalent to `>= 2.0.0, < 3`
-
-# Validation
-
-In addition to testing a version against a constraint, a version can be 
validated
-against a constraint. When validation fails a slice of errors containing why a
-version didn't meet the constraint is returned. For example,
-
-```go
-    c, err := semver.NewConstraint("<= 1.2.3, >= 1.4")
-    if err != nil {
-        // Handle constraint not being parseable.
-    }
-
-    v, _ := semver.NewVersion("1.3")
-    if err != nil {
-        // Handle version not being parseable.
-    }
-
-    // Validate a version against a constraint.
-    a, msgs := c.Validate(v)
-    // a is false
-    for _, m := range msgs {
-        fmt.Println(m)
-
-        // Loops over the errors which would read
-        // "1.3 is greater than 1.2.3"
-        // "1.3 is less than 1.4"
-    }
-```
-
-# Contribute
-
-If you find an issue or want to contribute please file an 
[issue](https://github.com/Masterminds/semver/issues)
-or [create a pull request](https://github.com/Masterminds/semver/pulls).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/Masterminds/semver/appveyor.yml 
new/vendor/github.com/Masterminds/semver/appveyor.yml
--- old/vendor/github.com/Masterminds/semver/appveyor.yml       2020-09-21 
13:00:40.000000000 +0200
+++ new/vendor/github.com/Masterminds/semver/appveyor.yml       1970-01-01 
01:00:00.000000000 +0100
@@ -1,44 +0,0 @@
-version: build-{build}.{branch}
-
-clone_folder: C:\gopath\src\github.com\Masterminds\semver
-shallow_clone: true
-
-environment:
-  GOPATH: C:\gopath
-
-platform:
-  - x64
-
-install:
-  - go version
-  - go env
-  - go get -u gopkg.in/alecthomas/gometalinter.v1
-  - set PATH=%PATH%;%GOPATH%\bin
-  - gometalinter.v1.exe --install
-
-build_script:
-  - go install -v ./...
-
-test_script:
-  - "gometalinter.v1 \
-    --disable-all \
-    --enable deadcode \
-    --severity deadcode:error \
-    --enable gofmt \
-    --enable gosimple \
-    --enable ineffassign \
-    --enable misspell \
-    --enable vet \
-    --tests \
-    --vendor \
-    --deadline 60s \
-    ./... || exit_code=1"
-  - "gometalinter.v1 \
-    --disable-all \
-    --enable golint \
-    --vendor \
-    --deadline 60s \
-    ./... || :"
-  - go test -v
-
-deploy: off
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/Masterminds/semver/collection.go 
new/vendor/github.com/Masterminds/semver/collection.go
--- old/vendor/github.com/Masterminds/semver/collection.go      2020-09-21 
13:00:40.000000000 +0200
+++ new/vendor/github.com/Masterminds/semver/collection.go      1970-01-01 
01:00:00.000000000 +0100
@@ -1,24 +0,0 @@
-package semver
-
-// Collection is a collection of Version instances and implements the sort
-// interface. See the sort package for more details.
-// https://golang.org/pkg/sort/
-type Collection []*Version
-
-// Len returns the length of a collection. The number of Version instances
-// on the slice.
-func (c Collection) Len() int {
-       return len(c)
-}
-
-// Less is needed for the sort interface to compare two Version objects on the
-// slice. If checks if one is less than the other.
-func (c Collection) Less(i, j int) bool {
-       return c[i].LessThan(c[j])
-}
-
-// Swap is needed for the sort interface to replace the Version objects
-// at two different positions in the slice.
-func (c Collection) Swap(i, j int) {
-       c[i], c[j] = c[j], c[i]
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/Masterminds/semver/constraints.go 
new/vendor/github.com/Masterminds/semver/constraints.go
--- old/vendor/github.com/Masterminds/semver/constraints.go     2020-09-21 
13:00:40.000000000 +0200
+++ new/vendor/github.com/Masterminds/semver/constraints.go     1970-01-01 
01:00:00.000000000 +0100
@@ -1,426 +0,0 @@
-package semver
-
-import (
-       "errors"
-       "fmt"
-       "regexp"
-       "strings"
-)
-
-// Constraints is one or more constraint that a semantic version can be
-// checked against.
-type Constraints struct {
-       constraints [][]*constraint
-}
-
-// NewConstraint returns a Constraints instance that a Version instance can
-// be checked against. If there is a parse error it will be returned.
-func NewConstraint(c string) (*Constraints, error) {
-
-       // Rewrite - ranges into a comparison operation.
-       c = rewriteRange(c)
-
-       ors := strings.Split(c, "||")
-       or := make([][]*constraint, len(ors))
-       for k, v := range ors {
-               cs := strings.Split(v, ",")
-               result := make([]*constraint, len(cs))
-               for i, s := range cs {
-                       pc, err := parseConstraint(s)
-                       if err != nil {
-                               return nil, err
-                       }
-
-                       result[i] = pc
-               }
-               or[k] = result
-       }
-
-       o := &Constraints{constraints: or}
-       return o, nil
-}
-
-// Check tests if a version satisfies the constraints.
-func (cs Constraints) Check(v *Version) bool {
-       // loop over the ORs and check the inner ANDs
-       for _, o := range cs.constraints {
-               joy := true
-               for _, c := range o {
-                       if !c.check(v) {
-                               joy = false
-                               break
-                       }
-               }
-
-               if joy {
-                       return true
-               }
-       }
-
-       return false
-}
-
-// Validate checks if a version satisfies a constraint. If not a slice of
-// reasons for the failure are returned in addition to a bool.
-func (cs Constraints) Validate(v *Version) (bool, []error) {
-       // loop over the ORs and check the inner ANDs
-       var e []error
-       for _, o := range cs.constraints {
-               joy := true
-               for _, c := range o {
-                       if !c.check(v) {
-                               em := fmt.Errorf(c.msg, v, c.orig)
-                               e = append(e, em)
-                               joy = false
-                       }
-               }
-
-               if joy {
-                       return true, []error{}
-               }
-       }
-
-       return false, e
-}
-
-var constraintOps map[string]cfunc
-var constraintMsg map[string]string
-var constraintRegex *regexp.Regexp
-
-func init() {
-       constraintOps = map[string]cfunc{
-               "":   constraintTildeOrEqual,
-               "=":  constraintTildeOrEqual,
-               "!=": constraintNotEqual,
-               ">":  constraintGreaterThan,
-               "<":  constraintLessThan,
-               ">=": constraintGreaterThanEqual,
-               "=>": constraintGreaterThanEqual,
-               "<=": constraintLessThanEqual,
-               "=<": constraintLessThanEqual,
-               "~":  constraintTilde,
-               "~>": constraintTilde,
-               "^":  constraintCaret,
-       }
-
-       constraintMsg = map[string]string{
-               "":   "%s is not equal to %s",
-               "=":  "%s is not equal to %s",
-               "!=": "%s is equal to %s",
-               ">":  "%s is less than or equal to %s",
-               "<":  "%s is greater than or equal to %s",
-               ">=": "%s is less than %s",
-               "=>": "%s is less than %s",
-               "<=": "%s is greater than %s",
-               "=<": "%s is greater than %s",
-               "~":  "%s does not have same major and minor version as %s",
-               "~>": "%s does not have same major and minor version as %s",
-               "^":  "%s does not have same major version as %s",
-       }
-
-       ops := make([]string, 0, len(constraintOps))
-       for k := range constraintOps {
-               ops = append(ops, regexp.QuoteMeta(k))
-       }
-
-       constraintRegex = regexp.MustCompile(fmt.Sprintf(
-               `^\s*(%s)\s*(%s)\s*$`,
-               strings.Join(ops, "|"),
-               cvRegex))
-
-       constraintRangeRegex = regexp.MustCompile(fmt.Sprintf(
-               `\s*(%s)\s+-\s+(%s)\s*`,
-               cvRegex, cvRegex))
-}
-
-// An individual constraint
-type constraint struct {
-       // The callback function for the restraint. It performs the logic for
-       // the constraint.
-       function cfunc
-
-       msg string
-
-       // The version used in the constraint check. For example, if a 
constraint
-       // is '<= 2.0.0' the con a version instance representing 2.0.0.
-       con *Version
-
-       // The original parsed version (e.g., 4.x from != 4.x)
-       orig string
-
-       // When an x is used as part of the version (e.g., 1.x)
-       minorDirty bool
-       dirty      bool
-       patchDirty bool
-}
-
-// Check if a version meets the constraint
-func (c *constraint) check(v *Version) bool {
-       return c.function(v, c)
-}
-
-type cfunc func(v *Version, c *constraint) bool
-
-func parseConstraint(c string) (*constraint, error) {
-       m := constraintRegex.FindStringSubmatch(c)
-       if m == nil {
-               return nil, fmt.Errorf("improper constraint: %s", c)
-       }
-
-       ver := m[2]
-       orig := ver
-       minorDirty := false
-       patchDirty := false
-       dirty := false
-       if isX(m[3]) {
-               ver = "0.0.0"
-               dirty = true
-       } else if isX(strings.TrimPrefix(m[4], ".")) || m[4] == "" {
-               minorDirty = true
-               dirty = true
-               ver = fmt.Sprintf("%s.0.0%s", m[3], m[6])
-       } else if isX(strings.TrimPrefix(m[5], ".")) {
-               dirty = true
-               patchDirty = true
-               ver = fmt.Sprintf("%s%s.0%s", m[3], m[4], m[6])
-       }
-
-       con, err := NewVersion(ver)
-       if err != nil {
-
-               // The constraintRegex should catch any regex parsing errors. 
So,
-               // we should never get here.
-               return nil, errors.New("constraint Parser Error")
-       }
-
-       cs := &constraint{
-               function:   constraintOps[m[1]],
-               msg:        constraintMsg[m[1]],
-               con:        con,
-               orig:       orig,
-               minorDirty: minorDirty,
-               patchDirty: patchDirty,
-               dirty:      dirty,
-       }
-       return cs, nil
-}
-
-// Constraint functions
-func constraintNotEqual(v *Version, c *constraint) bool {
-       if c.dirty {
-
-               // If there is a pre-release on the version but the constraint 
isn't looking
-               // for them assume that pre-releases are not compatible. See 
issue 21 for
-               // more details.
-               if v.Prerelease() != "" && c.con.Prerelease() == "" {
-                       return false
-               }
-
-               if c.con.Major() != v.Major() {
-                       return true
-               }
-               if c.con.Minor() != v.Minor() && !c.minorDirty {
-                       return true
-               } else if c.minorDirty {
-                       return false
-               }
-
-               return false
-       }
-
-       return !v.Equal(c.con)
-}
-
-func constraintGreaterThan(v *Version, c *constraint) bool {
-
-       // An edge case the constraint is 0.0.0 and the version is 
0.0.0-someprerelease
-       // exists. This that case.
-       if !isNonZero(c.con) && isNonZero(v) {
-               return true
-       }
-
-       // If there is a pre-release on the version but the constraint isn't 
looking
-       // for them assume that pre-releases are not compatible. See issue 21 
for
-       // more details.
-       if v.Prerelease() != "" && c.con.Prerelease() == "" {
-               return false
-       }
-
-       return v.Compare(c.con) == 1
-}
-
-func constraintLessThan(v *Version, c *constraint) bool {
-       // If there is a pre-release on the version but the constraint isn't 
looking
-       // for them assume that pre-releases are not compatible. See issue 21 
for
-       // more details.
-       if v.Prerelease() != "" && c.con.Prerelease() == "" {
-               return false
-       }
-
-       if !c.dirty {
-               return v.Compare(c.con) < 0
-       }
-
-       if v.Major() > c.con.Major() {
-               return false
-       } else if v.Minor() > c.con.Minor() && !c.minorDirty {
-               return false
-       }
-
-       return true
-}
-
-func constraintGreaterThanEqual(v *Version, c *constraint) bool {
-       // An edge case the constraint is 0.0.0 and the version is 
0.0.0-someprerelease
-       // exists. This that case.
-       if !isNonZero(c.con) && isNonZero(v) {
-               return true
-       }
-
-       // If there is a pre-release on the version but the constraint isn't 
looking
-       // for them assume that pre-releases are not compatible. See issue 21 
for
-       // more details.
-       if v.Prerelease() != "" && c.con.Prerelease() == "" {
-               return false
-       }
-
-       return v.Compare(c.con) >= 0
-}
-
-func constraintLessThanEqual(v *Version, c *constraint) bool {
-       // If there is a pre-release on the version but the constraint isn't 
looking
-       // for them assume that pre-releases are not compatible. See issue 21 
for
-       // more details.
-       if v.Prerelease() != "" && c.con.Prerelease() == "" {
-               return false
-       }
-
-       if !c.dirty {
-               return v.Compare(c.con) <= 0
-       }
-
-       if v.Major() > c.con.Major() {
-               return false
-       } else if v.Minor() > c.con.Minor() && !c.minorDirty {
-               return false
-       }
-
-       return true
-}
-
-// ~*, ~>* --> >= 0.0.0 (any)
-// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0, <3.0.0
-// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0, <2.1.0
-// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0, <1.3.0
-// ~1.2.3, ~>1.2.3 --> >=1.2.3, <1.3.0
-// ~1.2.0, ~>1.2.0 --> >=1.2.0, <1.3.0
-func constraintTilde(v *Version, c *constraint) bool {
-       // If there is a pre-release on the version but the constraint isn't 
looking
-       // for them assume that pre-releases are not compatible. See issue 21 
for
-       // more details.
-       if v.Prerelease() != "" && c.con.Prerelease() == "" {
-               return false
-       }
-
-       if v.LessThan(c.con) {
-               return false
-       }
-
-       // ~0.0.0 is a special case where all constraints are accepted. It's
-       // equivalent to >= 0.0.0.
-       if c.con.Major() == 0 && c.con.Minor() == 0 && c.con.Patch() == 0 &&
-               !c.minorDirty && !c.patchDirty {
-               return true
-       }
-
-       if v.Major() != c.con.Major() {
-               return false
-       }
-
-       if v.Minor() != c.con.Minor() && !c.minorDirty {
-               return false
-       }
-
-       return true
-}
-
-// When there is a .x (dirty) status it automatically opts in to ~. Otherwise
-// it's a straight =
-func constraintTildeOrEqual(v *Version, c *constraint) bool {
-       // If there is a pre-release on the version but the constraint isn't 
looking
-       // for them assume that pre-releases are not compatible. See issue 21 
for
-       // more details.
-       if v.Prerelease() != "" && c.con.Prerelease() == "" {
-               return false
-       }
-
-       if c.dirty {
-               c.msg = constraintMsg["~"]
-               return constraintTilde(v, c)
-       }
-
-       return v.Equal(c.con)
-}
-
-// ^* --> (any)
-// ^2, ^2.x, ^2.x.x --> >=2.0.0, <3.0.0
-// ^2.0, ^2.0.x --> >=2.0.0, <3.0.0
-// ^1.2, ^1.2.x --> >=1.2.0, <2.0.0
-// ^1.2.3 --> >=1.2.3, <2.0.0
-// ^1.2.0 --> >=1.2.0, <2.0.0
-func constraintCaret(v *Version, c *constraint) bool {
-       // If there is a pre-release on the version but the constraint isn't 
looking
-       // for them assume that pre-releases are not compatible. See issue 21 
for
-       // more details.
-       if v.Prerelease() != "" && c.con.Prerelease() == "" {
-               return false
-       }
-
-       if v.LessThan(c.con) {
-               return false
-       }
-
-       if v.Major() != c.con.Major() {
-               return false
-       }
-
-       return true
-}
-
-var constraintRangeRegex *regexp.Regexp
-
-const cvRegex string = `v?([0-9|x|X|\*]+)(\.[0-9|x|X|\*]+)?(\.[0-9|x|X|\*]+)?` 
+
-       `(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` +
-       `(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?`
-
-func isX(x string) bool {
-       switch x {
-       case "x", "*", "X":
-               return true
-       default:
-               return false
-       }
-}
-
-func rewriteRange(i string) string {
-       m := constraintRangeRegex.FindAllStringSubmatch(i, -1)
-       if m == nil {
-               return i
-       }
-       o := i
-       for _, v := range m {
-               t := fmt.Sprintf(">= %s, <= %s", v[1], v[11])
-               o = strings.Replace(o, v[0], t, 1)
-       }
-
-       return o
-}
-
-// Detect if a version is not zero (0.0.0)
-func isNonZero(v *Version) bool {
-       if v.Major() != 0 || v.Minor() != 0 || v.Patch() != 0 || v.Prerelease() 
!= "" {
-               return true
-       }
-
-       return false
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/Masterminds/semver/doc.go 
new/vendor/github.com/Masterminds/semver/doc.go
--- old/vendor/github.com/Masterminds/semver/doc.go     2020-09-21 
13:00:40.000000000 +0200
+++ new/vendor/github.com/Masterminds/semver/doc.go     1970-01-01 
01:00:00.000000000 +0100
@@ -1,115 +0,0 @@
-/*
-Package semver provides the ability to work with Semantic Versions 
(http://semver.org) in Go.
-
-Specifically it provides the ability to:
-
-    * Parse semantic versions
-    * Sort semantic versions
-    * Check if a semantic version fits within a set of constraints
-    * Optionally work with a `v` prefix
-
-Parsing Semantic Versions
-
-To parse a semantic version use the `NewVersion` function. For example,
-
-    v, err := semver.NewVersion("1.2.3-beta.1+build345")
-
-If there is an error the version wasn't parseable. The version object has 
methods
-to get the parts of the version, compare it to other versions, convert the
-version back into a string, and get the original string. For more details
-please see the documentation at 
https://godoc.org/github.com/Masterminds/semver.
-
-Sorting Semantic Versions
-
-A set of versions can be sorted using the `sort` package from the standard 
library.
-For example,
-
-    raw := []string{"1.2.3", "1.0", "1.3", "2", "0.4.2",}
-    vs := make([]*semver.Version, len(raw))
-       for i, r := range raw {
-               v, err := semver.NewVersion(r)
-               if err != nil {
-                       t.Errorf("Error parsing version: %s", err)
-               }
-
-               vs[i] = v
-       }
-
-       sort.Sort(semver.Collection(vs))
-
-Checking Version Constraints
-
-Checking a version against version constraints is one of the most featureful
-parts of the package.
-
-    c, err := semver.NewConstraint(">= 1.2.3")
-    if err != nil {
-        // Handle constraint not being parseable.
-    }
-
-    v, _ := semver.NewVersion("1.3")
-    if err != nil {
-        // Handle version not being parseable.
-    }
-    // Check if the version meets the constraints. The a variable will be true.
-    a := c.Check(v)
-
-Basic Comparisons
-
-There are two elements to the comparisons. First, a comparison string is a list
-of comma separated and comparisons. These are then separated by || separated or
-comparisons. For example, `">= 1.2, < 3.0.0 || >= 4.2.3"` is looking for a
-comparison that's greater than or equal to 1.2 and less than 3.0.0 or is
-greater than or equal to 4.2.3.
-
-The basic comparisons are:
-
-    * `=`: equal (aliased to no operator)
-    * `!=`: not equal
-    * `>`: greater than
-    * `<`: less than
-    * `>=`: greater than or equal to
-    * `<=`: less than or equal to
-
-Hyphen Range Comparisons
-
-There are multiple methods to handle ranges and the first is hyphens ranges.
-These look like:
-
-    * `1.2 - 1.4.5` which is equivalent to `>= 1.2, <= 1.4.5`
-    * `2.3.4 - 4.5` which is equivalent to `>= 2.3.4, <= 4.5`
-
-Wildcards In Comparisons
-
-The `x`, `X`, and `*` characters can be used as a wildcard character. This 
works
-for all comparison operators. When used on the `=` operator it falls
-back to the pack level comparison (see tilde below). For example,
-
-    * `1.2.x` is equivalent to `>= 1.2.0, < 1.3.0`
-    * `>= 1.2.x` is equivalent to `>= 1.2.0`
-    * `<= 2.x` is equivalent to `<= 3`
-    * `*` is equivalent to `>= 0.0.0`
-
-Tilde Range Comparisons (Patch)
-
-The tilde (`~`) comparison operator is for patch level ranges when a minor
-version is specified and major level changes when the minor number is missing.
-For example,
-
-    * `~1.2.3` is equivalent to `>= 1.2.3, < 1.3.0`
-    * `~1` is equivalent to `>= 1, < 2`
-    * `~2.3` is equivalent to `>= 2.3, < 2.4`
-    * `~1.2.x` is equivalent to `>= 1.2.0, < 1.3.0`
-    * `~1.x` is equivalent to `>= 1, < 2`
-
-Caret Range Comparisons (Major)
-
-The caret (`^`) comparison operator is for major level changes. This is useful
-when comparisons of API versions as a major change is API breaking. For 
example,
-
-    * `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0`
-    * `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0`
-    * `^2.3` is equivalent to `>= 2.3, < 3`
-    * `^2.x` is equivalent to `>= 2.0.0, < 3`
-*/
-package semver
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/Masterminds/semver/version.go 
new/vendor/github.com/Masterminds/semver/version.go
--- old/vendor/github.com/Masterminds/semver/version.go 2020-09-21 
13:00:40.000000000 +0200
+++ new/vendor/github.com/Masterminds/semver/version.go 1970-01-01 
01:00:00.000000000 +0100
@@ -1,421 +0,0 @@
-package semver
-
-import (
-       "bytes"
-       "encoding/json"
-       "errors"
-       "fmt"
-       "regexp"
-       "strconv"
-       "strings"
-)
-
-// The compiled version of the regex created at init() is cached here so it
-// only needs to be created once.
-var versionRegex *regexp.Regexp
-var validPrereleaseRegex *regexp.Regexp
-
-var (
-       // ErrInvalidSemVer is returned a version is found to be invalid when
-       // being parsed.
-       ErrInvalidSemVer = errors.New("Invalid Semantic Version")
-
-       // ErrInvalidMetadata is returned when the metadata is an invalid format
-       ErrInvalidMetadata = errors.New("Invalid Metadata string")
-
-       // ErrInvalidPrerelease is returned when the pre-release is an invalid 
format
-       ErrInvalidPrerelease = errors.New("Invalid Prerelease string")
-)
-
-// SemVerRegex is the regular expression used to parse a semantic version.
-const SemVerRegex string = `v?([0-9]+)(\.[0-9]+)?(\.[0-9]+)?` +
-       `(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` +
-       `(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?`
-
-// ValidPrerelease is the regular expression which validates
-// both prerelease and metadata values.
-const ValidPrerelease string = `^([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*)`
-
-// Version represents a single semantic version.
-type Version struct {
-       major, minor, patch int64
-       pre                 string
-       metadata            string
-       original            string
-}
-
-func init() {
-       versionRegex = regexp.MustCompile("^" + SemVerRegex + "$")
-       validPrereleaseRegex = regexp.MustCompile(ValidPrerelease)
-}
-
-// NewVersion parses a given version and returns an instance of Version or
-// an error if unable to parse the version.
-func NewVersion(v string) (*Version, error) {
-       m := versionRegex.FindStringSubmatch(v)
-       if m == nil {
-               return nil, ErrInvalidSemVer
-       }
-
-       sv := &Version{
-               metadata: m[8],
-               pre:      m[5],
-               original: v,
-       }
-
-       var temp int64
-       temp, err := strconv.ParseInt(m[1], 10, 64)
-       if err != nil {
-               return nil, fmt.Errorf("Error parsing version segment: %s", err)
-       }
-       sv.major = temp
-
-       if m[2] != "" {
-               temp, err = strconv.ParseInt(strings.TrimPrefix(m[2], "."), 10, 
64)
-               if err != nil {
-                       return nil, fmt.Errorf("Error parsing version segment: 
%s", err)
-               }
-               sv.minor = temp
-       } else {
-               sv.minor = 0
-       }
-
-       if m[3] != "" {
-               temp, err = strconv.ParseInt(strings.TrimPrefix(m[3], "."), 10, 
64)
-               if err != nil {
-                       return nil, fmt.Errorf("Error parsing version segment: 
%s", err)
-               }
-               sv.patch = temp
-       } else {
-               sv.patch = 0
-       }
-
-       return sv, nil
-}
-
-// MustParse parses a given version and panics on error.
-func MustParse(v string) *Version {
-       sv, err := NewVersion(v)
-       if err != nil {
-               panic(err)
-       }
-       return sv
-}
-
-// String converts a Version object to a string.
-// Note, if the original version contained a leading v this version will not.
-// See the Original() method to retrieve the original value. Semantic Versions
-// don't contain a leading v per the spec. Instead it's optional on
-// impelementation.
-func (v *Version) String() string {
-       var buf bytes.Buffer
-
-       fmt.Fprintf(&buf, "%d.%d.%d", v.major, v.minor, v.patch)
-       if v.pre != "" {
-               fmt.Fprintf(&buf, "-%s", v.pre)
-       }
-       if v.metadata != "" {
-               fmt.Fprintf(&buf, "+%s", v.metadata)
-       }
-
-       return buf.String()
-}
-
-// Original returns the original value passed in to be parsed.
-func (v *Version) Original() string {
-       return v.original
-}
-
-// Major returns the major version.
-func (v *Version) Major() int64 {
-       return v.major
-}
-
-// Minor returns the minor version.
-func (v *Version) Minor() int64 {
-       return v.minor
-}
-
-// Patch returns the patch version.
-func (v *Version) Patch() int64 {
-       return v.patch
-}
-
-// Prerelease returns the pre-release version.
-func (v *Version) Prerelease() string {
-       return v.pre
-}
-
-// Metadata returns the metadata on the version.
-func (v *Version) Metadata() string {
-       return v.metadata
-}
-
-// originalVPrefix returns the original 'v' prefix if any.
-func (v *Version) originalVPrefix() string {
-
-       // Note, only lowercase v is supported as a prefix by the parser.
-       if v.original != "" && v.original[:1] == "v" {
-               return v.original[:1]
-       }
-       return ""
-}
-
-// IncPatch produces the next patch version.
-// If the current version does not have prerelease/metadata information,
-// it unsets metadata and prerelease values, increments patch number.
-// If the current version has any of prerelease or metadata information,
-// it unsets both values and keeps curent patch value
-func (v Version) IncPatch() Version {
-       vNext := v
-       // according to http://semver.org/#spec-item-9
-       // Pre-release versions have a lower precedence than the associated 
normal version.
-       // according to http://semver.org/#spec-item-10
-       // Build metadata SHOULD be ignored when determining version precedence.
-       if v.pre != "" {
-               vNext.metadata = ""
-               vNext.pre = ""
-       } else {
-               vNext.metadata = ""
-               vNext.pre = ""
-               vNext.patch = v.patch + 1
-       }
-       vNext.original = v.originalVPrefix() + "" + vNext.String()
-       return vNext
-}
-
-// IncMinor produces the next minor version.
-// Sets patch to 0.
-// Increments minor number.
-// Unsets metadata.
-// Unsets prerelease status.
-func (v Version) IncMinor() Version {
-       vNext := v
-       vNext.metadata = ""
-       vNext.pre = ""
-       vNext.patch = 0
-       vNext.minor = v.minor + 1
-       vNext.original = v.originalVPrefix() + "" + vNext.String()
-       return vNext
-}
-
-// IncMajor produces the next major version.
-// Sets patch to 0.
-// Sets minor to 0.
-// Increments major number.
-// Unsets metadata.
-// Unsets prerelease status.
-func (v Version) IncMajor() Version {
-       vNext := v
-       vNext.metadata = ""
-       vNext.pre = ""
-       vNext.patch = 0
-       vNext.minor = 0
-       vNext.major = v.major + 1
-       vNext.original = v.originalVPrefix() + "" + vNext.String()
-       return vNext
-}
-
-// SetPrerelease defines the prerelease value.
-// Value must not include the required 'hypen' prefix.
-func (v Version) SetPrerelease(prerelease string) (Version, error) {
-       vNext := v
-       if len(prerelease) > 0 && !validPrereleaseRegex.MatchString(prerelease) 
{
-               return vNext, ErrInvalidPrerelease
-       }
-       vNext.pre = prerelease
-       vNext.original = v.originalVPrefix() + "" + vNext.String()
-       return vNext, nil
-}
-
-// SetMetadata defines metadata value.
-// Value must not include the required 'plus' prefix.
-func (v Version) SetMetadata(metadata string) (Version, error) {
-       vNext := v
-       if len(metadata) > 0 && !validPrereleaseRegex.MatchString(metadata) {
-               return vNext, ErrInvalidMetadata
-       }
-       vNext.metadata = metadata
-       vNext.original = v.originalVPrefix() + "" + vNext.String()
-       return vNext, nil
-}
-
-// LessThan tests if one version is less than another one.
-func (v *Version) LessThan(o *Version) bool {
-       return v.Compare(o) < 0
-}
-
-// GreaterThan tests if one version is greater than another one.
-func (v *Version) GreaterThan(o *Version) bool {
-       return v.Compare(o) > 0
-}
-
-// Equal tests if two versions are equal to each other.
-// Note, versions can be equal with different metadata since metadata
-// is not considered part of the comparable version.
-func (v *Version) Equal(o *Version) bool {
-       return v.Compare(o) == 0
-}
-
-// Compare compares this version to another one. It returns -1, 0, or 1 if
-// the version smaller, equal, or larger than the other version.
-//
-// Versions are compared by X.Y.Z. Build metadata is ignored. Prerelease is
-// lower than the version without a prerelease.
-func (v *Version) Compare(o *Version) int {
-       // Compare the major, minor, and patch version for differences. If a
-       // difference is found return the comparison.
-       if d := compareSegment(v.Major(), o.Major()); d != 0 {
-               return d
-       }
-       if d := compareSegment(v.Minor(), o.Minor()); d != 0 {
-               return d
-       }
-       if d := compareSegment(v.Patch(), o.Patch()); d != 0 {
-               return d
-       }
-
-       // At this point the major, minor, and patch versions are the same.
-       ps := v.pre
-       po := o.Prerelease()
-
-       if ps == "" && po == "" {
-               return 0
-       }
-       if ps == "" {
-               return 1
-       }
-       if po == "" {
-               return -1
-       }
-
-       return comparePrerelease(ps, po)
-}
-
-// UnmarshalJSON implements JSON.Unmarshaler interface.
-func (v *Version) UnmarshalJSON(b []byte) error {
-       var s string
-       if err := json.Unmarshal(b, &s); err != nil {
-               return err
-       }
-       temp, err := NewVersion(s)
-       if err != nil {
-               return err
-       }
-       v.major = temp.major
-       v.minor = temp.minor
-       v.patch = temp.patch
-       v.pre = temp.pre
-       v.metadata = temp.metadata
-       v.original = temp.original
-       temp = nil
-       return nil
-}
-
-// MarshalJSON implements JSON.Marshaler interface.
-func (v *Version) MarshalJSON() ([]byte, error) {
-       return json.Marshal(v.String())
-}
-
-func compareSegment(v, o int64) int {
-       if v < o {
-               return -1
-       }
-       if v > o {
-               return 1
-       }
-
-       return 0
-}
-
-func comparePrerelease(v, o string) int {
-
-       // split the prelease versions by their part. The separator, per the 
spec,
-       // is a .
-       sparts := strings.Split(v, ".")
-       oparts := strings.Split(o, ".")
-
-       // Find the longer length of the parts to know how many loop iterations 
to
-       // go through.
-       slen := len(sparts)
-       olen := len(oparts)
-
-       l := slen
-       if olen > slen {
-               l = olen
-       }
-
-       // Iterate over each part of the prereleases to compare the differences.
-       for i := 0; i < l; i++ {
-               // Since the lentgh of the parts can be different we need to 
create
-               // a placeholder. This is to avoid out of bounds issues.
-               stemp := ""
-               if i < slen {
-                       stemp = sparts[i]
-               }
-
-               otemp := ""
-               if i < olen {
-                       otemp = oparts[i]
-               }
-
-               d := comparePrePart(stemp, otemp)
-               if d != 0 {
-                       return d
-               }
-       }
-
-       // Reaching here means two versions are of equal value but have 
different
-       // metadata (the part following a +). They are not identical in string 
form
-       // but the version comparison finds them to be equal.
-       return 0
-}
-
-func comparePrePart(s, o string) int {
-       // Fastpath if they are equal
-       if s == o {
-               return 0
-       }
-
-       // When s or o are empty we can use the other in an attempt to determine
-       // the response.
-       if s == "" {
-               if o != "" {
-                       return -1
-               }
-               return 1
-       }
-
-       if o == "" {
-               if s != "" {
-                       return 1
-               }
-               return -1
-       }
-
-       // When comparing strings "99" is greater than "103". To handle
-       // cases like this we need to detect numbers and compare them.
-
-       oi, n1 := strconv.ParseInt(o, 10, 64)
-       si, n2 := strconv.ParseInt(s, 10, 64)
-
-       // The case where both are strings compare the strings
-       if n1 != nil && n2 != nil {
-               if s > o {
-                       return 1
-               }
-               return -1
-       } else if n1 != nil {
-               // o is a string and s is a number
-               return -1
-       } else if n2 != nil {
-               // s is a string and o is a number
-               return 1
-       }
-       // Both are numbers
-       if si > oi {
-               return 1
-       }
-       return -1
-
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/variantdev/chartify/chartify.go 
new/vendor/github.com/variantdev/chartify/chartify.go
--- old/vendor/github.com/variantdev/chartify/chartify.go       2020-09-21 
13:00:42.000000000 +0200
+++ new/vendor/github.com/variantdev/chartify/chartify.go       2020-10-18 
10:51:27.000000000 +0200
@@ -200,7 +200,8 @@
                        ver = "1.0.0"
                        r.Logf("using the default chart version 1.0.0 due to 
that no ChartVersion is specified")
                }
-               chartyaml := fmt.Sprintf("name: \"%s\"\nversion: 
%s\nappVersion: %s\n", chartName, ver, ver)
+               chartConfigTemplate := "name: \"%s\"\nversion: %s\nappVersion: 
%s\napiVersion: v2\n"
+               chartyaml := fmt.Sprintf(chartConfigTemplate, chartName, ver, 
ver)
                if err := r.WriteFile(filepath.Join(tempDir, "Chart.yaml"), 
[]byte(chartyaml), 0644); err != nil {
                        return "", err
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/variantdev/vals/pkg/providers/ssm/ssm.go 
new/vendor/github.com/variantdev/vals/pkg/providers/ssm/ssm.go
--- old/vendor/github.com/variantdev/vals/pkg/providers/ssm/ssm.go      
2020-09-21 13:00:42.000000000 +0200
+++ new/vendor/github.com/variantdev/vals/pkg/providers/ssm/ssm.go      
2020-10-18 10:51:27.000000000 +0200
@@ -105,7 +105,7 @@
                return "", errors.New(err.Error())
        }
        if result != "" {
-               p.debugf("SSM: successfully retrieved key=%s", result)
+               p.debugf("SSM: successfully retrieved key=%s", key)
                return result, nil
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt
--- old/vendor/modules.txt      2020-09-21 13:00:44.000000000 +0200
+++ new/vendor/modules.txt      2020-10-18 10:51:30.000000000 +0200
@@ -36,10 +36,8 @@
 github.com/BurntSushi/toml
 # github.com/Masterminds/goutils v1.1.0
 github.com/Masterminds/goutils
-# github.com/Masterminds/semver v1.4.2
-## explicit
-github.com/Masterminds/semver
 # github.com/Masterminds/semver/v3 v3.1.0
+## explicit
 github.com/Masterminds/semver/v3
 # github.com/Masterminds/sprig/v3 v3.1.0
 ## explicit
@@ -279,13 +277,13 @@
 # github.com/urfave/cli v1.20.0
 ## explicit
 github.com/urfave/cli
-# github.com/variantdev/chartify v0.4.2
+# github.com/variantdev/chartify v0.4.3
 ## explicit
 github.com/variantdev/chartify
 # github.com/variantdev/dag v0.0.0-20191028002400-bb0b3c785363
 ## explicit
 github.com/variantdev/dag/pkg/dag
-# github.com/variantdev/vals v0.10.2
+# github.com/variantdev/vals v0.10.3
 ## explicit
 github.com/variantdev/vals
 github.com/variantdev/vals/pkg/api


Reply via email to