pull/13361/merge
Najeeb Khan 3 weeks ago committed by GitHub
commit efa39cdb7f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -21,6 +21,7 @@ import (
"fmt" "fmt"
"os" "os"
"path/filepath" "path/filepath"
"regexp"
"github.com/Masterminds/semver/v3" "github.com/Masterminds/semver/v3"
"github.com/asaskevich/govalidator" "github.com/asaskevich/govalidator"
@ -118,11 +119,21 @@ func validateChartName(cf *chart.Metadata) error {
} }
name := filepath.Base(cf.Name) name := filepath.Base(cf.Name)
if name != cf.Name { if name != cf.Name {
return fmt.Errorf("chart name %q is invalid", cf.Name) return fmt.Errorf("chart name %q is invalid: chart names must not include path components", cf.Name)
} }
if !validChartNameChecker(cf.Name) {
return fmt.Errorf("chart name %q is invalid: must be lowercase and may only contain letters, numbers, and dashes", cf.Name)
}
return nil return nil
} }
// validChartNameChecker ensures that the chart name follows the defined pattern.
func validChartNameChecker(name string) bool {
re := regexp.MustCompile(`^[a-z0-9-]+$`)
return re.MatchString(name)
}
func validateChartAPIVersion(cf *chart.Metadata) error { func validateChartAPIVersion(cf *chart.Metadata) error {
if cf.APIVersion == "" { if cf.APIVersion == "" {
return errors.New("apiVersion is required. The value must be either \"v1\" or \"v2\"") return errors.New("apiVersion is required. The value must be either \"v1\" or \"v2\"")

@ -67,14 +67,30 @@ func TestValidateChartYamlFormat(t *testing.T) {
} }
func TestValidateChartName(t *testing.T) { func TestValidateChartName(t *testing.T) {
err := validateChartName(badChart) validChart := &chart.Chart{Metadata: &chart.Metadata{Name: "valid-chart"}}
if err == nil {
t.Errorf("validateChartName to return a linter error, got no error") invalidChartNames := []struct {
name string
expected string
}{
{"ValidChart", "chart name \"ValidChart\" is invalid: must be lowercase and may only contain letters, numbers and dashes"},
{"chart.name", "chart name \"chart.name\" is invalid: must be lowercase and may only contain letters, numbers and dashes"},
{"chart/name", "chart name \"chart/name\" is invalid: chart names must not include path components"},
{"-bad-start", "chart name \"-bad-start\" is invalid: must be lowercase and may only contain letters, numbers and dashes"},
{"/path/to/chart", "chart name \"/path/to/chart\" is invalid: chart names must not include path components"},
} }
err = validateChartName(badChartName) err := validateChartName(validChart.Metadata)
if err == nil { if err != nil {
t.Error("expected validateChartName to return a linter error for an invalid name, got no error") t.Errorf("expected validateChartName to return no error for a valid name, got %s", err)
}
for _, chartName := range invalidChartNames {
badChart := &chart.Chart{Metadata: &chart.Metadata{Name: chartName.name}}
err := validateChartName(badChart.Metadata)
if err == nil || err.Error() != chartName.expected {
t.Errorf("validateChartName(%q) = %v, want error %q", chartName.name, err, chartName.expected)
}
} }
} }

Loading…
Cancel
Save