func IsFormatValid()

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
}