예제 #1
0
        public async Task HandleGithubPullRequestEvent(int projectId, PullRequestGithubPayloadDTO payload)
        {
            //Github fire pull_request event on every activity with pull requests
            //Next line filter only closed pull requests, which was merged
            if (payload.Action != "closed" || payload.Pull_Request?.Merged_At == null)
            {
                return;
            }

            var updatedBranch = payload.Pull_Request.Base.Ref;

            var triggers = await _projectService.GetProjectRemoteTriggers(projectId);

            var pullRequestTrigger = triggers.FirstOrDefault(t => (t.Type == RemoteTriggerType.PullRequest ||
                                                                   t.Type == RemoteTriggerType.All) &&
                                                             t.Branch == updatedBranch);

            if (pullRequestTrigger == null)
            {
                return;
            }

            var rebuild = await _builder.PrepareBuild(projectId, payload.Sender.Login, updatedBranch);

            await _builder.StartBuild(projectId, rebuild.Id, updatedBranch, (await _projectService.GetAsync(projectId)).OwnerId);
        }
 public async Task GithubWebhookPullRequestCallback(int projectId, [FromBody] PullRequestGithubPayloadDTO payload)
 {
     await _handler.HandleGithubPullRequestEvent(projectId, payload);
 }