private async Task HandleReopenedPullRequest(MergeRequest mergeRequest) { logger.WithMergeRequestData(mergeRequest).Information("Handling PR reopened event for PR - Checking if it has passed all tests"); var checks = await prStatusChecks.GetStatusChecks(mergeRequest); if (checks == null || !checks.Any()) { logger.WithMergeRequestData(mergeRequest).Information("PR Reopen event had no past passing tests"); return; } var onlyRequiredChecks = await checksManager.FilterNonRequiredChecks(mergeRequest.Owner, mergeRequest.Repo, checks); logger .WithMergeRequestData(mergeRequest) .WithExtraData(new { oldTests = string.Join(",", checks.Select(x => x.Context)), filteredTests = string.Join(",", onlyRequiredChecks.Select(x => x.Context)) }) .Information("Adding old tests to reopened PullRequest"); await mergeRequestRepository.UpdateCheckStatus(mergeRequest.Owner, mergeRequest.Repo, mergeRequest.PrId, onlyRequiredChecks); }
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")); }