BuildStatus buildCore(BuildRequest request, CancellationToken cancellation, BuildParameters parameters) { using (measureBlock("build time")) using (beginBuild(BuildManager, parameters)) using (cancellation.Register(() => { Log.I("cancelling background build"); BuildManager.CancelAllSubmissions(); })) { var projects = request.AllProjectsToBuildOrdered; foreach (var project in projects) { if (cancellation.IsCancellationRequested) return BuildStatus.Indeterminate; if (request.mustBeSkipped(project)) { notifyProjectSkipped(project); continue; } var buildData = request.createBuildRequestData(project); var result = BuildManager.BuildRequest(buildData); switch (result.OverallResult) { case BuildResultCode.Success: continue; case BuildResultCode.Failure: return BuildStatus.Failed; default: throw new ArgumentOutOfRangeException(); } } return BuildStatus.Ok; } }