Merge remote-tracking branch 'upstream/master' into patch-1

pull/5268/head
Seb Ospina 6 years ago
commit b0bb1f03d5

@ -49,6 +49,10 @@ The following hooks are defined:
have been modified. have been modified.
- crd-install: Adds CRD resources before any other checks are run. This is used - crd-install: Adds CRD resources before any other checks are run. This is used
only on CRD definitions that are used by other manifests in the chart. only on CRD definitions that are used by other manifests in the chart.
- test-success: Executes when running `helm test` and expects the pod to
return successfully (return code == 0).
- test-failure: Executes when running `helm test` and expects the pod to
fail (return code != 0).
## Hooks and the Release Lifecycle ## Hooks and the Release Lifecycle

@ -51,6 +51,7 @@ or [pull request](https://github.com/helm/helm/pulls).
- [helm-plugin-utils](https://github.com/maorfr/helm-plugin-utils) - Utility functions to be used within Helm plugins - [helm-plugin-utils](https://github.com/maorfr/helm-plugin-utils) - Utility functions to be used within Helm plugins
- [helm-restore](https://github.com/maorfr/helm-restore) - Plugin to restore a deployed release to its original state - [helm-restore](https://github.com/maorfr/helm-restore) - Plugin to restore a deployed release to its original state
- [helm-secrets](https://github.com/futuresimple/helm-secrets) - Plugin to manage and store secrets safely - [helm-secrets](https://github.com/futuresimple/helm-secrets) - Plugin to manage and store secrets safely
- [helm-ssm](https://github.com/codacy/helm-ssm) - Plugin to inject values coming from AWS SSM parameters on the `values.yaml` file
- [helm-stop](https://github.com/IBM/helm-stop) - Plugin for stopping a release pods - [helm-stop](https://github.com/IBM/helm-stop) - Plugin for stopping a release pods
- [helm-template](https://github.com/technosophos/helm-template) - Debug/render templates client-side - [helm-template](https://github.com/technosophos/helm-template) - Debug/render templates client-side
- [helm-tiller](https://github.com/adamreese/helm-tiller) - Additional commands to work with Tiller - [helm-tiller](https://github.com/adamreese/helm-tiller) - Additional commands to work with Tiller

@ -37,12 +37,12 @@ const (
func TestBadChart(t *testing.T) { func TestBadChart(t *testing.T) {
m := All(badChartDir, values, namespace, strict).Messages m := All(badChartDir, values, namespace, strict).Messages
if len(m) != 5 { if len(m) != 6 {
t.Errorf("Number of errors %v", len(m)) t.Errorf("Number of errors %v", len(m))
t.Errorf("All didn't fail with expected errors, got %#v", m) t.Errorf("All didn't fail with expected errors, got %#v", m)
} }
// There should be one INFO, 2 WARNINGs and one ERROR messages, check for them // There should be one INFO, 2 WARNINGs and one ERROR messages, check for them
var i, w, e, e2, e3 bool var i, w, e, e2, e3, e4 bool
for _, msg := range m { for _, msg := range m {
if msg.Severity == support.InfoSev { if msg.Severity == support.InfoSev {
if strings.Contains(msg.Err.Error(), "icon is recommended") { if strings.Contains(msg.Err.Error(), "icon is recommended") {
@ -64,9 +64,13 @@ func TestBadChart(t *testing.T) {
if strings.Contains(msg.Err.Error(), "directory name (badchartfile) and chart name () must be the same") { if strings.Contains(msg.Err.Error(), "directory name (badchartfile) and chart name () must be the same") {
e3 = true e3 = true
} }
if strings.Contains(msg.Err.Error(), "apiVersion is required") {
e4 = true
}
} }
} }
if !e || !e2 || !e3 || !w || !i { if !e || !e2 || !e3 || !e4 || !w || !i {
t.Errorf("Didn't find all the expected errors, got %#v", m) t.Errorf("Didn't find all the expected errors, got %#v", m)
} }
} }

@ -51,6 +51,7 @@ func Chartfile(linter *support.Linter) {
linter.RunLinterRule(support.ErrorSev, chartFileName, validateChartNameDirMatch(linter.ChartDir, chartFile)) linter.RunLinterRule(support.ErrorSev, chartFileName, validateChartNameDirMatch(linter.ChartDir, chartFile))
// Chart metadata // Chart metadata
linter.RunLinterRule(support.ErrorSev, chartFileName, validateChartApiVersion(chartFile))
linter.RunLinterRule(support.ErrorSev, chartFileName, validateChartVersion(chartFile)) linter.RunLinterRule(support.ErrorSev, chartFileName, validateChartVersion(chartFile))
linter.RunLinterRule(support.ErrorSev, chartFileName, validateChartEngine(chartFile)) linter.RunLinterRule(support.ErrorSev, chartFileName, validateChartEngine(chartFile))
linter.RunLinterRule(support.ErrorSev, chartFileName, validateChartMaintainer(chartFile)) linter.RunLinterRule(support.ErrorSev, chartFileName, validateChartMaintainer(chartFile))
@ -96,6 +97,18 @@ func validateChartNameDirMatch(chartDir string, cf *chart.Metadata) error {
return nil return nil
} }
func validateChartApiVersion(cf *chart.Metadata) error {
if cf.ApiVersion == "" {
return errors.New("apiVersion is required")
}
if cf.ApiVersion != "v1" {
return fmt.Errorf("apiVersion '%s' is not valid. The value must be \"v1\"", cf.ApiVersion)
}
return nil
}
func validateChartVersion(cf *chart.Metadata) error { func validateChartVersion(cf *chart.Metadata) error {
if cf.Version == "" { if cf.Version == "" {
return errors.New("version is required") return errors.New("version is required")

@ -236,8 +236,8 @@ func TestChartfile(t *testing.T) {
Chartfile(&linter) Chartfile(&linter)
msgs := linter.Messages msgs := linter.Messages
if len(msgs) != 4 { if len(msgs) != 5 {
t.Errorf("Expected 3 errors, got %d", len(msgs)) t.Errorf("Expected 4 errors, got %d", len(msgs))
} }
if !strings.Contains(msgs[0].Err.Error(), "name is required") { if !strings.Contains(msgs[0].Err.Error(), "name is required") {
@ -248,12 +248,16 @@ func TestChartfile(t *testing.T) {
t.Errorf("Unexpected message 1: %s", msgs[1].Err) t.Errorf("Unexpected message 1: %s", msgs[1].Err)
} }
if !strings.Contains(msgs[2].Err.Error(), "version 0.0.0 is less than or equal to 0") { if !strings.Contains(msgs[2].Err.Error(), "apiVersion is required") {
t.Errorf("Unexpected message 2: %s", msgs[2].Err) t.Errorf("Unexpected message 2: %s", msgs[2].Err)
} }
if !strings.Contains(msgs[3].Err.Error(), "icon is recommended") { if !strings.Contains(msgs[3].Err.Error(), "version 0.0.0 is less than or equal to 0") {
t.Errorf("Unexpected message 3: %s", msgs[3].Err) t.Errorf("Unexpected message 3: %s", msgs[2].Err)
}
if !strings.Contains(msgs[4].Err.Error(), "icon is recommended") {
t.Errorf("Unexpected message 4: %s", msgs[3].Err)
} }
} }

@ -1,3 +1,4 @@
apiVersion: v1
name: albatross name: albatross
description: testing chart description: testing chart
version: 199.44.12345-Alpha.1+cafe009 version: 199.44.12345-Alpha.1+cafe009

@ -1,3 +1,4 @@
apiVersion: v1
name: badvaluesfile name: badvaluesfile
description: A Helm chart for Kubernetes description: A Helm chart for Kubernetes
version: 0.0.1 version: 0.0.1

@ -1,3 +1,4 @@
apiVersion: v1
name: goodone name: goodone
description: good testing chart description: good testing chart
version: 199.44.12345-Alpha.1+cafe009 version: 199.44.12345-Alpha.1+cafe009

Loading…
Cancel
Save