in internal/config/core/parameter.go [97:155]
func resolveParameters(
configProviders []task.ConfigProvider,
inputsFromUserInputs map[string]string,
) (resolvedParameters, error) {
rv := make(resolvedParameters)
for k, v := range inputsFromUserInputs {
rv[k] = v
}
var paramsList []parameterSettings
for _, cp := range configProviders {
if cp.Provider.Name != configProviderNameParameter {
continue
}
params, err := loadParameterSettings(cp)
if err != nil {
return nil, err
}
paramsList = append(paramsList, params)
}
if len(paramsList) == 0 {
// no parameter to resolve
return rv, nil
}
// pass 1: fill with user inputs or prompt
for _, params := range paramsList {
if _, ok := rv[params.Name]; ok {
// already resolved
continue
}
if params.OnMissing == parameterOnMissingPrompt {
value, err := promptForParameter(fmt.Sprintf("Please input value for parameter %q", params.Name))
if err != nil {
return nil, fmt.Errorf("failed to prompt for parameter %q: %w", params.Name, err)
}
rv[params.Name] = value
}
}
// pass 2: backfill default or error
for _, params := range paramsList {
if _, ok := rv[params.Name]; ok {
// already resolved
continue
}
switch params.OnMissing {
case parameterOnMissingError:
return nil, fmt.Errorf("missing required parameter %q", params.Name)
case parameterOnMissingEmpty:
rv[params.Name] = ""
}
}
return rv, nil
}