in pkg/clusters/versions.go [68:121]
func IsFormatValid(s string) error {
if s == "" {
return errors.New("malformed version: version must not be empty")
}
if s == "-" || s == "latest" {
return nil
}
split := strings.Split(s, "-")
if len(split) > 2 {
return fmt.Errorf("malformed version: %s", s)
}
kubernetes := split[0]
ksplit := strings.Split(kubernetes, ".")
if len(ksplit) < 2 || len(ksplit) > 3 {
return fmt.Errorf("malformed version: %s", s)
}
major, err := strconv.Atoi(ksplit[0])
if err != nil {
return fmt.Errorf("malformed major version %s: %w", s, err)
}
if major != 1 {
return fmt.Errorf("not compatible with major versions other than 1: version %s", s)
}
_, err = strconv.Atoi(ksplit[1])
if err != nil {
return fmt.Errorf("malformed minor version %s: %w", s, err)
}
if len(ksplit) == 3 {
_, err := strconv.Atoi(ksplit[2])
if err != nil {
return fmt.Errorf("malformed patch version %s: %w", s, err)
}
}
if len(ksplit) != 3 && len(split) == 2 {
return fmt.Errorf("malformed patch version %s: %w", s, err)
}
if len(split) != 2 {
return nil
}
if !strings.HasPrefix(split[1], "gke.") {
return fmt.Errorf("malformed GKE version: %s", s)
}
_, err = strconv.Atoi(strings.TrimPrefix(split[1], "gke."))
if err != nil {
return fmt.Errorf("malformed GKE version %s: %w", s, err)
}
return nil
}