func NewWorkflowFeaturesProvider()

in codecatalyst-runner/pkg/workflows/workflow_features_provider.go [34:82]


func NewWorkflowFeaturesProvider(params *NewWorkflowFeaturesProviderParams) (runner.FeaturesProvider, error) {
	workflowActions := make(map[string]*Action)
	for _, mapItem := range params.Workflow.Actions {
		actionName := mapItem.Key.(string)
		var actionOrGroup ActionOrGroup
		if buf, err := yaml.Marshal(mapItem.Value); err != nil {
			return nil, err
		} else if err := yaml.Unmarshal(buf, &actionOrGroup); err != nil {
			return nil, err
		}
		if actionOrGroup.Action.Identifier != "" {
			workflowActions[actionName] = &actionOrGroup.Action
		} else {
			for subName, action := range actionOrGroup.Actions {
				fullName := fmt.Sprintf("%s@%s", actionName, subName)
				workflowActions[fullName] = action
			}
		}
	}

	cacheDir, err := os.UserCacheDir()
	if err != nil {
		return nil, err
	}
	sha := sha256.Sum256([]byte(params.Workflow.Path))
	workflowHash := hex.EncodeToString(sha[:])
	cacheDir = filepath.Join(cacheDir, "codecatalyst-runner", "workflows", workflowHash)

	secretProvider := params.SecretProvider
	if secretProvider == nil {
		secretProvider = new(envSecretProvider)
	}

	return &workflowFeaturesProvider{
		EnvironmentConfiguration: params.EnvironmentConfiguration,
		cacheDir:                 cacheDir,
		outputMode:               params.OutputMode,
		noOutput:                 params.NoOutput,
		noCache:                  params.NoCache,
		dryrun:                   params.Dryrun,
		bindWorkingDir:           params.BindWorkingDir,
		sharedCompute:            params.Workflow.Compute.SharedInstance,
		workflowActions:          workflowActions,
		artifactPlans:            make(map[string]string),
		environmentProfiles:      params.EnvironmentProfiles,
		planTracker:              new(features.PlanTracker),
		secretProvider:           secretProvider,
	}, nil
}