public RunnableJob(IPipelineRunManager pipelineRunManager, BuildJob job, IDictionary <BuildJob, IJobStatus> jobMap) { BuildTask = job.Task; Status = new JobStatus(pipelineRunManager.BuildPath(job), job); var inputHandlers = new List <(BuildInputHandler handler, string path)>(); foreach (var input in job.Input) { var handler = input.Source switch { GitBuildInput git => HandleGitInput(pipelineRunManager, git), HttpRequestBuildInput http => HandleHttpInput(pipelineRunManager, http), ArtifactBuildInput artifact => HandleArtifactInput(artifact, jobMap[artifact.Job]), _ => throw new Exception("Unknown build input type") }; inputHandlers.Add((handler, input.Path)); } this.inputHandlers = inputHandlers; }
private static BuildInputHandler HandleGitInput(IPipelineRunManager pipelineRunManager, GitBuildInput git) => async cancellationToken => { var dir = pipelineRunManager.NextInputPath(); Directory.CreateDirectory(dir); await GitUtil.CloneRepo(git.Url, dir, git.Branch); return(dir); };