in pkg/config/draftconfig.go [232:289]
func (d *DraftConfig) ApplyDefaultVariablesForVersion(version string) error {
v, err := semver.Parse(version)
if err != nil {
return fmt.Errorf("invalid version: %w", err)
}
if !slices.Contains(d.Versions, version) {
return fmt.Errorf("requested version outside of valid versions: %s", version)
}
for _, variable := range d.Variables {
if variable.Value == "" {
expectedRange, err := semver.ParseRange(variable.Versions)
if err != nil {
return fmt.Errorf("invalid variable versions: %w", err)
}
if !expectedRange(v) {
log.Infof("Variable %s versions %s is outside input version %s, skipping", variable.Name, variable.Versions, version)
continue
}
if variable.Default.ReferenceVar != "" {
referenceVar, err := d.GetVariable(variable.Default.ReferenceVar)
if err != nil {
return fmt.Errorf("apply default variables: %w", err)
}
defaultVal, err := d.recurseReferenceVars(referenceVar, referenceVar, true)
if err != nil {
return fmt.Errorf("apply default variables: %w", err)
}
log.Infof("Variable %s defaulting to value %s", variable.Name, defaultVal)
variable.Value = defaultVal
}
isVarActive, err := d.CheckActiveWhenConstraint(variable)
if err != nil {
return fmt.Errorf("unable to check ActiveWhen constraint: %w", err)
}
if !isVarActive {
continue
}
if variable.Value == "" {
if variable.Default.Value != "" {
log.Infof("Variable %s defaulting to value %s", variable.Name, variable.Default.Value)
variable.Value = variable.Default.Value
} else {
return errors.New("variable " + variable.Name + " has no default value")
}
}
}
}
return nil
}