/// <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"]) )); }
/// <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); }