Updated validation for chart names

Signed-off-by: Najeeb <najeebnjk20@yahoo.com>
pull/13361/head
Najeeb 12 months ago
parent 159844e2c6
commit 778b2ae79e

@ -20,6 +20,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"
@ -108,11 +109,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\"")

@ -68,14 +68,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