in codecatalyst-runner/pkg/workflows/replace_variable_handler.go [56:87]
func (v *variableReplacer) Replace(ctx context.Context, plan runner.Plan, value string) (string, error) {
var rtnError error
return replacementVariablePattern.ReplaceAllStringFunc(value, func(match string) string {
varParts := replacementVariablePattern.FindStringSubmatch(match)
varPrefix := varParts[1]
varName := varParts[2]
if varPrefix == "Secrets" {
if plan.EnvironmentConfiguration().Env == nil {
plan.EnvironmentConfiguration().Env = make(map[string]string)
}
secretEnvName := fmt.Sprintf("CATALYST_SECRETS_%s", varName)
if secretValue, err := v.secrets.GetSecret(ctx, varName); err != nil {
log.Ctx(ctx).Err(err).Msg("unable to get secret")
rtnError = err
} else {
plan.EnvironmentConfiguration().Env[secretEnvName] = secretValue
}
log.Ctx(ctx).Debug().Msgf("Replacing SECRET %s with %s", varName, secretEnvName)
return fmt.Sprintf("${%s}", secretEnvName)
}
planId := strings.Replace(varPrefix, ".", "@", 1)
log.Ctx(ctx).Debug().Msgf("Adding DependsOn %s", planId)
if !slices.Contains(plan.DependsOn(), planId) {
plan.AddDependsOn(planId)
rtnError = common.ErrDefer
return value
}
newValue := v.planOutputs[planId][varName]
log.Ctx(ctx).Debug().Msgf("Replacing VAR %s with %s", match, newValue)
return newValue
}), rtnError
}