Merge pull request #6640 from thomastaylor312/feat/parse_pre_release

feat(lint): Ports v2 functionality for linting pre-release charts
pull/6653/head
Taylor Thomas 5 years ago committed by GitHub
commit da72944611
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -94,12 +94,15 @@ func lintChart(path string, vals map[string]interface{}, namespace string, stric
return linter, errors.Wrap(err, "unable to extract tarball") return linter, errors.Wrap(err, "unable to extract tarball")
} }
lastHyphenIndex := strings.LastIndex(filepath.Base(path), "-") files, err := ioutil.ReadDir(tempDir)
if lastHyphenIndex <= 0 { if err != nil {
return linter, errors.Errorf("unable to parse chart archive %q, missing '-'", filepath.Base(path)) return linter, errors.Wrapf(err, "unable to read temporary output directory %s", tempDir)
}
if !files[0].IsDir() {
return linter, errors.Errorf("unexpected file %s in temporary output directory %s", files[0].Name(), tempDir)
} }
base := filepath.Base(path)[:lastHyphenIndex]
chartPath = filepath.Join(tempDir, base) chartPath = filepath.Join(tempDir, files[0].Name())
} else { } else {
chartPath = path chartPath = path
} }

@ -21,43 +21,67 @@ import (
) )
var ( var (
values = make(map[string]interface{}) values = make(map[string]interface{})
namespace = "testNamespace" namespace = "testNamespace"
strict = false strict = false
archivedChartPath = "../../cmd/helm/testdata/testcharts/compressedchart-0.1.0.tgz" chart1MultipleChartLint = "../../cmd/helm/testdata/testcharts/multiplecharts-lint-chart-1"
archivedChartPathWithHyphens = "../../cmd/helm/testdata/testcharts/compressedchart-with-hyphens-0.1.0.tgz" chart2MultipleChartLint = "../../cmd/helm/testdata/testcharts/multiplecharts-lint-chart-2"
invalidArchivedChartPath = "../../cmd/helm/testdata/testcharts/invalidcompressedchart0.1.0.tgz" corruptedTgzChart = "../../cmd/helm/testdata/testcharts/corrupted-compressed-chart.tgz"
chartDirPath = "../../cmd/helm/testdata/testcharts/decompressedchart/" chartWithNoTemplatesDir = "../../cmd/helm/testdata/testcharts/chart-with-no-templates-dir"
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"
) )
func TestLintChart(t *testing.T) { func TestLintChart(t *testing.T) {
if _, err := lintChart(chartDirPath, values, namespace, strict); err != nil { tests := []struct {
t.Error(err) 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) for _, tt := range tests {
} t.Run(tt.name, func(t *testing.T) {
if _, err := lintChart(archivedChartPathWithHyphens, values, namespace, strict); err != nil { _, err := lintChart(tt.chartPath, map[string]interface{}{}, namespace, strict)
t.Error(err) switch {
} case err != nil && !tt.err:
if _, err := lintChart(invalidArchivedChartPath, values, namespace, strict); err == nil { t.Errorf("%s", err)
t.Error("Expected a chart parsing error") case err == nil && tt.err:
} t.Errorf("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)
} }
} }

@ -39,6 +39,19 @@ func TestExpand(t *testing.T) {
t.Fatal(err) 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") expectedChartPath := filepath.Join(dest, "frobnitz")
fi, err := os.Stat(expectedChartPath) fi, err := os.Stat(expectedChartPath)
if err != nil { if err != nil {

Loading…
Cancel
Save