diff --git a/cmd/helm/testdata/testcharts/pre-release-chart-0.1.0-alpha.tgz b/cmd/helm/testdata/testcharts/pre-release-chart-0.1.0-alpha.tgz new file mode 100644 index 000000000..5d5770fed Binary files /dev/null and b/cmd/helm/testdata/testcharts/pre-release-chart-0.1.0-alpha.tgz differ diff --git a/pkg/action/lint.go b/pkg/action/lint.go index 194dffc9f..f3ca5ed88 100644 --- a/pkg/action/lint.go +++ b/pkg/action/lint.go @@ -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) + } + 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 { chartPath = path } diff --git a/pkg/action/lint_test.go b/pkg/action/lint_test.go index d5aaae9dd..b40501cf4 100644 --- a/pkg/action/lint_test.go +++ b/pkg/action/lint_test.go @@ -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") + } + }) } } diff --git a/pkg/chartutil/expand_test.go b/pkg/chartutil/expand_test.go index b69acd3b6..0eb35aedb 100644 --- a/pkg/chartutil/expand_test.go +++ b/pkg/chartutil/expand_test.go @@ -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 {