fix(chartfile): add extra checks for chart name

Add extra checks in linter for chart names. Looks for invalid characters.

Signed-off-by: Lex Huismans <lexhuismans@outlook.com>
pull/11833/head
Lex Huismans 3 years ago
parent b789d8677d
commit ac452fd8ba

@ -21,6 +21,7 @@ import (
"io/ioutil" "io/ioutil"
"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"
@ -104,9 +105,14 @@ func validateChartYamlFormat(chartFileError error) error {
} }
func validateChartName(cf *chart.Metadata) error { func validateChartName(cf *chart.Metadata) error {
var validNameRegex = regexp.MustCompile(`^[a-z0-9](([-a-z0-9]*)?)$`)
if cf.Name == "" { if cf.Name == "" {
return errors.New("name is required") return errors.New("name is required")
} }
if !validNameRegex.MatchString(cf.Name) {
return errors.New(fmt.Sprintf("invalid release name, must match regex %s", validNameRegex.String()))
}
return nil return nil
} }

@ -30,11 +30,13 @@ import (
) )
const ( const (
goodChartDir = "testdata/goodone"
badChartDir = "testdata/badchartfile" badChartDir = "testdata/badchartfile"
anotherBadChartDir = "testdata/anotherbadchartfile" anotherBadChartDir = "testdata/anotherbadchartfile"
) )
var ( var (
goodChartFilePath = filepath.Join(goodChartDir, "Chart.yaml")
badChartFilePath = filepath.Join(badChartDir, "Chart.yaml") badChartFilePath = filepath.Join(badChartDir, "Chart.yaml")
nonExistingChartFilePath = filepath.Join(os.TempDir(), "Chart.yaml") nonExistingChartFilePath = filepath.Join(os.TempDir(), "Chart.yaml")
) )
@ -65,9 +67,15 @@ func TestValidateChartYamlFormat(t *testing.T) {
} }
func TestValidateChartName(t *testing.T) { func TestValidateChartName(t *testing.T) {
err := validateChartName(badChart) badNameChart, _ := chartutil.LoadChartfile(goodChartFilePath)
badName := &badNameChart.Name
for _, name := range []string{"", "with-Capital", "with_underscore"} {
*badName = name
err := validateChartName(badNameChart)
if err == nil { if err == nil {
t.Errorf("validateChartName to return a linter error, got no error") t.Errorf("validateChartName to return a linter error for chart name %s, got no error", name)
}
} }
} }

Loading…
Cancel
Save