in command-runner/pkg/features/workingdir_importer.go [15:66]
func WorkingDirImporter(workingDir string, cacheDir string, bindWorkingDir bool, sharedCompute bool, isWorkingDirSetup *bool) runner.Feature {
return func(ctx context.Context, plan runner.Plan, e runner.PlanExecutor) error {
log.Ctx(ctx).Debug().Msgf("ENTER WorkingDirImporter workingDir=%s bind=%v shared=%v", workingDir, bindWorkingDir, sharedCompute)
workingDir, err := filepath.Abs(workingDir)
if err != nil {
return fmt.Errorf("unable to get abs directory: %w", err)
}
envCfg := plan.EnvironmentConfiguration()
targetPath := filepath.Join("git", "v1", filepath.Base(workingDir))
if bindWorkingDir {
envCfg.FileMaps = append(envCfg.FileMaps, &runner.FileMap{
SourcePath: workingDir,
TargetPath: targetPath,
Type: runner.FileMapTypeBind,
})
} else if sharedCompute {
workflowSourceCacheDir := filepath.Join(cacheDir, "sources", "WorkflowSource")
if !*isWorkingDirSetup {
envCfg.FileMaps = append(envCfg.FileMaps, &runner.FileMap{
SourcePath: fmt.Sprintf("%s/.", workingDir),
TargetPath: targetPath,
Type: runner.FileMapTypeCopyInWithGitignore,
})
*isWorkingDirSetup = true
} else {
envCfg.FileMaps = append(envCfg.FileMaps, &runner.FileMap{
SourcePath: fmt.Sprintf("%s/.", workflowSourceCacheDir),
TargetPath: targetPath,
Type: runner.FileMapTypeCopyInWithGitignore,
})
}
envCfg.FileMaps = append(envCfg.FileMaps, &runner.FileMap{
SourcePath: fmt.Sprintf("%s/.", targetPath),
TargetPath: workflowSourceCacheDir,
Type: runner.FileMapTypeCopyOut,
})
} else {
envCfg.FileMaps = append(envCfg.FileMaps, &runner.FileMap{
SourcePath: fmt.Sprintf("%s/.", workingDir),
TargetPath: targetPath,
Type: runner.FileMapTypeCopyInWithGitignore,
})
}
if envCfg.Env == nil {
envCfg.Env = make(map[string]string)
}
envCfg.Env["CATALYST_SOURCE_DIR_WorkflowSource"] = filepath.Join("git/v1", filepath.Base(workingDir))
err = e(ctx)
log.Ctx(ctx).Debug().Msg("EXIT WorkingDirImporter")
return err
}
}