in script/validator/validator.go [228:305]
func verifyParameters(kamelets []KameletInfo) (errors []error) {
for _, kamelet := range kamelets {
if kamelet.Spec.Definition == nil {
errors = append(errors, fmt.Errorf("kamelet %q does not contain the JSON schema definition", kamelet.Name))
continue
}
if kamelet.Spec.Template == nil {
errors = append(errors, fmt.Errorf("kamelet %q does not contain the Template specification", kamelet.Name))
continue
}
requiredCheck := make(map[string]bool)
for _, p := range kamelet.Spec.Definition.Required {
if requiredCheck[p] {
errors = append(errors, fmt.Errorf("required kamelet property %q is listed twice in kamelet %q", p, kamelet.Name))
}
requiredCheck[p] = true
}
if kamelet.Spec.Definition.Title == "" {
errors = append(errors, fmt.Errorf("kamelet %q does not contain title", kamelet.Name))
} else {
tp := kamelet.Labels["camel.apache.org/kamelet.type"]
if len(tp) > 1 {
expectedSuffix := strings.ToUpper(tp[0:1]) + tp[1:]
if !strings.HasSuffix(kamelet.Spec.Definition.Title, expectedSuffix) {
errors = append(errors, fmt.Errorf("kamelet %q title %q does not ends with %q", kamelet.Name, kamelet.Spec.Definition.Title, expectedSuffix))
}
}
}
if kamelet.Spec.Definition.Description == "" {
errors = append(errors, fmt.Errorf("kamelet %q does not contain description", kamelet.Name))
}
if kamelet.Spec.Definition.Type != "object" {
errors = append(errors, fmt.Errorf("kamelet %q does not contain a definition of type \"object\"", kamelet.Name))
}
for k, p := range kamelet.Spec.Definition.Properties {
if p.Type == "" {
errors = append(errors, fmt.Errorf("property %q in kamelet %q does not contain type", k, kamelet.Name))
}
if p.Title == "" {
errors = append(errors, fmt.Errorf("property %q in kamelet %q does not contain title", k, kamelet.Name))
} else {
cleanTitle := stopwords.CleanString(p.Title, "en", false)
goodWords := strings.Split(cleanTitle, " ")
check := make(map[string]bool, len(goodWords))
for _, w := range goodWords {
check[strings.ToLower(w)] = true
}
words := strings.Split(p.Title, " ")
for _, w := range words {
if !check[strings.ToLower(w)] {
continue
}
if len(w) > 0 && strings.ToUpper(w[0:1]) != w[0:1] {
errors = append(errors, fmt.Errorf("property %q in kamelet %q does has non-capitalized word in the title: %q", k, kamelet.Name, w))
}
}
}
if strings.HasPrefix(p.Title, "The ") {
errors = append(errors, fmt.Errorf("property %q in kamelet %q has a title starting with \"The \"", k, kamelet.Name))
}
if strings.HasPrefix(p.Title, "A ") {
errors = append(errors, fmt.Errorf("property %q in kamelet %q has a title starting with \"A \"", k, kamelet.Name))
}
if strings.HasPrefix(p.Title, "An ") {
errors = append(errors, fmt.Errorf("property %q in kamelet %q has a title starting with \"An \"", k, kamelet.Name))
}
if p.Description == "" {
errors = append(errors, fmt.Errorf("property %q in kamelet %q does not contain a description", k, kamelet.Name))
}
}
for _, k := range kamelet.Spec.Definition.Required {
if _, ok := kamelet.Spec.Definition.Properties[k]; !ok {
errors = append(errors, fmt.Errorf("required property %q in kamelet %q is not defined", k, kamelet.Name))
}
}
}
return errors
}