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)); }
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"); } } }
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); }
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) { }
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); }