Beispiel #1
0
        private Task <HttpResponseMessage> Post(GitPullRequestUpdatedPayload payload, string code = "83699ec7c1d794c0c780e49a5c72972590571fd8")
        {
            var uri = "/api/webhooks/incoming/vsts";

            if (!string.IsNullOrWhiteSpace(code))
            {
                uri += "?code=" + code;
            }

            return(_client.PostAsJsonAsync(uri, payload));
        }
Beispiel #2
0
        private string GetPullRequestValues(GitPullRequestUpdatedPayload pullRequest)
        {
            var criteria = new[]
            {
                Tuple.Create("Repository name", pullRequest.Resource.Repository.Name),
                Tuple.Create("Status", pullRequest.Resource.Status),
                Tuple.Create("Target branch name", pullRequest.Resource.TargetRefName)
            };

            return(string.Join(", ", criteria.Select(x => string.Format("{0}: {1}", x.Item1, x.Item2))));
        }
        public async Task Handle(GitPullRequestUpdatedPayload pullRequest)
        {
            if (_pullRequestMatcher.IsMatch(pullRequest))
            {
                Log.Information("Pull request matches, checking for pending builds for {BuildDefinitionName} on project {ProjectName}", _buildDefinitionName, _projectName);
                if (await _tfsService.ArePendingBuilds(_projectName, _buildDefinitionName))
                {
                    Log.Information("Found pending build(s), not queuing another one");
                }
                else
                {
                    Log.Information("No build(s) pending, queuing another one");
                    await _tfsService.QueueNewBuild(_projectName, _buildDefinitionName);

                    Log.Information("New build successfully queued");
                }
            }
        }
Beispiel #4
0
        public bool IsMatch(GitPullRequestUpdatedPayload pullRequest)
        {
            var isMatch = _repositoryPattern.IsMatch(pullRequest.Resource.Repository.Name) &&
                          _status.Equals(pullRequest.Resource.Status, StringComparison.OrdinalIgnoreCase) &&
                          _targetBranchName.Equals(pullRequest.Resource.TargetRefName, StringComparison.OrdinalIgnoreCase);

            if (isMatch)
            {
                Log.Information("Pull request matching criteria ({Criteria})", this.GetCriteria());
            }
            else
            {
                Log.Information("Pull request not matching criteria - expected {ExptectedCriteria}, found {ActualValues}",
                                this.GetCriteria(),
                                this.GetPullRequestValues(pullRequest));
            }

            return(isMatch);
        }
Beispiel #5
0
        public ActionResult <string> CheckAuthorReview([FromBody] GitPullRequestUpdatedPayload data)
        {
            var repoId        = data.Resource.Repository.Id;
            var pullRequestId = data.Resource.PullRequestId;
            var projectId     = data.Resource.Repository.Project.Id;

            if (data.Resource.Status.Equals("active", StringComparison.OrdinalIgnoreCase))
            {
                //TODO: "Забытые" таски не лучшее решение, но ресиверу хука незачем ожидать ее завершения.
                //в ддальнейшем переделать на складывание ресивером событий в очередь, а чекерам работать по очереди.
                Task.Run(() => _authorReviewService.Check(projectId, repoId, pullRequestId, HttpContext.Request.Query.toDictionary()));
            }
            else
            {
                _logger.LogInformation($"PullRequest-{pullRequestId} is inactive. Check skipped.");
            }

            return(Ok("success"));
        }
 /// <summary>
 /// Executes the incoming WebHook request for event '<c>git.pullrequest.updated</c>'.
 /// </summary>
 /// <param name="context">Provides context for the <see cref="IWebHookHandler"/> for further processing the incoming WebHook.</param>
 /// <param name="payload">Strong-typed WebHook payload.</param>
 public virtual Task ExecuteAsync(WebHookHandlerContext context, GitPullRequestUpdatedPayload payload)
 {
     return(Task.FromResult(true));
 }
 /// <summary>
 /// Executes the incoming WebHook request for event '<c>git.pullrequest.updated</c>'.
 /// </summary>
 /// <param name="context">Provides context for the <see cref="IWebHookHandler"/> for further processing the incoming WebHook.</param>
 /// <param name="payload">Strong-typed WebHook payload.</param>
 public virtual Task ExecuteAsync(WebHookHandlerContext context, GitPullRequestUpdatedPayload payload)
 {
     return Task.FromResult(true);
 }
        public void GitPullRequestUpdatedPayload_Roundtrips()
        {
            JObject data = EmbeddedResource.ReadAsJObject("Microsoft.AspNet.WebHooks.Messages.git.pullrequest.updated.json");
            var expected = new GitPullRequestUpdatedPayload()
            {
                SubscriptionId = "00000000-0000-0000-0000-000000000000",
                NotificationId = 2,
                Id = "af07be1b-f3ad-44c8-a7f1-c4835f2df06b",
                EventType = "git.pullrequest.updated",
                PublisherId = "tfs",
                Message = new PayloadMessage
                {
                    Text = "Jamal Hartnett marked the pull request as completed",
                    Html = "Jamal Hartnett marked the pull request as completed",
                    Markdown = "Jamal Hartnett marked the pull request as completed"
                },
                DetailedMessage = new PayloadMessage
                {
                    Text = "Jamal Hartnett marked the pull request as completed\r\n\r\n- Merge status: Succeeded\r\n- Merge commit: eef717(https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72)\r\n",
                    Html = "Jamal Hartnett marked the pull request as completed\r\n<ul>\r\n<li>Merge status: Succeeded</li>\r\n<li>Merge commit: <a href=\"https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72\">eef717</a></li>\r\n</ul>",
                    Markdown = "Jamal Hartnett marked the pull request as completed\r\n\r\n+ Merge status: Succeeded\r\n+ Merge commit: [eef717](https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72)\r\n"
                },
                Resource = new GitPullRequestUpdatedResource
                {
                    Repository = new GitRepository
                    {
                        Id = "4bc14d40-c903-45e2-872e-0462c7748079",
                        Name = "Fabrikam",
                        Url = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079"),
                        Project = new GitProject
                        {
                            Id = "6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c",
                            Name = "Fabrikam",
                            Url = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c"),
                            State = "wellFormed"
                        },
                        DefaultBranch = "refs/heads/master",
                        RemoteUrl = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_git/Fabrikam")
                    },
                    PullRequestId = 1,
                    Status = "completed",
                    CreatedBy = new GitUser()
                    {
                        Id = "54d125f7-69f7-4191-904f-c5b96b6261c8",
                        DisplayName = "Jamal Hartnett",
                        UniqueName = "*****@*****.**",
                        Url = new Uri("https://fabrikam.vssps.visualstudio.com/_apis/Identities/54d125f7-69f7-4191-904f-c5b96b6261c8"),
                        ImageUrl = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=54d125f7-69f7-4191-904f-c5b96b6261c8")
                    },
                    CreationDate = "2014-06-17T16:55:46.589889Z".ToDateTime(),
                    ClosedDate = "2014-06-30T18:59:12.3660573Z".ToDateTime(),
                    Title = "my first pull request",
                    Description = " - test2\r\n",
                    SourceRefName = "refs/heads/mytopic",
                    TargetRefName = "refs/heads/master",
                    MergeStatus = "succeeded",
                    MergeId = "a10bb228-6ba6-4362-abd7-49ea21333dbd",
                    LastMergeSourceCommit = new GitMergeCommit
                    {
                        CommitId = "53d54ac915144006c2c9e90d2c7d3880920db49c",
                        Url = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/53d54ac915144006c2c9e90d2c7d3880920db49c")
                    },
                    LastMergeTargetCommit = new GitMergeCommit
                    {
                        CommitId = "a511f535b1ea495ee0c903badb68fbc83772c882",
                        Url = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/a511f535b1ea495ee0c903badb68fbc83772c882")
                    },
                    LastMergeCommit = new GitMergeCommit
                    {
                        CommitId = "eef717f69257a6333f221566c1c987dc94cc0d72",
                        Url = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72")
                    },
                    Url = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/pullRequests/1")
                },
                CreatedDate = "2016-06-27T03:29:23.346286Z".ToDateTime()
            };
            expected.Resource.Reviewers.Add(
                new GitReviewer
                {
                    Vote = 0,
                    Id = "2ea2d095-48f9-4cd6-9966-62f6f574096c",
                    DisplayName = "[Mobile]\\Mobile Team",
                    UniqueName = "vstfs:///Classification/TeamProject/f0811a3b-8c8a-4e43-a3bf-9a049b4835bd\\Mobile Team",
                    Url = new Uri("https://fabrikam.vssps.visualstudio.com/_apis/Identities/2ea2d095-48f9-4cd6-9966-62f6f574096c"),
                    ImageUrl = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=2ea2d095-48f9-4cd6-9966-62f6f574096c"),
                    IsContainer = true
                });
            expected.Resource.Commits.Add(
                new GitCommit
                {
                    CommitId = "53d54ac915144006c2c9e90d2c7d3880920db49c",
                    Url = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/53d54ac915144006c2c9e90d2c7d3880920db49c")
                });

            // Actual
            var actual = data.ToObject<GitPullRequestUpdatedPayload>();

            // Assert
            string expectedJson = JsonConvert.SerializeObject(expected);
            string actualJson = JsonConvert.SerializeObject(actual);
            Assert.Equal(expectedJson, actualJson);
        }
 public override Task ExecuteAsync(WebHookHandlerContext context, GitPullRequestUpdatedPayload payload)
 {
     return(_updatedPullRequestHandler.Handle(payload));
 }
 public async Task Handle(GitPullRequestUpdatedPayload pullRequest)
 {
 }
Beispiel #11
0
        public void GitPullRequestUpdatedPayload_Roundtrips()
        {
            JObject data     = EmbeddedResource.ReadAsJObject("Microsoft.AspNet.WebHooks.Messages.git.pullrequest.updated.json");
            var     expected = new GitPullRequestUpdatedPayload()
            {
                SubscriptionId = "00000000-0000-0000-0000-000000000000",
                NotificationId = 2,
                Id             = "af07be1b-f3ad-44c8-a7f1-c4835f2df06b",
                EventType      = "git.pullrequest.updated",
                PublisherId    = "tfs",
                Message        = new PayloadMessage
                {
                    Text     = "Jamal Hartnett marked the pull request as completed",
                    Html     = "Jamal Hartnett marked the pull request as completed",
                    Markdown = "Jamal Hartnett marked the pull request as completed"
                },
                DetailedMessage = new PayloadMessage
                {
                    Text     = "Jamal Hartnett marked the pull request as completed\r\n\r\n- Merge status: Succeeded\r\n- Merge commit: eef717(https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72)\r\n",
                    Html     = "Jamal Hartnett marked the pull request as completed\r\n<ul>\r\n<li>Merge status: Succeeded</li>\r\n<li>Merge commit: <a href=\"https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72\">eef717</a></li>\r\n</ul>",
                    Markdown = "Jamal Hartnett marked the pull request as completed\r\n\r\n+ Merge status: Succeeded\r\n+ Merge commit: [eef717](https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72)\r\n"
                },
                Resource = new GitPullRequestUpdatedResource
                {
                    Repository = new GitRepository
                    {
                        Id      = "4bc14d40-c903-45e2-872e-0462c7748079",
                        Name    = "Fabrikam",
                        Url     = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079"),
                        Project = new GitProject
                        {
                            Id    = "6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c",
                            Name  = "Fabrikam",
                            Url   = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c"),
                            State = "wellFormed"
                        },
                        DefaultBranch = "refs/heads/main",
                        RemoteUrl     = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_git/Fabrikam")
                    },
                    PullRequestId = 1,
                    Status        = "completed",
                    CreatedBy     = new GitUser()
                    {
                        Id          = "54d125f7-69f7-4191-904f-c5b96b6261c8",
                        DisplayName = "Jamal Hartnett",
                        UniqueName  = "*****@*****.**",
                        Url         = new Uri("https://fabrikam.vssps.visualstudio.com/_apis/Identities/54d125f7-69f7-4191-904f-c5b96b6261c8"),
                        ImageUrl    = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=54d125f7-69f7-4191-904f-c5b96b6261c8")
                    },
                    CreationDate          = "2014-06-17T16:55:46.589889Z".ToDateTime(),
                    ClosedDate            = "2014-06-30T18:59:12.3660573Z".ToDateTime(),
                    Title                 = "my first pull request",
                    Description           = " - test2\r\n",
                    SourceRefName         = "refs/heads/mytopic",
                    TargetRefName         = "refs/heads/main",
                    MergeStatus           = "succeeded",
                    MergeId               = "a10bb228-6ba6-4362-abd7-49ea21333dbd",
                    LastMergeSourceCommit = new GitMergeCommit
                    {
                        CommitId = "53d54ac915144006c2c9e90d2c7d3880920db49c",
                        Url      = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/53d54ac915144006c2c9e90d2c7d3880920db49c")
                    },
                    LastMergeTargetCommit = new GitMergeCommit
                    {
                        CommitId = "a511f535b1ea495ee0c903badb68fbc83772c882",
                        Url      = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/a511f535b1ea495ee0c903badb68fbc83772c882")
                    },
                    LastMergeCommit = new GitMergeCommit
                    {
                        CommitId = "eef717f69257a6333f221566c1c987dc94cc0d72",
                        Url      = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72")
                    },
                    Url = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/pullRequests/1")
                },
                CreatedDate = "2016-06-27T03:29:23.346286Z".ToDateTime()
            };

            expected.Resource.Reviewers.Add(
                new GitReviewer
            {
                Vote        = 0,
                Id          = "2ea2d095-48f9-4cd6-9966-62f6f574096c",
                DisplayName = "[Mobile]\\Mobile Team",
                UniqueName  = "vstfs:///Classification/TeamProject/f0811a3b-8c8a-4e43-a3bf-9a049b4835bd\\Mobile Team",
                Url         = new Uri("https://fabrikam.vssps.visualstudio.com/_apis/Identities/2ea2d095-48f9-4cd6-9966-62f6f574096c"),
                ImageUrl    = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=2ea2d095-48f9-4cd6-9966-62f6f574096c"),
                IsContainer = true
            });
            expected.Resource.Commits.Add(
                new GitCommit
            {
                CommitId = "53d54ac915144006c2c9e90d2c7d3880920db49c",
                Url      = new Uri("https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/53d54ac915144006c2c9e90d2c7d3880920db49c")
            });

            // Actual
            var actual = data.ToObject <GitPullRequestUpdatedPayload>();

            // Assert
            string expectedJson = JsonConvert.SerializeObject(expected);
            string actualJson   = JsonConvert.SerializeObject(actual);

            Assert.Equal(expectedJson, actualJson);
        }