public async Task <IPipelineStatus> StartBuild(PipelineInfo pipeline) { using (await projectLock.LockAsync()) { var buildsDir = Path.Combine(ProjectDir, "builds"); int lastBuildNumber = BuildNumbers().DefaultIfEmpty(0).Max(); int buildNum = lastBuildNumber + 1; var buildDir = Path.Combine(buildsDir, "build" + buildNum); Directory.CreateDirectory(buildDir); var runManager = new PipelineRunManager(buildDir); var status = await jobQueue.AddJobs(runManager, pipeline.BuildJobs, buildNum, CancellationToken.None); statuses[buildNum] = status; return(status); } }