Пример #1
0
        private async Task <WebhookResponse> HandleMiroWipCommand(string owner, string repo, int prId)
        {
            await Task.WhenAll(
                mergeRequestRepository.UpdateMergeCommand(owner, repo, prId, false, DateTime.MaxValue),
                commentCreator.CreateComment(owner, repo, prId, CommentsConsts.MiroWipHeader, CommentsConsts.MiroWipBody));

            return(new WebhookResponse(true, "handled Miro wip command"));
        }
Пример #2
0
        private async Task <WebhookResponse> HandleOpenedEvent(PullRequestEvent payload)
        {
            var owner         = payload.Repository.Owner.Login;
            var repo          = payload.Repository.Name;
            var prId          = payload.Number;
            var title         = payload.PullRequest.Title;
            var sha           = payload.PullRequest.Head.Sha;
            var branch        = payload.PullRequest.Head.Ref;
            var author        = payload.PullRequest.User.Login;
            var baseRef       = payload.PullRequest.Base.Ref;
            var payloadAction = payload.Action;
            var isFork        = payload.PullRequest.Head.Repo?.Fork ?? false;
            var config        = await repoConfigManager.GetConfig(owner, repo);

            var mergePolicy     = config.MergePolicy;
            var defaultBranch   = config.DefaultBranch;
            var extraLoggerData = new { owner, repo, prId, title, sha, branch, author, baseRef, payloadAction, mergePolicy, isFork, defaultBranch };

            if (baseRef != defaultBranch)
            {
                logger.WithExtraData(extraLoggerData)
                .Information("Open PR Event was not targeted at default branch, ignoring");
                return(new WebhookResponse(false, $"Open PR Event was targeted {baseRef}, Miro only handles {defaultBranch} branch"));
            }

            logger.WithExtraData(extraLoggerData)
            .Information($"Handling PR opened event - Creating a PENDING merge request");

            var mergeRequest = new MergeRequest
            {
                Id        = new ObjectId(),
                CreatedAt = DateTime.UtcNow,
                Owner     = owner,
                Repo      = repo,
                PrId      = prId,
                Author    = author,
                Title     = title,
                Sha       = sha,
                IsFork    = isFork,
                Branch    = payload.PullRequest.Head.Ref,
                ReceivedMergeCommandTimestamp = DateTime.MaxValue
            };

            await mergeRequestRepository.Create(mergeRequest);

            if (config.IsBlacklist() && !mergeRequest.Title.Contains("[WIP]", StringComparison.OrdinalIgnoreCase))
            {
                logger.WithMergeRequestData(mergeRequest).Information("New Pull Request has blacklist configuration");
                await mergeRequestRepository.UpdateMergeCommand(owner, repo, prId, true, DateTime.UtcNow);

                await commentCreator.CreateComment(owner, repo, prId, CommentsConsts.BlackListPullRequestHeader, CommentsConsts.BlackListPullRequestBody);
            }
            else if (config.IsBlacklist() && mergeRequest.Title.Contains("[WIP]", StringComparison.OrdinalIgnoreCase))
            {
                logger.WithMergeRequestData(mergeRequest).Information("New Pull Request has blacklist configuration but titled as WIP");
                await commentCreator.CreateComment(owner, repo, prId, CommentsConsts.BlackListPullRequestWipHeader, CommentsConsts.BlackListPullRequestWipBody);
            }
            else if (config.IsWhitelistStrict())
            {
                logger.WithMergeRequestData(mergeRequest).Information("Opened PR has a whitelist-strict merge policy");
                await miroMergeCheck.AddMiroMergeRequiredCheck(mergeRequest);
            }

            if (payloadAction == "reopened")
            {
                await HandleReopenedPullRequest(mergeRequest);
            }
            return(new WebhookResponse(true, $"Handling PR {payloadAction} event - Creating a PENDING merge request"));
        }