mirror of
https://github.com/helm/helm.git
synced 2026-08-07 16:41:27 +00:00
feat(lint): Ports v2 functionality for linting pre-release charts
This is a port of #5177 Signed-off-by: Taylor Thomas <taylor.thomas@microsoft.com>
This commit is contained in:
BIN
cmd/helm/testdata/testcharts/pre-release-chart-0.1.0-alpha.tgz
vendored
Normal file
BIN
cmd/helm/testdata/testcharts/pre-release-chart-0.1.0-alpha.tgz
vendored
Normal file
Binary file not shown.
@@ -94,12 +94,15 @@ func lintChart(path string, vals map[string]interface{}, namespace string, stric
|
||||
return linter, errors.Wrap(err, "unable to extract tarball")
|
||||
}
|
||||
|
||||
lastHyphenIndex := strings.LastIndex(filepath.Base(path), "-")
|
||||
if lastHyphenIndex <= 0 {
|
||||
return linter, errors.Errorf("unable to parse chart archive %q, missing '-'", filepath.Base(path))
|
||||
files, err := ioutil.ReadDir(tempDir)
|
||||
if err != nil {
|
||||
return linter, errors.Wrapf(err, "unable to read temporary output directory %s", tempDir)
|
||||
}
|
||||
base := filepath.Base(path)[:lastHyphenIndex]
|
||||
chartPath = filepath.Join(tempDir, base)
|
||||
if !files[0].IsDir() {
|
||||
return linter, errors.Errorf("unexpected file %s in temporary output directory %s", files[0].Name(), tempDir)
|
||||
}
|
||||
|
||||
chartPath = filepath.Join(tempDir, files[0].Name())
|
||||
} else {
|
||||
chartPath = path
|
||||
}
|
||||
|
||||
@@ -21,43 +21,67 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
values = make(map[string]interface{})
|
||||
namespace = "testNamespace"
|
||||
strict = false
|
||||
archivedChartPath = "../../cmd/helm/testdata/testcharts/compressedchart-0.1.0.tgz"
|
||||
archivedChartPathWithHyphens = "../../cmd/helm/testdata/testcharts/compressedchart-with-hyphens-0.1.0.tgz"
|
||||
invalidArchivedChartPath = "../../cmd/helm/testdata/testcharts/invalidcompressedchart0.1.0.tgz"
|
||||
chartDirPath = "../../cmd/helm/testdata/testcharts/decompressedchart/"
|
||||
chartMissingManifest = "../../cmd/helm/testdata/testcharts/chart-missing-manifest"
|
||||
chartSchema = "../../cmd/helm/testdata/testcharts/chart-with-schema"
|
||||
chartSchemaNegative = "../../cmd/helm/testdata/testcharts/chart-with-schema-negative"
|
||||
chart1MultipleChartLint = "../../cmd/helm/testdata/testcharts/multiplecharts-lint-chart-1"
|
||||
chart2MultipleChartLint = "../../cmd/helm/testdata/testcharts/multiplecharts-lint-chart-2"
|
||||
corruptedTgzChart = "../../cmd/helm/testdata/testcharts/corrupted-compressed-chart.tgz"
|
||||
chartWithNoTemplatesDir = "../../cmd/helm/testdata/testcharts/chart-with-no-templates-dir"
|
||||
values = make(map[string]interface{})
|
||||
namespace = "testNamespace"
|
||||
strict = false
|
||||
chart1MultipleChartLint = "../../cmd/helm/testdata/testcharts/multiplecharts-lint-chart-1"
|
||||
chart2MultipleChartLint = "../../cmd/helm/testdata/testcharts/multiplecharts-lint-chart-2"
|
||||
corruptedTgzChart = "../../cmd/helm/testdata/testcharts/corrupted-compressed-chart.tgz"
|
||||
chartWithNoTemplatesDir = "../../cmd/helm/testdata/testcharts/chart-with-no-templates-dir"
|
||||
)
|
||||
|
||||
func TestLintChart(t *testing.T) {
|
||||
if _, err := lintChart(chartDirPath, values, namespace, strict); err != nil {
|
||||
t.Error(err)
|
||||
tests := []struct {
|
||||
name string
|
||||
chartPath string
|
||||
err bool
|
||||
}{
|
||||
{
|
||||
name: "decompressed-chart",
|
||||
chartPath: "../../cmd/helm/testdata/testcharts/decompressedchart/",
|
||||
},
|
||||
{
|
||||
name: "archived-chart-path",
|
||||
chartPath: "../../cmd/helm/testdata/testcharts/compressedchart-0.1.0.tgz",
|
||||
},
|
||||
{
|
||||
name: "archived-chart-path-with-hyphens",
|
||||
chartPath: "../../cmd/helm/testdata/testcharts/compressedchart-with-hyphens-0.1.0.tgz",
|
||||
},
|
||||
{
|
||||
name: "invalid-archived-chart-path",
|
||||
chartPath: "../../cmd/helm/testdata/testcharts/invalidcompressedchart0.1.0.tgz",
|
||||
err: true,
|
||||
},
|
||||
{
|
||||
name: "chart-missing-manifest",
|
||||
chartPath: "../../cmd/helm/testdata/testcharts/chart-missing-manifest",
|
||||
err: true,
|
||||
},
|
||||
{
|
||||
name: "chart-with-schema",
|
||||
chartPath: "../../cmd/helm/testdata/testcharts/chart-with-schema",
|
||||
},
|
||||
{
|
||||
name: "chart-with-schema-negative",
|
||||
chartPath: "../../cmd/helm/testdata/testcharts/chart-with-schema-negative",
|
||||
},
|
||||
{
|
||||
name: "pre-release-chart",
|
||||
chartPath: "../../cmd/helm/testdata/testcharts/pre-release-chart-0.1.0-alpha.tgz",
|
||||
},
|
||||
}
|
||||
if _, err := lintChart(archivedChartPath, values, namespace, strict); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if _, err := lintChart(archivedChartPathWithHyphens, values, namespace, strict); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if _, err := lintChart(invalidArchivedChartPath, values, namespace, strict); err == nil {
|
||||
t.Error("Expected a chart parsing error")
|
||||
}
|
||||
if _, err := lintChart(chartMissingManifest, values, namespace, strict); err == nil {
|
||||
t.Error("Expected a chart parsing error")
|
||||
}
|
||||
if _, err := lintChart(chartSchema, values, namespace, strict); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if _, err := lintChart(chartSchemaNegative, values, namespace, strict); err != nil {
|
||||
t.Error(err)
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
_, err := lintChart(tt.chartPath, map[string]interface{}{}, namespace, strict)
|
||||
switch {
|
||||
case err != nil && !tt.err:
|
||||
t.Errorf("%s", err)
|
||||
case err == nil && tt.err:
|
||||
t.Errorf("Expected a chart parsing error")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,19 @@ func TestExpand(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
files, err := ioutil.ReadDir(dest)
|
||||
if err != nil {
|
||||
t.Fatalf("error reading output directory %s: %s", dest, err)
|
||||
}
|
||||
|
||||
if len(files) != 1 {
|
||||
t.Fatalf("expected a single chart directory in output directory %s", dest)
|
||||
}
|
||||
|
||||
if !files[0].IsDir() {
|
||||
t.Fatalf("expected a chart directory in output directory %s", dest)
|
||||
}
|
||||
|
||||
expectedChartPath := filepath.Join(dest, "frobnitz")
|
||||
fi, err := os.Stat(expectedChartPath)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user