コード例 #1
0
        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}"));
        }
コード例 #2
0
        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}"));
        }
コード例 #3
0
ファイル: StatusEventHandler.cs プロジェクト: mattcat10/Miro
        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"));
        }