Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package helm for openSUSE:Factory checked in 
at 2021-05-19 17:48:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/helm (Old)
 and      /work/SRC/openSUSE:Factory/.helm.new.2988 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "helm"

Wed May 19 17:48:43 2021 rev:24 rq:886528 version:3.5.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/helm/helm.changes        2021-02-18 
20:40:01.122650807 +0100
+++ /work/SRC/openSUSE:Factory/.helm.new.2988/helm.changes      2021-05-19 
17:48:45.973689098 +0200
@@ -1,0 +2,24 @@
+Mon Apr 19 05:22:47 UTC 2021 - jenting.hs...@suse.com
+
+- Update to version 3.5.4:
+  * Add/update deprecation notices
+  * Wrap validation error instead of recreating
+  * Move default to avoid nil check
+  * Add name validation rules for object kinds
+  * Use kube libraries v0.20.4
+
+-------------------------------------------------------------------
+Wed Mar 17 15:45:02 UTC 2021 - dmuel...@suse.com
+
+- Update to version 3.5.3:
+  * Fix the example for --time-format flag
+  * Improve the console output for resource policy keep to align with helm2.
+  * test(pkg/storage): Verify that storage.Create returns an error if it fails 
to clean up least-recent release versions
+  * fix(pkg/storage): If storage.Create fails to clean up recent release 
versions, return an error
+  * fix(test): Increase golangci-lint timeout
+  * fix release sha256
+  * Fix-9253: Change the deprecated charts repo URL in release notes
+  * Update default ingress values section to correspond with template
+  * use kube libraries v0.20.2
+
+-------------------------------------------------------------------

Old:
----
  helm-3.5.2.tar.gz

New:
----
  helm-3.5.4.tar.gz

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

Other differences:
------------------
++++++ helm.spec ++++++
--- /var/tmp/diff_new_pack.Bv5dKk/_old  2021-05-19 17:48:47.057684553 +0200
+++ /var/tmp/diff_new_pack.Bv5dKk/_new  2021-05-19 17:48:47.061684536 +0200
@@ -21,7 +21,7 @@
 %define git_dirty clean
 
 Name:           helm
-Version:        3.5.2
+Version:        3.5.4
 Release:        0
 Summary:        The Kubernetes Package Manager
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.Bv5dKk/_old  2021-05-19 17:48:47.089684419 +0200
+++ /var/tmp/diff_new_pack.Bv5dKk/_new  2021-05-19 17:48:47.089684419 +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">v3.5.2</param>
+    <param name="revision">v3.5.4</param>
     <param name="changesgenerate">enable</param>
   </service>
   <service name="recompress" mode="disabled">

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.Bv5dKk/_old  2021-05-19 17:48:47.109684335 +0200
+++ /var/tmp/diff_new_pack.Bv5dKk/_new  2021-05-19 17:48:47.109684335 +0200
@@ -1,4 +1,4 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/helm/helm.git</param>
-              <param 
name="changesrevision">167aac70832d3a384f65f9745335e9fb40169dc2</param></service></servicedata>
\ No newline at end of file
+              <param 
name="changesrevision">1b5edb69df3d3a08df77c9902dc17af864ff05d1</param></service></servicedata>
\ No newline at end of file

++++++ helm-3.5.2.tar.gz -> helm-3.5.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-3.5.2/Makefile new/helm-3.5.4/Makefile
--- old/helm-3.5.2/Makefile     2021-02-04 22:46:22.000000000 +0100
+++ new/helm-3.5.4/Makefile     2021-04-14 22:39:53.000000000 +0200
@@ -111,7 +111,7 @@
 
 .PHONY: test-style
 test-style:
-       GO111MODULE=on golangci-lint run
+       GO111MODULE=on golangci-lint run --timeout 5m0s
        @scripts/validate-license.sh
 
 .PHONY: test-acceptance
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-3.5.2/cmd/helm/list.go 
new/helm-3.5.4/cmd/helm/list.go
--- old/helm-3.5.2/cmd/helm/list.go     2021-02-04 22:46:22.000000000 +0100
+++ new/helm-3.5.4/cmd/helm/list.go     2021-04-14 22:39:53.000000000 +0200
@@ -114,7 +114,7 @@
 
        f := cmd.Flags()
        f.BoolVarP(&client.Short, "short", "q", false, "output short (quiet) 
listing format")
-       f.StringVar(&client.TimeFormat, "time-format", "", "format time. 
Example: --time-format 2009-11-17 20:34:10 +0000 UTC")
+       f.StringVar(&client.TimeFormat, "time-format", "", `format time using 
golang time formatter. Example: --time-format "2006-01-02 15:04:05Z0700"`)
        f.BoolVarP(&client.ByDate, "date", "d", false, "sort by release date")
        f.BoolVarP(&client.SortReverse, "reverse", "r", false, "reverse the 
sort order")
        f.BoolVarP(&client.All, "all", "a", false, "show all releases without 
any filter applied")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-3.5.2/go.mod new/helm-3.5.4/go.mod
--- old/helm-3.5.2/go.mod       2021-02-04 22:46:22.000000000 +0100
+++ new/helm-3.5.4/go.mod       2021-04-14 22:39:53.000000000 +0200
@@ -37,14 +37,14 @@
        github.com/xeipuuv/gojsonschema v1.2.0
        golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
        golang.org/x/term v0.0.0-20201117132131-f5c789dd3221
-       k8s.io/api v0.20.2
-       k8s.io/apiextensions-apiserver v0.20.2
-       k8s.io/apimachinery v0.20.2
-       k8s.io/apiserver v0.20.2
-       k8s.io/cli-runtime v0.20.2
-       k8s.io/client-go v0.20.2
-       k8s.io/klog/v2 v2.4.0
-       k8s.io/kubectl v0.20.1
+       k8s.io/api v0.20.4
+       k8s.io/apiextensions-apiserver v0.20.4
+       k8s.io/apimachinery v0.20.4
+       k8s.io/apiserver v0.20.4
+       k8s.io/cli-runtime v0.20.4
+       k8s.io/client-go v0.20.4
+       k8s.io/klog/v2 v2.5.0
+       k8s.io/kubectl v0.20.4
        sigs.k8s.io/yaml v1.2.0
 )
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-3.5.2/go.sum new/helm-3.5.4/go.sum
--- old/helm-3.5.2/go.sum       2021-02-04 22:46:22.000000000 +0100
+++ new/helm-3.5.4/go.sum       2021-04-14 22:39:53.000000000 +0200
@@ -7,8 +7,6 @@
 cloud.google.com/go v0.45.1/go.mod 
h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
 cloud.google.com/go v0.46.3/go.mod 
h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
 cloud.google.com/go v0.50.0/go.mod 
h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
-cloud.google.com/go v0.51.0 h1:PvKAVQWCtlGUSlZkGW3QLelKaWq7KYv/MW1EboG8bfM=
-cloud.google.com/go v0.51.0/go.mod 
h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw=
 cloud.google.com/go v0.52.0/go.mod 
h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
 cloud.google.com/go v0.53.0/go.mod 
h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
 cloud.google.com/go v0.54.0 h1:3ithwDMr7/3vpAMXiH+ZQnYbuIsh+OPhUPMFC9enmn0=
@@ -30,42 +28,20 @@
 github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 
h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
 github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod 
h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
 github.com/Azure/go-autorest v10.8.1+incompatible/go.mod 
h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
-github.com/Azure/go-autorest v13.3.2+incompatible 
h1:VxzPyuhtnlBOzc4IWCZHqpyH2d+QMLQEuy3wREyY4oc=
-github.com/Azure/go-autorest v13.3.2+incompatible/go.mod 
h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
 github.com/Azure/go-autorest v14.2.0+incompatible 
h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
 github.com/Azure/go-autorest v14.2.0+incompatible/go.mod 
h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
-github.com/Azure/go-autorest/autorest v0.9.0 
h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs=
-github.com/Azure/go-autorest/autorest v0.9.0/go.mod 
h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
-github.com/Azure/go-autorest/autorest v0.9.6 
h1:5YWtOnckcudzIw8lPPBcWOnmIFWMtHci1ZWAZulMSx0=
-github.com/Azure/go-autorest/autorest v0.9.6/go.mod 
h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630=
 github.com/Azure/go-autorest/autorest v0.11.1 
h1:eVvIXUKiTgv++6YnWb42DUA1YL7qDugnKP0HljexdnQ=
 github.com/Azure/go-autorest/autorest v0.11.1/go.mod 
h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw=
-github.com/Azure/go-autorest/autorest/adal v0.5.0 
h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU=
-github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod 
h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
-github.com/Azure/go-autorest/autorest/adal v0.8.2 
h1:O1X4oexUxnZCaEUGsvMnr8ZGj8HI37tNezwY4npRqA0=
-github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod 
h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q=
 github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod 
h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg=
 github.com/Azure/go-autorest/autorest/adal v0.9.5 
h1:Y3bBUV4rTuxenJJs41HU3qmqsb+auo+a3Lz+PlJPpL0=
 github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod 
h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A=
-github.com/Azure/go-autorest/autorest/date v0.1.0 
h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM=
-github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod 
h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
-github.com/Azure/go-autorest/autorest/date v0.2.0 
h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM=
-github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod 
h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g=
 github.com/Azure/go-autorest/autorest/date v0.3.0 
h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw=
 github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod 
h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
-github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod 
h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
-github.com/Azure/go-autorest/autorest/mocks v0.2.0 
h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0=
-github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod 
h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
-github.com/Azure/go-autorest/autorest/mocks v0.3.0 
h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc=
-github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod 
h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM=
 github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod 
h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
+github.com/Azure/go-autorest/autorest/mocks v0.4.1 
h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk=
 github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod 
h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
-github.com/Azure/go-autorest/logger v0.1.0 
h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY=
-github.com/Azure/go-autorest/logger v0.1.0/go.mod 
h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
 github.com/Azure/go-autorest/logger v0.2.0 
h1:e4RVHVZKC5p6UANLJHkM4OfR1UKZPj8Wt8Pcx+3oqrE=
 github.com/Azure/go-autorest/logger v0.2.0/go.mod 
h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
-github.com/Azure/go-autorest/tracing v0.5.0 
h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k=
-github.com/Azure/go-autorest/tracing v0.5.0/go.mod 
h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
 github.com/Azure/go-autorest/tracing v0.6.0 
h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
 github.com/Azure/go-autorest/tracing v0.6.0/go.mod 
h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
 github.com/BurntSushi/toml v0.3.1 
h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
@@ -87,7 +63,9 @@
 github.com/Masterminds/vcs v1.13.1 
h1:NL3G1X7/7xduQtA2sJLpVpfHTNBALVNSjob6KEjPXNQ=
 github.com/Masterminds/vcs v1.13.1/go.mod 
h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHSmwVJjcKA=
 github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod 
h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
+github.com/Microsoft/go-winio v0.4.16 
h1:FtSW/jqD+l4ba5iPBj9CODVtgfYAD8w2wS923g/cFDk=
 github.com/Microsoft/go-winio v0.4.16/go.mod 
h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
+github.com/Microsoft/hcsshim v0.8.14 
h1:lbPVK25c1cu5xTLITwpUcxoA9vKrKErASPYygvouJns=
 github.com/Microsoft/hcsshim v0.8.14/go.mod 
h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg=
 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod 
h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
 github.com/OneOfOne/xxhash v1.2.2/go.mod 
h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
@@ -125,9 +103,11 @@
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod 
h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/bgentry/speakeasy v0.1.0/go.mod 
h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
+github.com/bitly/go-simplejson v0.5.0 
h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y=
 github.com/bitly/go-simplejson v0.5.0/go.mod 
h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
 github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod 
h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
 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=
 github.com/bshuster-repo/logrus-logstash-hook v0.4.1 
h1:pgAtgj+A31JBVtEHu2uHuEx0n+2ukqUJnS2vVe5pQNA=
 github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod 
h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
@@ -153,12 +133,14 @@
 github.com/client9/misspell v0.3.4/go.mod 
h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod 
h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
 github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod 
h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
+github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59 
h1:qWj4qVYZ95vLWwqyNJCQg7rDsG5wPdze0UaPolH7DUk=
 github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod 
h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM=
 github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod 
h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
 github.com/containerd/containerd v1.3.2/go.mod 
h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
 github.com/containerd/containerd v1.4.3 
h1:ijQT13JedHSHrQGWFcGEwzcNKrAGIiZ+jSD5QQG07SY=
 github.com/containerd/containerd v1.4.3/go.mod 
h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
 github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod 
h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
+github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7 
h1:6ejg6Lkk8dskcM7wQ28gONkukbQkM4qpj4RnYbpFzrI=
 github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod 
h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y=
 github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod 
h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
 github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod 
h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
@@ -219,6 +201,7 @@
 github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod 
h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
 github.com/eapache/queue v1.1.0/go.mod 
h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
 github.com/edsrzf/mmap-go v1.0.0/go.mod 
h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
+github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 
h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc=
 github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod 
h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
 github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod 
h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
 github.com/emicklei/go-restful v2.9.5+incompatible 
h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk=
@@ -238,6 +221,7 @@
 github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod 
h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
 github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod 
h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
 github.com/fsnotify/fsnotify v1.4.7/go.mod 
h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/fsnotify/fsnotify v1.4.9 
h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
 github.com/fsnotify/fsnotify v1.4.9/go.mod 
h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 github.com/fvbommel/sortorder v1.0.1/go.mod 
h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0=
 github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7 
h1:LofdAjjjqCSXMwLGgOgnE+rdPuvX9DxCqaHwKy7i/ko=
@@ -256,8 +240,9 @@
 github.com/go-logfmt/logfmt v0.4.0/go.mod 
h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
 github.com/go-logfmt/logfmt v0.5.0/go.mod 
h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
 github.com/go-logr/logr v0.1.0/go.mod 
h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
-github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY=
 github.com/go-logr/logr v0.2.0/go.mod 
h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
+github.com/go-logr/logr v0.4.0 h1:K7/B1jt6fIBQVd4Owv2MqGQClcgf0R266+7C/QjRcLc=
+github.com/go-logr/logr v0.4.0/go.mod 
h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
 github.com/go-openapi/jsonpointer v0.19.2/go.mod 
h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
 github.com/go-openapi/jsonpointer v0.19.3 
h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w=
 github.com/go-openapi/jsonpointer v0.19.3/go.mod 
h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
@@ -270,12 +255,17 @@
 github.com/go-openapi/swag v0.19.5 
h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY=
 github.com/go-openapi/swag v0.19.5/go.mod 
h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
 github.com/go-sql-driver/mysql v1.4.0/go.mod 
h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
+github.com/go-sql-driver/mysql v1.4.1 
h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=
 github.com/go-sql-driver/mysql v1.4.1/go.mod 
h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
 github.com/go-stack/stack v1.8.0/go.mod 
h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/gobuffalo/envy v1.7.0/go.mod 
h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
+github.com/gobuffalo/envy v1.7.1 
h1:OQl5ys5MBea7OGCdvPbBJWRgnhC/fGona6QKfvFeau8=
 github.com/gobuffalo/envy v1.7.1/go.mod 
h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w=
+github.com/gobuffalo/logger v1.0.1 
h1:ZEgyRGgAm4ZAhAO45YXMs5Fp+bzGLESFewzAVBMKuTg=
 github.com/gobuffalo/logger v1.0.1/go.mod 
h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs=
+github.com/gobuffalo/packd v0.3.0 
h1:eMwymTkA1uXsqxS0Tpoop3Lc0u3kTfiMBE6nKtQU4g4=
 github.com/gobuffalo/packd v0.3.0/go.mod 
h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q=
+github.com/gobuffalo/packr/v2 v2.7.1 
h1:n3CIW5T17T8v4GGK5sWXLVWJhCz7b5aNLSxW6gYim4o=
 github.com/gobuffalo/packr/v2 v2.7.1/go.mod 
h1:qYEvAazPaVxy7Y7KR0W8qYEE+RymX74kETFqjFoFlOc=
 github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
 github.com/gobwas/glob v0.2.3/go.mod 
h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
@@ -290,11 +280,13 @@
 github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
 github.com/gogo/protobuf v1.3.1/go.mod 
h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
 github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod 
h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b 
h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod 
h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod 
h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod 
h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod 
h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod 
h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e 
h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
 github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod 
h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/mock v1.1.1/go.mod 
h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/mock v1.2.0/go.mod 
h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
@@ -390,6 +382,7 @@
 github.com/hashicorp/mdns v1.0.0/go.mod 
h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
 github.com/hashicorp/memberlist v0.1.3/go.mod 
h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
 github.com/hashicorp/serf v0.8.2/go.mod 
h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
 github.com/hpcloud/tail v1.0.0/go.mod 
h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/huandu/xstrings v1.3.1 
h1:4jgBlKK6tLKFvO8u5pmYjG91cqytmDCDvGh7ECVFfFs=
 github.com/huandu/xstrings v1.3.1/go.mod 
h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
@@ -398,6 +391,7 @@
 github.com/imdario/mergo v0.3.5/go.mod 
h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
 github.com/imdario/mergo v0.3.11 
h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA=
 github.com/imdario/mergo v0.3.11/go.mod 
h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
+github.com/inconshreveable/mousetrap v1.0.0 
h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
 github.com/inconshreveable/mousetrap v1.0.0/go.mod 
h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
 github.com/influxdata/influxdb1-client 
v0.0.0-20191209144304-8bf82d3c094d/go.mod 
h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
 github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod 
h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
@@ -405,6 +399,7 @@
 github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod 
h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
 github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA=
 github.com/jmoiron/sqlx v1.2.0/go.mod 
h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
+github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
 github.com/joho/godotenv v1.3.0/go.mod 
h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 github.com/jonboulle/clockwork v0.1.0/go.mod 
h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/json-iterator/go v1.1.6/go.mod 
h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
@@ -424,9 +419,11 @@
 github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod 
h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod 
h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 github.com/kr/pretty v0.1.0/go.mod 
h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
 github.com/kr/pretty v0.2.0/go.mod 
h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 github.com/kr/text v0.1.0/go.mod 
h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 
h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw=
 github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod 
h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o=
@@ -461,6 +458,7 @@
 github.com/mattn/go-shellwords v1.0.10 
h1:Y7Xqm8piKOO3v10Thp7Z36h4FYFjt5xB//6XvOrs2Gw=
 github.com/mattn/go-shellwords v1.0.10/go.mod 
h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y=
 github.com/mattn/go-sqlite3 v1.9.0/go.mod 
h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
+github.com/mattn/go-sqlite3 v1.12.0 
h1:u/x3mp++qUxvYfulZ4HKOvVO0JWhk7HtE8lWhbGz/Do=
 github.com/mattn/go-sqlite3 v1.12.0/go.mod 
h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod 
h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/matttproud/golang_protobuf_extensions 
v1.0.2-0.20181231171920-c182affec369 
h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
@@ -478,6 +476,7 @@
 github.com/mitchellh/iochan v1.0.0/go.mod 
h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
 github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod 
h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 github.com/mitchellh/mapstructure v1.1.2/go.mod 
h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f 
h1:2+myh5ml7lgEU/51gbeLHfKGNfgEQQIWrlbdaOsidbQ=
 github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod 
h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
 github.com/mitchellh/reflectwalk v1.0.0 
h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY=
 github.com/mitchellh/reflectwalk v1.0.0/go.mod 
h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
@@ -514,9 +513,11 @@
 github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod 
h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.6.0/go.mod 
h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.7.0/go.mod 
h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw=
 github.com/onsi/ginkgo v1.11.0/go.mod 
h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod 
h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
 github.com/onsi/gomega v1.4.3/go.mod 
h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
 github.com/onsi/gomega v1.7.0/go.mod 
h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod 
h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
 github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod 
h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
@@ -597,6 +598,7 @@
 github.com/rogpeppe/go-internal v1.1.0/go.mod 
h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rogpeppe/go-internal v1.3.0/go.mod 
h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rogpeppe/go-internal v1.3.2/go.mod 
h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
+github.com/rogpeppe/go-internal v1.4.0 
h1:LUa41nrWTQNGhzdsZ5lTnkwbNjj6rXTdazA1cSdjkOY=
 github.com/rogpeppe/go-internal v1.4.0/go.mod 
h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
 github.com/rubenv/sql-migrate v0.0.0-20200616145509-8d140a17f351 
h1:HXr/qUllAWv9riaI4zh2eXWKmCSDqVS/XH1MRHLKRwk=
 github.com/rubenv/sql-migrate v0.0.0-20200616145509-8d140a17f351/go.mod 
h1:DCgfY80j8GYL7MLEfvcpSFvjD0L5yZq/aZUJmhZklyg=
@@ -678,6 +680,7 @@
 github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod 
h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
 github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f 
h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY=
 github.com/yvasiyarov/newrelic_platform_go 
v0.0.0-20140908184405-b21fdbd4370f/go.mod 
h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
+github.com/ziutek/mymysql v1.5.4 
h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs=
 github.com/ziutek/mymysql v1.5.4/go.mod 
h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
 go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
@@ -689,6 +692,7 @@
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8=
 go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 go.uber.org/atomic v1.3.2/go.mod 
h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 go.uber.org/atomic v1.4.0/go.mod 
h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
@@ -895,6 +899,7 @@
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 
h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod 
h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
 google.golang.org/api v0.3.1/go.mod 
h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
@@ -913,6 +918,7 @@
 google.golang.org/appengine v1.4.0/go.mod 
h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.5.0/go.mod 
h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.6.1/go.mod 
h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
+google.golang.org/appengine v1.6.5 
h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
 google.golang.org/appengine v1.6.5/go.mod 
h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
 google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod 
h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod 
h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
@@ -966,9 +972,11 @@
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 
h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod 
h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod 
h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
 gopkg.in/gorp.v1 v1.7.2 h1:j3DWlAyGVv8whO7AcIWznQ2Yj7yJkn34B8s63GViAAw=
@@ -979,6 +987,7 @@
 gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod 
h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
 gopkg.in/resty.v1 v1.12.0/go.mod 
h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
 gopkg.in/square/go-jose.v2 v2.2.2/go.mod 
h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 
h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod 
h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/warnings.v0 v0.1.2/go.mod 
h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
 gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod 
h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
@@ -991,8 +1000,10 @@
 gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c 
h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gotest.tools v2.2.0+incompatible 
h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
 gotest.tools v2.2.0+incompatible/go.mod 
h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
 gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
+gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0=
 gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8=
 honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -1001,39 +1012,34 @@
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod 
h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod 
h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
-k8s.io/api v0.20.2 h1:y/HR22XDZY3pniu9hIFDLpUCPq2w5eQ6aV/VFQ7uJMw=
-k8s.io/api v0.20.2/go.mod h1:d7n6Ehyzx+S+cE3VhTGfVNNqtGc/oL9DCdYYahlurV8=
-k8s.io/apiextensions-apiserver v0.20.2 
h1:rfrMWQ87lhd8EzQWRnbQ4gXrniL/yTRBgYH1x1+BLlo=
-k8s.io/apiextensions-apiserver v0.20.2/go.mod 
h1:F6TXp389Xntt+LUq3vw6HFOLttPa0V8821ogLGwb6Zs=
-k8s.io/apimachinery v0.20.1/go.mod 
h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
-k8s.io/apimachinery v0.20.2 h1:hFx6Sbt1oG0n6DZ+g4bFt5f6BoMkOjKWsQFu077M3Vg=
-k8s.io/apimachinery v0.20.2/go.mod 
h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
-k8s.io/apiserver v0.20.2 h1:lGno2t3gcZnLtzsKH4oG0xA9/4GTiBzMO1DGp+K+Bak=
-k8s.io/apiserver v0.20.2/go.mod h1:2nKd93WyMhZx4Hp3RfgH2K5PhwyTrprrkWYnI7id7jA=
-k8s.io/cli-runtime v0.20.1/go.mod 
h1:6wkMM16ZXTi7Ow3JLYPe10bS+XBnIkL6V9dmEz0mbuY=
-k8s.io/cli-runtime v0.20.2 h1:W0/FHdbApnl9oB7xdG643c/Zaf7TZT+43I+zKxwqvhU=
-k8s.io/cli-runtime v0.20.2/go.mod 
h1:FjH6uIZZZP3XmwrXWeeYCbgxcrD6YXxoAykBaWH0VdM=
-k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y=
-k8s.io/client-go v0.20.2 h1:uuf+iIAbfnCSw8IGAv/Rg0giM+2bOzHLOsbbrwrdhNQ=
-k8s.io/client-go v0.20.2/go.mod h1:kH5brqWqp7HDxUFKoEgiI4v8G1xzbe9giaCenUWJzgE=
-k8s.io/code-generator v0.20.1/go.mod 
h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg=
-k8s.io/code-generator v0.20.2/go.mod 
h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg=
-k8s.io/component-base v0.20.1/go.mod 
h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk=
-k8s.io/component-base v0.20.2 h1:LMmu5I0pLtwjpp5009KLuMGFqSc2S2isGw8t1hpYKLE=
-k8s.io/component-base v0.20.2/go.mod 
h1:pzFtCiwe/ASD0iV7ySMu8SYVJjCapNM9bjvk7ptpKh0=
-k8s.io/component-helpers v0.20.1/go.mod 
h1:Q8trCj1zyLNdeur6pD2QvsF8d/nWVfK71YjN5+qVXy4=
+k8s.io/api v0.20.4 h1:xZjKidCirayzX6tHONRQyTNDVIR55TYVqgATqo6ZULY=
+k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ=
+k8s.io/apiextensions-apiserver v0.20.4 
h1:VO/Y5PwBdznMIctX/vvgSNhxffikEmcLC/V1bpbhHhU=
+k8s.io/apiextensions-apiserver v0.20.4/go.mod 
h1:Hzebis/9c6Io5yzHp24Vg4XOkTp1ViMwKP/6gmpsfA4=
+k8s.io/apimachinery v0.20.4 h1:vhxQ0PPUUU2Ns1b9r4/UFp13UPs8cw2iOoTjnY9faa0=
+k8s.io/apimachinery v0.20.4/go.mod 
h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
+k8s.io/apiserver v0.20.4 h1:zMMKIgIUDIFiwK3LyY7qOV4Z4wKsHVYExL6vXY9fPX4=
+k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM=
+k8s.io/cli-runtime v0.20.4 h1:jVU13lBeebHLtarHeHkoIi3uRONFzccmP7hHLzEoQ4w=
+k8s.io/cli-runtime v0.20.4/go.mod 
h1:dz38e1CM4uuIhy8PMFUZv7qsvIdoE3ByZYlmbHNCkt4=
+k8s.io/client-go v0.20.4 h1:85crgh1IotNkLpKYKZHVNI1JT86nr/iDCvq2iWKsql4=
+k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k=
+k8s.io/code-generator v0.20.4/go.mod 
h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg=
+k8s.io/component-base v0.20.4 h1:gdvPs4G11e99meQnW4zN+oYOjH8qkLz1sURrAzvKWqc=
+k8s.io/component-base v0.20.4/go.mod 
h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI=
+k8s.io/component-helpers v0.20.4/go.mod 
h1:S7jGg8zQp3kwvSzfuGtNaQAMVmvzomXDioTm5vABn9g=
 k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod 
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
 k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod 
h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
 k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
 k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
-k8s.io/klog/v2 v2.4.0 h1:7+X0fUguPyrKEC4WjH8iGDg3laWgMo5tMnRTIGTTxGQ=
 k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
+k8s.io/klog/v2 v2.5.0 h1:8mOnjf1RmUPW6KRqQCfYSZq/K20Unmp3IhuZUhxl8KI=
+k8s.io/klog/v2 v2.5.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
 k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd 
h1:sOHNzJIkytDF6qadMNKhhDRpc6ODik8lVC6nOur7B2c=
 k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod 
h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
-k8s.io/kubectl v0.20.1 h1:7h1vSrL/B3hLrhlCJhbTADElPKDbx+oVUt3+QDSXxBo=
-k8s.io/kubectl v0.20.1/go.mod h1:2bE0JLYTRDVKDiTREFsjLAx4R2GvUtL/mGYFXfFFMzY=
-k8s.io/metrics v0.20.1/go.mod h1:JhpBE/fad3yRGsgEpiZz5FQQM5wJ18OTLkD7Tv40c0s=
+k8s.io/kubectl v0.20.4 h1:Y1gUiigiZM+ulcrnWeqSHlTd0/7xWcQIXjuMnjtHyoo=
+k8s.io/kubectl v0.20.4/go.mod h1:yCC5lUQyXRmmtwyxfaakryh9ezzp/bT0O14LeoFLbGo=
+k8s.io/metrics v0.20.4/go.mod h1:DDXS+Ls+2NAxRcVhXKghRPa3csljyJRjDRjPe6EOg/g=
 k8s.io/utils v0.0.0-20201110183641-67b214c5f920 
h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw=
 k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod 
h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 rsc.io/binaryregexp v0.2.0/go.mod 
h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-3.5.2/pkg/action/action.go 
new/helm-3.5.4/pkg/action/action.go
--- old/helm-3.5.2/pkg/action/action.go 2021-02-04 22:46:22.000000000 +0100
+++ new/helm-3.5.4/pkg/action/action.go 2021-04-14 22:39:53.000000000 +0200
@@ -65,7 +65,7 @@
 // ValidName is a regular expression for resource names.
 //
 // DEPRECATED: This will be removed in Helm 4, and is no longer used here. See
-// pkg/chartutil.ValidateName for the replacement.
+// pkg/lint/rules.validateMetadataNameFunc for the replacement.
 //
 // According to the Kubernetes help text, the regular expression it uses is:
 //
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-3.5.2/pkg/action/uninstall.go 
new/helm-3.5.4/pkg/action/uninstall.go
--- old/helm-3.5.2/pkg/action/uninstall.go      2021-02-04 22:46:22.000000000 
+0100
+++ new/helm-3.5.4/pkg/action/uninstall.go      2021-04-14 22:39:53.000000000 
+0200
@@ -111,6 +111,10 @@
        }
 
        kept, errs := u.deleteRelease(rel)
+
+       if kept != "" {
+               kept = "These resources were kept due to the resource 
policy:\n" + kept
+       }
        res.Info = kept
 
        if !u.DisableHooks {
@@ -189,7 +193,7 @@
        filesToKeep, filesToDelete := filterManifestsToKeep(files)
        var kept string
        for _, f := range filesToKeep {
-               kept += f.Name + "\n"
+               kept += "[" + f.Head.Kind + "] " + f.Head.Metadata.Name + "\n"
        }
 
        var builder strings.Builder
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-3.5.2/pkg/action/uninstall_test.go 
new/helm-3.5.4/pkg/action/uninstall_test.go
--- old/helm-3.5.2/pkg/action/uninstall_test.go 1970-01-01 01:00:00.000000000 
+0100
+++ new/helm-3.5.4/pkg/action/uninstall_test.go 2021-04-14 22:39:53.000000000 
+0200
@@ -0,0 +1,62 @@
+/*
+Copyright The Helm Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package action
+
+import (
+       "testing"
+
+       "github.com/stretchr/testify/assert"
+)
+
+func uninstallAction(t *testing.T) *Uninstall {
+       config := actionConfigFixture(t)
+       unAction := NewUninstall(config)
+       return unAction
+}
+
+func TestUninstallRelease_deleteRelease(t *testing.T) {
+       is := assert.New(t)
+
+       unAction := uninstallAction(t)
+       unAction.DisableHooks = true
+       unAction.DryRun = false
+       unAction.KeepHistory = true
+
+       rel := releaseStub()
+       rel.Name = "keep-secret"
+       rel.Manifest = `{
+               "apiVersion": "v1",
+               "kind": "Secret",
+               "metadata": {
+                 "name": "secret",
+                 "annotations": {
+                       "helm.sh/resource-policy": "keep"
+                 }
+               },
+               "type": "Opaque",
+               "data": {
+                 "password": "password"
+               }
+       }`
+       unAction.cfg.Releases.Create(rel)
+       res, err := unAction.Run(rel.Name)
+       is.NoError(err)
+       expected := `These resources were kept due to the resource policy:
+[Secret] secret
+`
+       is.Contains(res.Info, expected)
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-3.5.2/pkg/chartutil/create.go 
new/helm-3.5.4/pkg/chartutil/create.go
--- old/helm-3.5.2/pkg/chartutil/create.go      2021-02-04 22:46:22.000000000 
+0100
+++ new/helm-3.5.4/pkg/chartutil/create.go      2021-04-14 22:39:53.000000000 
+0200
@@ -152,7 +152,11 @@
     # kubernetes.io/tls-acme: "true"
   hosts:
     - host: chart-example.local
-      paths: []
+      paths:
+      - path: /
+        backend:
+          serviceName: chart-example.local
+          servicePort: 80
   tls: []
   #  - secretName: chart-example-tls
   #    hosts:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-3.5.2/pkg/chartutil/validate_name.go 
new/helm-3.5.4/pkg/chartutil/validate_name.go
--- old/helm-3.5.2/pkg/chartutil/validate_name.go       2021-02-04 
22:46:22.000000000 +0100
+++ new/helm-3.5.4/pkg/chartutil/validate_name.go       2021-04-14 
22:39:53.000000000 +0200
@@ -96,6 +96,9 @@
 //
 // The Kubernetes documentation is here, though it is not entirely correct:
 // 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+//
+// Deprecated: remove in Helm 4.  Name validation now uses rules defined in
+// pkg/lint/rules.validateMetadataNameFunc()
 func ValidateMetadataName(name string) error {
        if name == "" || len(name) > maxMetadataNameLen || 
!validName.MatchString(name) {
                return errInvalidKubernetesName
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-3.5.2/pkg/lint/rules/template.go 
new/helm-3.5.4/pkg/lint/rules/template.go
--- old/helm-3.5.2/pkg/lint/rules/template.go   2021-02-04 22:46:22.000000000 
+0100
+++ new/helm-3.5.4/pkg/lint/rules/template.go   2021-04-14 22:39:53.000000000 
+0200
@@ -28,6 +28,9 @@
        "strings"
 
        "github.com/pkg/errors"
+       "k8s.io/apimachinery/pkg/api/validation"
+       apipath "k8s.io/apimachinery/pkg/api/validation/path"
+       "k8s.io/apimachinery/pkg/util/validation/field"
        "k8s.io/apimachinery/pkg/util/yaml"
 
        "helm.sh/helm/v3/pkg/chart/loader"
@@ -202,18 +205,68 @@
        return errors.Wrap(err, "unable to parse YAML")
 }
 
+// validateMetadataName uses the correct validation function for the object
+// Kind, or if not set, defaults to the standard definition of a subdomain in
+// DNS (RFC 1123), used by most resources.
 func validateMetadataName(obj *K8sYamlStruct) error {
-       if len(obj.Metadata.Name) == 0 || len(obj.Metadata.Name) > 253 {
-               return fmt.Errorf("object name must be between 0 and 253 
characters: %q", obj.Metadata.Name)
+       fn := validateMetadataNameFunc(obj)
+       allErrs := field.ErrorList{}
+       for _, msg := range fn(obj.Metadata.Name, false) {
+               allErrs = append(allErrs, 
field.Invalid(field.NewPath("metadata").Child("name"), obj.Metadata.Name, msg))
        }
-       // This will return an error if the characters do not abide by the 
standard OR if the
-       // name is left empty.
-       if err := chartutil.ValidateMetadataName(obj.Metadata.Name); err != nil 
{
-               return errors.Wrapf(err, "object name does not conform to 
Kubernetes naming requirements: %q", obj.Metadata.Name)
+       if len(allErrs) > 0 {
+               return errors.Wrapf(allErrs.ToAggregate(), "object name does 
not conform to Kubernetes naming requirements: %q", obj.Metadata.Name)
        }
        return nil
 }
 
+// validateMetadataNameFunc will return a name validation function for the
+// object kind, if defined below.
+//
+// Rules should match those set in the various api validations:
+// 
https://github.com/kubernetes/kubernetes/blob/v1.20.0/pkg/apis/core/validation/validation.go#L205-L274
+// 
https://github.com/kubernetes/kubernetes/blob/v1.20.0/pkg/apis/apps/validation/validation.go#L39
+// ...
+//
+// Implementing here to avoid importing k/k.
+//
+// If no mapping is defined, returns NameIsDNSSubdomain.  This is used by 
object
+// kinds that don't have special requirements, so is the most likely to work if
+// new kinds are added.
+func validateMetadataNameFunc(obj *K8sYamlStruct) validation.ValidateNameFunc {
+       switch strings.ToLower(obj.Kind) {
+       case "pod", "node", "secret", "endpoints", "resourcequota", // core
+               "controllerrevision", "daemonset", "deployment", "replicaset", 
"statefulset", // apps
+               "autoscaler",     // autoscaler
+               "cronjob", "job", // batch
+               "lease",                    // coordination
+               "endpointslice",            // discovery
+               "networkpolicy", "ingress", // networking
+               "podsecuritypolicy",                           // policy
+               "priorityclass",                               // scheduling
+               "podpreset",                                   // settings
+               "storageclass", "volumeattachment", "csinode": // storage
+               return validation.NameIsDNSSubdomain
+       case "service":
+               return validation.NameIsDNS1035Label
+       case "namespace":
+               return validation.ValidateNamespaceName
+       case "serviceaccount":
+               return validation.ValidateServiceAccountName
+       case "certificatesigningrequest":
+               // No validation.
+               // 
https://github.com/kubernetes/kubernetes/blob/v1.20.0/pkg/apis/certificates/validation/validation.go#L137-L140
+               return func(name string, prefix bool) []string { return nil }
+       case "role", "clusterrole", "rolebinding", "clusterrolebinding":
+               // 
https://github.com/kubernetes/kubernetes/blob/v1.20.0/pkg/apis/rbac/validation/validation.go#L32-L34
+               return func(name string, prefix bool) []string {
+                       return apipath.IsValidPathSegmentName(name)
+               }
+       default:
+               return validation.NameIsDNSSubdomain
+       }
+}
+
 func validateNoCRDHooks(manifest []byte) error {
        if crdHookSearch.Match(manifest) {
                return errors.New("manifest is a crd-install hook. This hook is 
no longer supported in v3 and all CRDs should also exist the crds/ directory at 
the top level of the chart")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-3.5.2/pkg/lint/rules/template_test.go 
new/helm-3.5.4/pkg/lint/rules/template_test.go
--- old/helm-3.5.2/pkg/lint/rules/template_test.go      2021-02-04 
22:46:22.000000000 +0100
+++ new/helm-3.5.4/pkg/lint/rules/template_test.go      2021-04-14 
22:39:53.000000000 +0200
@@ -17,13 +17,12 @@
 package rules
 
 import (
+       "fmt"
        "os"
        "path/filepath"
        "strings"
        "testing"
 
-       "github.com/Masterminds/goutils"
-
        "helm.sh/helm/v3/internal/test/ensure"
        "helm.sh/helm/v3/pkg/chart"
        "helm.sh/helm/v3/pkg/chartutil"
@@ -122,39 +121,84 @@
 }
 
 func TestValidateMetadataName(t *testing.T) {
-       names := map[string]bool{
-               "":                          false,
-               "foo":                       true,
-               "foo.bar1234baz.seventyone": true,
-               "FOO":                       false,
-               "123baz":                    true,
-               "foo.BAR.baz":               false,
-               "one-two":                   true,
-               "-two":                      false,
-               "one_two":                   false,
-               "a..b":                      false,
-               "%^&#$%*@^*@&#^":            false,
-       }
-
-       // The length checker should catch this first. So this is not true 
fuzzing.
-       tooLong, err := goutils.RandomAlphaNumeric(300)
-       if err != nil {
-               t.Fatalf("Randomizer failed to initialize: %s", err)
-       }
-       names[tooLong] = false
-
-       for input, expectPass := range names {
-               obj := K8sYamlStruct{Metadata: k8sYamlMetadata{Name: input}}
-               if err := validateMetadataName(&obj); (err == nil) != 
expectPass {
-                       st := "fail"
-                       if expectPass {
-                               st = "succeed"
-                       }
-                       t.Errorf("Expected %q to %s", input, st)
-                       if err != nil {
-                               t.Log(err)
+       tests := []struct {
+               obj     *K8sYamlStruct
+               wantErr bool
+       }{
+               // Most kinds use IsDNS1123Subdomain.
+               {&K8sYamlStruct{Kind: "Pod", Metadata: k8sYamlMetadata{Name: 
""}}, true},
+               {&K8sYamlStruct{Kind: "Pod", Metadata: k8sYamlMetadata{Name: 
"foo"}}, false},
+               {&K8sYamlStruct{Kind: "Pod", Metadata: k8sYamlMetadata{Name: 
"foo.bar1234baz.seventyone"}}, false},
+               {&K8sYamlStruct{Kind: "Pod", Metadata: k8sYamlMetadata{Name: 
"FOO"}}, true},
+               {&K8sYamlStruct{Kind: "Pod", Metadata: k8sYamlMetadata{Name: 
"123baz"}}, false},
+               {&K8sYamlStruct{Kind: "Pod", Metadata: k8sYamlMetadata{Name: 
"foo.BAR.baz"}}, true},
+               {&K8sYamlStruct{Kind: "Pod", Metadata: k8sYamlMetadata{Name: 
"one-two"}}, false},
+               {&K8sYamlStruct{Kind: "Pod", Metadata: k8sYamlMetadata{Name: 
"-two"}}, true},
+               {&K8sYamlStruct{Kind: "Pod", Metadata: k8sYamlMetadata{Name: 
"one_two"}}, true},
+               {&K8sYamlStruct{Kind: "Pod", Metadata: k8sYamlMetadata{Name: 
"a..b"}}, true},
+               {&K8sYamlStruct{Kind: "Pod", Metadata: k8sYamlMetadata{Name: 
"%^&#$%*@^*@&#^"}}, true},
+               {&K8sYamlStruct{Kind: "Pod", Metadata: k8sYamlMetadata{Name: 
"operator:pod"}}, true},
+               {&K8sYamlStruct{Kind: "ServiceAccount", Metadata: 
k8sYamlMetadata{Name: "foo"}}, false},
+               {&K8sYamlStruct{Kind: "ServiceAccount", Metadata: 
k8sYamlMetadata{Name: "foo.bar1234baz.seventyone"}}, false},
+               {&K8sYamlStruct{Kind: "ServiceAccount", Metadata: 
k8sYamlMetadata{Name: "FOO"}}, true},
+               {&K8sYamlStruct{Kind: "ServiceAccount", Metadata: 
k8sYamlMetadata{Name: "operator:sa"}}, true},
+
+               // Service uses IsDNS1035Label.
+               {&K8sYamlStruct{Kind: "Service", Metadata: 
k8sYamlMetadata{Name: "foo"}}, false},
+               {&K8sYamlStruct{Kind: "Service", Metadata: 
k8sYamlMetadata{Name: "123baz"}}, true},
+               {&K8sYamlStruct{Kind: "Service", Metadata: 
k8sYamlMetadata{Name: "foo.bar"}}, true},
+
+               // Namespace uses IsDNS1123Label.
+               {&K8sYamlStruct{Kind: "Namespace", Metadata: 
k8sYamlMetadata{Name: "foo"}}, false},
+               {&K8sYamlStruct{Kind: "Namespace", Metadata: 
k8sYamlMetadata{Name: "123baz"}}, false},
+               {&K8sYamlStruct{Kind: "Namespace", Metadata: 
k8sYamlMetadata{Name: "foo.bar"}}, true},
+               {&K8sYamlStruct{Kind: "Namespace", Metadata: 
k8sYamlMetadata{Name: "foo-bar"}}, false},
+
+               // CertificateSigningRequest has no validation.
+               {&K8sYamlStruct{Kind: "CertificateSigningRequest", Metadata: 
k8sYamlMetadata{Name: ""}}, false},
+               {&K8sYamlStruct{Kind: "CertificateSigningRequest", Metadata: 
k8sYamlMetadata{Name: "123baz"}}, false},
+               {&K8sYamlStruct{Kind: "CertificateSigningRequest", Metadata: 
k8sYamlMetadata{Name: "%^&#$%*@^*@&#^"}}, false},
+
+               // RBAC uses path validation.
+               {&K8sYamlStruct{Kind: "Role", Metadata: k8sYamlMetadata{Name: 
"foo"}}, false},
+               {&K8sYamlStruct{Kind: "Role", Metadata: k8sYamlMetadata{Name: 
"123baz"}}, false},
+               {&K8sYamlStruct{Kind: "Role", Metadata: k8sYamlMetadata{Name: 
"foo.bar"}}, false},
+               {&K8sYamlStruct{Kind: "Role", Metadata: k8sYamlMetadata{Name: 
"operator:role"}}, false},
+               {&K8sYamlStruct{Kind: "Role", Metadata: k8sYamlMetadata{Name: 
"operator/role"}}, true},
+               {&K8sYamlStruct{Kind: "Role", Metadata: k8sYamlMetadata{Name: 
"operator%role"}}, true},
+               {&K8sYamlStruct{Kind: "ClusterRole", Metadata: 
k8sYamlMetadata{Name: "foo"}}, false},
+               {&K8sYamlStruct{Kind: "ClusterRole", Metadata: 
k8sYamlMetadata{Name: "123baz"}}, false},
+               {&K8sYamlStruct{Kind: "ClusterRole", Metadata: 
k8sYamlMetadata{Name: "foo.bar"}}, false},
+               {&K8sYamlStruct{Kind: "ClusterRole", Metadata: 
k8sYamlMetadata{Name: "operator:role"}}, false},
+               {&K8sYamlStruct{Kind: "ClusterRole", Metadata: 
k8sYamlMetadata{Name: "operator/role"}}, true},
+               {&K8sYamlStruct{Kind: "ClusterRole", Metadata: 
k8sYamlMetadata{Name: "operator%role"}}, true},
+               {&K8sYamlStruct{Kind: "RoleBinding", Metadata: 
k8sYamlMetadata{Name: "operator:role"}}, false},
+               {&K8sYamlStruct{Kind: "ClusterRoleBinding", Metadata: 
k8sYamlMetadata{Name: "operator:role"}}, false},
+
+               // Unknown Kind
+               {&K8sYamlStruct{Kind: "FutureKind", Metadata: 
k8sYamlMetadata{Name: ""}}, true},
+               {&K8sYamlStruct{Kind: "FutureKind", Metadata: 
k8sYamlMetadata{Name: "foo"}}, false},
+               {&K8sYamlStruct{Kind: "FutureKind", Metadata: 
k8sYamlMetadata{Name: "foo.bar1234baz.seventyone"}}, false},
+               {&K8sYamlStruct{Kind: "FutureKind", Metadata: 
k8sYamlMetadata{Name: "FOO"}}, true},
+               {&K8sYamlStruct{Kind: "FutureKind", Metadata: 
k8sYamlMetadata{Name: "123baz"}}, false},
+               {&K8sYamlStruct{Kind: "FutureKind", Metadata: 
k8sYamlMetadata{Name: "foo.BAR.baz"}}, true},
+               {&K8sYamlStruct{Kind: "FutureKind", Metadata: 
k8sYamlMetadata{Name: "one-two"}}, false},
+               {&K8sYamlStruct{Kind: "FutureKind", Metadata: 
k8sYamlMetadata{Name: "-two"}}, true},
+               {&K8sYamlStruct{Kind: "FutureKind", Metadata: 
k8sYamlMetadata{Name: "one_two"}}, true},
+               {&K8sYamlStruct{Kind: "FutureKind", Metadata: 
k8sYamlMetadata{Name: "a..b"}}, true},
+               {&K8sYamlStruct{Kind: "FutureKind", Metadata: 
k8sYamlMetadata{Name: "%^&#$%*@^*@&#^"}}, true},
+               {&K8sYamlStruct{Kind: "FutureKind", Metadata: 
k8sYamlMetadata{Name: "operator:pod"}}, true},
+
+               // No kind
+               {&K8sYamlStruct{Metadata: k8sYamlMetadata{Name: "foo"}}, false},
+               {&K8sYamlStruct{Metadata: k8sYamlMetadata{Name: 
"operator:pod"}}, true},
+       }
+       for _, tt := range tests {
+               t.Run(fmt.Sprintf("%s/%s", tt.obj.Kind, tt.obj.Metadata.Name), 
func(t *testing.T) {
+                       if err := validateMetadataName(tt.obj); (err != nil) != 
tt.wantErr {
+                               t.Errorf("validateMetadataName() error = %v, 
wantErr %v", err, tt.wantErr)
                        }
-               }
+               })
        }
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-3.5.2/pkg/storage/storage.go 
new/helm-3.5.4/pkg/storage/storage.go
--- old/helm-3.5.2/pkg/storage/storage.go       2021-02-04 22:46:22.000000000 
+0100
+++ new/helm-3.5.4/pkg/storage/storage.go       2021-04-14 22:39:53.000000000 
+0200
@@ -61,7 +61,10 @@
        s.Log("creating release %q", makeKey(rls.Name, rls.Version))
        if s.MaxHistory > 0 {
                // Want to make space for one more release.
-               s.removeLeastRecent(rls.Name, s.MaxHistory-1)
+               if err := s.removeLeastRecent(rls.Name, s.MaxHistory-1); err != 
nil &&
+                       !errors.Is(err, driver.ErrReleaseNotFound) {
+                       return err
+               }
        }
        return s.Driver.Create(makeKey(rls.Name, rls.Version), rls)
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-3.5.2/pkg/storage/storage_test.go 
new/helm-3.5.4/pkg/storage/storage_test.go
--- old/helm-3.5.2/pkg/storage/storage_test.go  2021-02-04 22:46:22.000000000 
+0100
+++ new/helm-3.5.4/pkg/storage/storage_test.go  2021-04-14 22:39:53.000000000 
+0200
@@ -21,6 +21,8 @@
        "reflect"
        "testing"
 
+       "github.com/pkg/errors"
+
        rspb "helm.sh/helm/v3/pkg/release"
        "helm.sh/helm/v3/pkg/storage/driver"
 )
@@ -276,6 +278,32 @@
        }
 }
 
+func TestStorageRemoveLeastRecentWithError(t *testing.T) {
+       storage := Init(driver.NewMemory())
+       storage.Log = t.Logf
+
+       storage.MaxHistory = 1
+
+       const name = "angry-bird"
+
+       // setup storage with test releases
+       setup := func() {
+               // release records
+               rls1 := ReleaseTestData{Name: name, Version: 1, Status: 
rspb.StatusSuperseded}.ToRelease()
+
+               // create the release records in the storage
+               assertErrNil(t.Fatal, storage.Driver.Create(makeKey(rls1.Name, 
rls1.Version), rls1), "Storing release 'angry-bird' (v1)")
+       }
+       setup()
+
+       rls2 := ReleaseTestData{Name: name, Version: 2, Status: 
rspb.StatusSuperseded}.ToRelease()
+       wantErr := driver.ErrNoDeployedReleases
+       gotErr := storage.Create(rls2)
+       if !errors.Is(gotErr, wantErr) {
+               t.Fatalf("Storing release 'angry-bird' (v2) should return the 
error %#v, but returned %#v", wantErr, gotErr)
+       }
+}
+
 func TestStorageRemoveLeastRecent(t *testing.T) {
        storage := Init(driver.NewMemory())
        storage.Log = t.Logf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/helm-3.5.2/scripts/release-notes.sh 
new/helm-3.5.4/scripts/release-notes.sh
--- old/helm-3.5.2/scripts/release-notes.sh     2021-02-04 22:46:22.000000000 
+0100
+++ new/helm-3.5.4/scripts/release-notes.sh     2021-04-14 22:39:53.000000000 
+0200
@@ -70,7 +70,7 @@
   - `#helm-users` for questions and just to hang out
   - `#helm-dev` for discussing PRs, code, and bugs
 - Hang out at the Public Developer Call: Thursday, 9:30 Pacific via 
[Zoom](https://zoom.us/j/696660622)
-- Test, debug, and contribute charts: 
[GitHub/helm/charts](https://github.com/helm/charts)
+- Test, debug, and contribute charts: 
[ArtifactHub/packages](https://artifacthub.io/packages/search?kind=0)
 
 ## Notable Changes
 
@@ -87,7 +87,7 @@
 - [Linux arm64](https://get.helm.sh/helm-${RELEASE}-linux-arm64.tar.gz) 
([checksum](https://get.helm.sh/helm-${RELEASE}-linux-arm64.tar.gz.sha256sum) / 
$(cat _dist/helm-${RELEASE}-linux-arm64.tar.gz.sha256))
 - [Linux i386](https://get.helm.sh/helm-${RELEASE}-linux-386.tar.gz) 
([checksum](https://get.helm.sh/helm-${RELEASE}-linux-386.tar.gz.sha256sum) / 
$(cat _dist/helm-${RELEASE}-linux-386.tar.gz.sha256))
 - [Linux ppc64le](https://get.helm.sh/helm-${RELEASE}-linux-ppc64le.tar.gz) 
([checksum](https://get.helm.sh/helm-${RELEASE}-linux-ppc64le.tar.gz.sha256sum) 
/ $(cat _dist/helm-${RELEASE}-linux-ppc64le.tar.gz.sha256))
-- [Linux s390x](https://get.helm.sh/helm-${RELEASE}-linux-s390x.tar.gz) 
([checksum](https://get.helm.sh/helm-${RELEASE}-linux-s390x.tar.gz.sha256sum) / 
$(cat _dist/helm-${RELEASE}-darwin-amd64.tar.gz.sha256))
+- [Linux s390x](https://get.helm.sh/helm-${RELEASE}-linux-s390x.tar.gz) 
([checksum](https://get.helm.sh/helm-${RELEASE}-linux-s390x.tar.gz.sha256sum) / 
$(cat _dist/helm-${RELEASE}-linux-s390x.tar.gz.sha256))
 - [Windows amd64](https://get.helm.sh/helm-${RELEASE}-windows-amd64.zip) 
([checksum](https://get.helm.sh/helm-${RELEASE}-windows-amd64.zip.sha256sum) / 
$(cat _dist/helm-${RELEASE}-windows-amd64.zip.sha256))
 
 The [Quickstart Guide](https://helm.sh/docs/intro/quickstart/) will get you 
going from there. For **upgrade instructions** or detailed installation notes, 
check the [install guide](https://helm.sh/docs/intro/install/). You can also 
use a [script to 
install](https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3) 
on any system with \`bash\`.

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/helm/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.helm.new.2988/vendor.tar.gz differ: char 5, line 1

Reply via email to