Exemplo n.º 1
0
            // 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();
            }
        }
Exemplo n.º 3
0
 static bool IsBuildCompleted(BuildInfo.BuildStatus status)
 {
     return(status == BuildInfo.BuildStatus.Success ||
            status == BuildInfo.BuildStatus.Failure ||
            status == BuildInfo.BuildStatus.Unstable);
 }