Example #1
0
        /// <inheritdoc />
        public async Task <ContinuousIntegrationStatus> GetJobStatus(PullRequest pullRequest, CancellationToken cancellationToken)
        {
            if (pullRequest == null)
            {
                throw new ArgumentNullException(nameof(pullRequest));
            }
            logger.LogTrace("Getting job status for pull request #{0}", pullRequest.Number);
            var statuses = await gitHubManager.GetLatestCommitStatus(pullRequest).ConfigureAwait(false);

            var result = ContinuousIntegrationStatus.NotPresent;

            foreach (var I in statuses.Statuses)
            {
                if (!IsTravisStatus(I))
                {
                    logger.LogTrace("Skipping status #{0} as it is not a travis status", I.Id);
                    continue;
                }

                if (result == ContinuousIntegrationStatus.NotPresent)
                {
                    result = ContinuousIntegrationStatus.Passed;
                }
                if (I.State == "error")
                {
                    return(ContinuousIntegrationStatus.Failed);
                }
                if (I.State == "pending")
                {
                    result = ContinuousIntegrationStatus.Pending;
                }
            }
            return(result);
        }
        /// <summary>
        /// Runs a <paramref name="handler"/> for each travis status on a given <paramref name="pullRequest"/>. Does not run in paralled
        /// </summary>
        /// <param name="pullRequest">The <see cref="PullRequest"/> to check for statuses</param>
        /// <param name="handler">A function taking a <see cref="CommitState"/> and travis build id <see cref="string"/> and returning <see langword="true"/> to continue, <see langword="false"/> to cancel</param>
        /// <returns>A <see cref="Task"/> representing the running operation</returns>
        async Task NonParallelForEachBuild(PullRequest pullRequest, Func <CommitState, string, bool> handler)
        {
            var statuses = await gitHubManager.GetLatestCommitStatus(pullRequest).ConfigureAwait(false);

            var buildNumberRegex = new Regex(@"/builds/([1-9][0-9]*)\?");

            foreach (var I in statuses.Statuses)
            {
                if (!I.TargetUrl.StartsWith("https://travis-ci.org/", StringComparison.InvariantCultureIgnoreCase))
                {
                    logger.LogTrace("Skipping status #{0} as it is not a travis status", I.Id);
                    continue;
                }

                var buildNumber = buildNumberRegex.Match(I.TargetUrl).Groups[1].Value;

                if (!handler(I.State.Value, buildNumber))
                {
                    break;
                }
            }
        }