// Priority: Completed > InProgress > Aborted/Stopped > None static bool StatusIsBetter(BuildInfo.BuildStatus newStatus, ObjectId commit, Dictionary <ObjectId, BuildInfo.BuildStatus> builds) { // No existing status if (!builds.ContainsKey(commit)) { return(true); } var existingStatus = builds[commit]; // Completed status is never replaced if (IsBuildCompleted(existingStatus)) { return(false); } // Existing status is lower than Completed, new complete replaces if (IsBuildCompleted(newStatus)) { return(true); } // Replace existing aborted/stopped if new is InProgress return(existingStatus != BuildInfo.BuildStatus.InProgress && newStatus == BuildInfo.BuildStatus.InProgress); }
private void ObserveBuilds(DateTime?sinceDate, bool?running, IObserver <BuildInfo> observer, CancellationToken cancellationToken) { try { var gitLab = GitLabModel.Create(_gitLabAddress, _gitLabKey, _projectName); var pipelines = gitLab.GetPipelines(); foreach (var pipeline in pipelines) { if (cancellationToken.IsCancellationRequested) { break; } string commitSha = pipeline.Sha1.ToString().ToLowerInvariant(); ObjectId objectId; if (!ObjectId.TryParse(commitSha, out objectId)) { continue; } BuildInfo.BuildStatus status = ConvertBuildStatus(pipeline); BuildInfo buildInfo = new BuildInfo { Status = status, Description = pipeline.Ref, Duration = 100, //todo: get duration? Id = pipeline.Id.ToString(), StartDate = DateTime.UtcNow.AddMinutes(-1), //todo: get startdate? Url = gitLab.GetPipelinetUrl(pipeline), ShowInBuildReportTab = true, CommitHashList = new List <ObjectId> { objectId } }; observer.OnNext(buildInfo); } } catch (Exception ex) { observer.OnError(ex); } finally { observer.OnCompleted(); } }
static bool IsBuildCompleted(BuildInfo.BuildStatus status) { return(status == BuildInfo.BuildStatus.Success || status == BuildInfo.BuildStatus.Failure || status == BuildInfo.BuildStatus.Unstable); }