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
}