コード例 #1
0
        /// <inheritdoc />
        public async Task ProcessPayload(PullRequestEventPayload payload, CancellationToken cancellationToken)
        {
            if (payload == null)
            {
                throw new ArgumentNullException(nameof(payload));
            }

            if (payload.Action != "edited")
            {
                throw new NotSupportedException();
            }

            var signOff = await dataStore.ReadData <PullRequestSignOffs>(SignOffDataKey, cancellationToken).ConfigureAwait(false);

            if (!signOff.Entries.Remove(payload.PullRequest.Number))
            {
                return;
            }

            await dataStore.WriteData(SignOffDataKey, signOff, cancellationToken).ConfigureAwait(false);

            var botLoginTask = gitHubManager.GetUserLogin(null, cancellationToken);
            var reviews      = await gitHubManager.GetPullRequestReviews(payload.PullRequest).ConfigureAwait(false);

            var botLogin = await botLoginTask.ConfigureAwait(false);

            await Task.WhenAll(
                reviews.Where(
                    x => x.User.Id == botLogin.Id &&
                    x.State.Value == PullRequestReviewState.Approved
                    ).Select(
                    x => gitHubManager.DismissReview(payload.PullRequest, x, stringLocalizer["SignOffNulled"])
                    ));
        }
コード例 #2
0
        /// <summary>
        /// Erases the sign off and dismisses the 'approved' reviews
        /// </summary>
        /// <param name="pullRequest">The <see cref="PullRequest"/> to un-sign</param>
        /// <param name="message">The dismissal message</param>
        /// <param name="cancellationToken">The <see cref="CancellationToken"/> for the operation</param>
        /// <returns>A <see cref="Task"/> representing the running operation</returns>
        async Task EraseAndDismissReviews(PullRequest pullRequest, string message, CancellationToken cancellationToken)
        {
            var reviewsTask  = gitHubManager.GetPullRequestReviews(pullRequest);
            var botLoginTask = gitHubManager.GetUserLogin(null, cancellationToken);
            await dataStore.WriteData(pullRequest.Number.ToString(CultureInfo.InvariantCulture), new PullRequestSignOff(), cancellationToken).ConfigureAwait(false);

            var reviews = await reviewsTask.ConfigureAwait(false);

            var botLogin = await botLoginTask.ConfigureAwait(false);

            await Task.WhenAll(
                reviews.Where(
                    x => x.User.Id == botLogin.Id &&
                    x.State.Value == PullRequestReviewState.Approved
                    ).Select(
                    x => gitHubManager.DismissReview(pullRequest, x, message)
                    )).ConfigureAwait(false);
        }