From 00f8561ad4502286d49868055777537c92a869de Mon Sep 17 00:00:00 2001 From: Edward Miller Date: Tue, 12 Sep 2023 09:52:45 +0100 Subject: [PATCH] fix(pkg/lint): unmarshals Chart.yaml strictly When "helm lint" is run, it now errors on invalid chartfiles, e.g. those with duplicate keys Closes #12381 Signed-off-by: Edward Miller --- pkg/chart/v2/util/chartfile.go | 2 +- pkg/lint/lint_test.go | 11 +++++++++++ pkg/lint/rules/testdata/invalidchartfile/Chart.yaml | 5 +++++ pkg/lint/rules/testdata/invalidchartfile/values.yaml | 0 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 pkg/lint/rules/testdata/invalidchartfile/Chart.yaml create mode 100644 pkg/lint/rules/testdata/invalidchartfile/values.yaml diff --git a/pkg/chart/v2/util/chartfile.go b/pkg/chart/v2/util/chartfile.go index 87323c201..0a6ca0e20 100644 --- a/pkg/chart/v2/util/chartfile.go +++ b/pkg/chart/v2/util/chartfile.go @@ -33,7 +33,7 @@ func LoadChartfile(filename string) (*chart.Metadata, error) { return nil, err } y := new(chart.Metadata) - err = yaml.Unmarshal(b, y) + err = yaml.UnmarshalStrict(b, y) return y, err } diff --git a/pkg/lint/lint_test.go b/pkg/lint/lint_test.go index 067d140f6..ecf544686 100644 --- a/pkg/lint/lint_test.go +++ b/pkg/lint/lint_test.go @@ -35,6 +35,7 @@ const badYamlFileDir = "rules/testdata/albatross" const goodChartDir = "rules/testdata/goodone" const subChartValuesDir = "rules/testdata/withsubchart" const malformedTemplate = "rules/testdata/malformed-template" +const invalidChartFileDir = "rules/testdata/invalidchartfile" func TestBadChart(t *testing.T) { m := RunAll(badChartDir, values, namespace).Messages @@ -90,6 +91,16 @@ func TestInvalidYaml(t *testing.T) { } } +func TestInvalidChartYaml(t *testing.T) { + m := All(invalidChartFileDir, values, namespace, strict).Messages + if len(m) != 1 { + t.Fatalf("All didn't fail with expected errors, got %#v", m) + } + if !strings.Contains(m[0].Err.Error(), "unable to parse YAML") { + t.Errorf("All didn't have the error for duplicate YAML keys") + } +} + func TestBadValues(t *testing.T) { m := RunAll(badValuesFileDir, values, namespace).Messages if len(m) < 1 { diff --git a/pkg/lint/rules/testdata/invalidchartfile/Chart.yaml b/pkg/lint/rules/testdata/invalidchartfile/Chart.yaml new file mode 100644 index 000000000..01dcf1864 --- /dev/null +++ b/pkg/lint/rules/testdata/invalidchartfile/Chart.yaml @@ -0,0 +1,5 @@ +name: some-chart +apiVersion: v2 +apiVersion: v1 +description: A Helm chart for Kubernetes +version: 1.3.0 diff --git a/pkg/lint/rules/testdata/invalidchartfile/values.yaml b/pkg/lint/rules/testdata/invalidchartfile/values.yaml new file mode 100644 index 000000000..e69de29bb