func()

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
}