public async Task <WebhookResponse> Handle(PullRequestReviewEvent payload) { var submittedAction = payload.Action.Equals("submitted", StringComparison.OrdinalIgnoreCase); if (!submittedAction) { logger.WithExtraData(new { payloadAction = payload.Action }).Information("Received Review event on action other than 'submitted', ignoring"); return(new WebhookResponse(false, "Received Review event on action other than 'submitted', ignoring")); } var isApprovedState = payload.Review.State.Equals("approved", StringComparison.OrdinalIgnoreCase); if (!isApprovedState) { logger.WithExtraData(new { payloadAction = payload.Action, reviewState = payload.Review.State }).Information($"Received submit Review event on event other than 'approved', ignoring"); return(new WebhookResponse(false, "Received submit Review event on action other than 'submitted', ignoring")); } var owner = payload.Repository.Owner.Login; var repo = payload.Repository.Name; var prId = payload.PullRequest.Number; var mergeRequest = await mergeRequestsRepository.Get(owner, repo, prId); if (mergeRequest == null) { logger.WithExtraData(new { owner, repo, prId }).Warning("Received Review event on unknown PR, Miro can't handle this"); return(new WebhookResponse(false, "Received Review event on unknown PR, Miro can't handle this")); } logger.WithMergeRequestData(mergeRequest).Information("Received Approved Review event on PR, Trying to merge"); var merged = await mergeOperations.TryToMerge(mergeRequest); return(new WebhookResponse(true, $"Received Approved Review event on PR, did branch merge: {merged}")); }
private async Task <WebhookResponse> HandleMiroMergeCommand(string owner, string repo, int prId) { var mergeRequest = await mergeRequestRepository.UpdateMergeCommand(owner, repo, prId, true, DateTime.UtcNow); var config = await repoConfigManager.GetConfig(owner, repo); await PrintMergeInfoForMergeCommand(mergeRequest, config.IsWhitelistStrict(), config.Quiet); if (config.IsWhitelistStrict()) { logger.WithMergeRequestData(mergeRequest).Information("Repository has a whitelist-strict merge policy, resolving miro check on PR"); await miroMergeCheck.ResolveMiroMergeCheck(mergeRequest); } var merged = await mergeOperations.TryToMerge(mergeRequest); return(new WebhookResponse(true, $"handled Miro merge command, did branch merge: {merged}")); }
private async Task <WebhookResponse> HandleStatus(string sha, StatusEvent payload) { var mergeRequest = await mergeRequestsRepository.GetBySha(payload.Repository.Owner.Login, payload.Repository.Name, sha); if (mergeRequest == null) { logger.WithExtraData(new { payload.Sha, owner = payload.Repository.Owner.Login, repo = payload.Repository.Name }).Information("Received status from unknown Pull Request, ignoring"); return(new WebhookResponse(false, "Received status from unknown Pull Request, ignoring")); } var owner = mergeRequest.Owner; var repo = mergeRequest.Repo; var prId = mergeRequest.PrId; var testName = payload.Context; var testState = payload.State; var targetUrl = payload.TargetUrl; if (!await checksManager.IsRequiredCheck(owner, repo, testName)) { logger.WithMergeRequestData(mergeRequest).WithExtraData(new { testName, testState, targetUrl }).Information("Received a non-required status from Pull Request, ignoring"); return(new WebhookResponse(false, "Received a non-required status from Pull Request, ignoring")); } if (isStaleStatusEvent(mergeRequest, sha)) { logger.WithMergeRequestData(mergeRequest).WithExtraData(new { testName, testState, staleSha = sha }).Information("Received stale status from Pull Request, ignoring"); return(new WebhookResponse(false, "Received stale status from Pull Request, ignoring")); } logger.WithMergeRequestData(mergeRequest).WithExtraData(new { testName, testState, staleSha = sha }).Information($"Received status from Pull Request, updating DB"); var updatedMergeRequest = await mergeRequestsRepository.UpdateCheckStatus(owner, repo, prId, testName, testState, targetUrl); if (testState == "success") { var checks = updatedMergeRequest.Checks?.Select(x => $"{x.Name}_{x.Status}"); logger.WithMergeRequestData(mergeRequest).WithExtraData(new { testName, testState, staleSha = sha, checks = String.Join(",", checks) }).Information($"Received status from Pull Request, updated DB"); var merged = await mergeOperations.TryToMerge(updatedMergeRequest); return(new WebhookResponse(true, $"Received success status from Pull Request, did branch merge: {merged}")); } return(new WebhookResponse(true, $"Received {testState} status from Pull Request, handled without trying to merge")); }