in common/build_settings.go [147:215]
func validate[T any](variables JobVariables, name string, value *T, def T) error {
raw := variables.Value(name)
var err error
switch v := any(value).(type) {
case *SubmoduleStrategy:
switch strategy := SubmoduleStrategy(raw); strategy {
case SubmoduleNormal, SubmoduleRecursive, SubmoduleNone:
*v = strategy
case "":
*v = SubmoduleNone
default:
*value = def
return fmt.Errorf("%s: expected either 'normal', 'recursive' or 'none' got %q", name, raw)
}
return nil
case *GitStrategy:
switch strategy := GitStrategy(raw); strategy {
case GitClone, GitFetch, GitNone, GitEmpty:
*v = strategy
case "":
*value = def
default:
*value = def
return fmt.Errorf("%s: expected either 'clone', 'fetch', 'none' or 'empty' got %q, using default value '%v'", name, raw, def)
}
return nil
}
// all cases below use a default when the value is empty
if raw == "" {
*value = def
return nil
}
switch v := any(value).(type) {
case *bool:
*v, err = strconv.ParseBool(raw)
if err != nil {
*value = def
return fmt.Errorf("%s: expected bool got %q, using default value: %v", name, raw, def)
}
case *int:
i, err := strconv.ParseInt(raw, 10, 64)
*v = int(i)
if err != nil {
*value = def
return fmt.Errorf("%s: expected int got %q, using default value: %v", name, raw, def)
}
case *string:
*v = raw
case *cmdFlags:
switch raw {
case "none":
*v = cmdFlags{}
default:
*v = cmdFlags(strings.Fields(raw))
}
case *[]string:
*v = strings.Fields(raw)
}
return nil
}