From 0914e4006fff925ebf844d55c052cc069eb9852b Mon Sep 17 00:00:00 2001 From: James Strachan Date: Thu, 4 Jul 2019 06:25:19 +0100 Subject: [PATCH 1/2] ignore IDEA / Goland files --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index cbc620eda..baac26cd1 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ *.out _*.md .vscode -cmd \ No newline at end of file +.idea +cmd From 616f5b8710cfc8be773e9d18b14bc3ed42b1a3d0 Mon Sep 17 00:00:00 2001 From: James Strachan Date: Thu, 4 Jul 2019 06:26:28 +0100 Subject: [PATCH 2/2] add support for github pull request comment webhook parsing --- .../github/testdata/webhooks/pr_comment.json | 438 ++++++++++++++++++ .../testdata/webhooks/pr_comment.json.golden | 53 +++ scm/driver/github/webhook.go | 66 ++- scm/driver/github/webhook_test.go | 7 + 4 files changed, 563 insertions(+), 1 deletion(-) create mode 100644 scm/driver/github/testdata/webhooks/pr_comment.json create mode 100644 scm/driver/github/testdata/webhooks/pr_comment.json.golden diff --git a/scm/driver/github/testdata/webhooks/pr_comment.json b/scm/driver/github/testdata/webhooks/pr_comment.json new file mode 100644 index 000000000..7e5fd2967 --- /dev/null +++ b/scm/driver/github/testdata/webhooks/pr_comment.json @@ -0,0 +1,438 @@ +{ + "action": "", + "number": 1, + "pull_request": { + "url": "https://api.github.com/repos/bradrydzewski/drone-test-go/pulls/1", + "id": 196867822, + "node_id": "MDExOlB1bGxSZXF1ZXN0MTk2ODY3ODIy", + "html_url": "https://github.com/bradrydzewski/drone-test-go/pull/1", + "diff_url": "https://github.com/bradrydzewski/drone-test-go/pull/1.diff", + "patch_url": "https://github.com/bradrydzewski/drone-test-go/pull/1.patch", + "issue_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/issues/1", + "number": 1, + "state": "open", + "locked": false, + "title": "Update .drone.yml", + "user": { + "login": "bradrydzewski", + "id": 817538, + "node_id": "MDQ6VXNlcjgxNzUzOA==", + "avatar_url": "https://avatars1.githubusercontent.com/u/817538?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bradrydzewski", + "html_url": "https://github.com/bradrydzewski", + "followers_url": "https://api.github.com/users/bradrydzewski/followers", + "following_url": "https://api.github.com/users/bradrydzewski/following{/other_user}", + "gists_url": "https://api.github.com/users/bradrydzewski/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bradrydzewski/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bradrydzewski/subscriptions", + "organizations_url": "https://api.github.com/users/bradrydzewski/orgs", + "repos_url": "https://api.github.com/users/bradrydzewski/repos", + "events_url": "https://api.github.com/users/bradrydzewski/events{/privacy}", + "received_events_url": "https://api.github.com/users/bradrydzewski/received_events", + "type": "User", + "site_admin": false + }, + "body": "", + "created_at": "2018-06-22T23:54:09Z", + "updated_at": "2018-06-22T23:54:09Z", + "closed_at": null, + "merged_at": null, + "merge_commit_sha": null, + "assignee": null, + "assignees": [ + ], + "requested_reviewers": [ + ], + "requested_teams": [ + ], + "labels": [ + ], + "milestone": null, + "commits_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/pulls/1/commits", + "review_comments_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/pulls/1/comments", + "review_comment_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/pulls/comments{/number}", + "comments_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/issues/1/comments", + "statuses_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/statuses/d2b75aa7797ec26b088fa2dd527e9d2c052fcedd", + "head": { + "label": "bradrydzewski:master", + "ref": "master", + "sha": "d2b75aa7797ec26b088fa2dd527e9d2c052fcedd", + "user": { + "login": "bradrydzewski", + "id": 817538, + "node_id": "MDQ6VXNlcjgxNzUzOA==", + "avatar_url": "https://avatars1.githubusercontent.com/u/817538?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bradrydzewski", + "html_url": "https://github.com/bradrydzewski", + "followers_url": "https://api.github.com/users/bradrydzewski/followers", + "following_url": "https://api.github.com/users/bradrydzewski/following{/other_user}", + "gists_url": "https://api.github.com/users/bradrydzewski/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bradrydzewski/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bradrydzewski/subscriptions", + "organizations_url": "https://api.github.com/users/bradrydzewski/orgs", + "repos_url": "https://api.github.com/users/bradrydzewski/repos", + "events_url": "https://api.github.com/users/bradrydzewski/events{/privacy}", + "received_events_url": "https://api.github.com/users/bradrydzewski/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 13933572, + "node_id": "MDEwOlJlcG9zaXRvcnkxMzkzMzU3Mg==", + "name": "drone-test-go", + "full_name": "bradrydzewski/drone-test-go", + "owner": { + "login": "bradrydzewski", + "id": 817538, + "node_id": "MDQ6VXNlcjgxNzUzOA==", + "avatar_url": "https://avatars1.githubusercontent.com/u/817538?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bradrydzewski", + "html_url": "https://github.com/bradrydzewski", + "followers_url": "https://api.github.com/users/bradrydzewski/followers", + "following_url": "https://api.github.com/users/bradrydzewski/following{/other_user}", + "gists_url": "https://api.github.com/users/bradrydzewski/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bradrydzewski/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bradrydzewski/subscriptions", + "organizations_url": "https://api.github.com/users/bradrydzewski/orgs", + "repos_url": "https://api.github.com/users/bradrydzewski/repos", + "events_url": "https://api.github.com/users/bradrydzewski/events{/privacy}", + "received_events_url": "https://api.github.com/users/bradrydzewski/received_events", + "type": "User", + "site_admin": false + }, + "private": true, + "html_url": "https://github.com/bradrydzewski/drone-test-go", + "description": "test project written in Go", + "fork": true, + "url": "https://api.github.com/repos/bradrydzewski/drone-test-go", + "forks_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/forks", + "keys_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/teams", + "hooks_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/hooks", + "issue_events_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/issues/events{/number}", + "events_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/events", + "assignees_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/assignees{/user}", + "branches_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/branches{/branch}", + "tags_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/tags", + "blobs_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/languages", + "stargazers_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/stargazers", + "contributors_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/contributors", + "subscribers_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/subscribers", + "subscription_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/subscription", + "commits_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/contents/{+path}", + "compare_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/merges", + "archive_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/downloads", + "issues_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/issues{/number}", + "pulls_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/labels{/name}", + "releases_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/releases{/id}", + "deployments_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/deployments", + "created_at": "2013-10-28T17:48:56Z", + "updated_at": "2018-06-20T02:03:15Z", + "pushed_at": "2018-06-21T17:16:44Z", + "git_url": "git://github.com/bradrydzewski/drone-test-go.git", + "ssh_url": "git@github.com:bradrydzewski/drone-test-go.git", + "clone_url": "https://github.com/bradrydzewski/drone-test-go.git", + "svn_url": "https://github.com/bradrydzewski/drone-test-go", + "homepage": null, + "size": 64, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Go", + "has_issues": false, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "open_issues_count": 1, + "license": null, + "forks": 0, + "open_issues": 1, + "watchers": 0, + "default_branch": "master" + } + }, + "base": { + "label": "bradrydzewski:bradrydzewski-patch-1", + "ref": "bradrydzewski-patch-1", + "sha": "86378926c25f4b8310d3cc37f215eb6f25712850", + "user": { + "login": "bradrydzewski", + "id": 817538, + "node_id": "MDQ6VXNlcjgxNzUzOA==", + "avatar_url": "https://avatars1.githubusercontent.com/u/817538?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bradrydzewski", + "html_url": "https://github.com/bradrydzewski", + "followers_url": "https://api.github.com/users/bradrydzewski/followers", + "following_url": "https://api.github.com/users/bradrydzewski/following{/other_user}", + "gists_url": "https://api.github.com/users/bradrydzewski/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bradrydzewski/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bradrydzewski/subscriptions", + "organizations_url": "https://api.github.com/users/bradrydzewski/orgs", + "repos_url": "https://api.github.com/users/bradrydzewski/repos", + "events_url": "https://api.github.com/users/bradrydzewski/events{/privacy}", + "received_events_url": "https://api.github.com/users/bradrydzewski/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 13933572, + "node_id": "MDEwOlJlcG9zaXRvcnkxMzkzMzU3Mg==", + "name": "drone-test-go", + "full_name": "bradrydzewski/drone-test-go", + "owner": { + "login": "bradrydzewski", + "id": 817538, + "node_id": "MDQ6VXNlcjgxNzUzOA==", + "avatar_url": "https://avatars1.githubusercontent.com/u/817538?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bradrydzewski", + "html_url": "https://github.com/bradrydzewski", + "followers_url": "https://api.github.com/users/bradrydzewski/followers", + "following_url": "https://api.github.com/users/bradrydzewski/following{/other_user}", + "gists_url": "https://api.github.com/users/bradrydzewski/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bradrydzewski/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bradrydzewski/subscriptions", + "organizations_url": "https://api.github.com/users/bradrydzewski/orgs", + "repos_url": "https://api.github.com/users/bradrydzewski/repos", + "events_url": "https://api.github.com/users/bradrydzewski/events{/privacy}", + "received_events_url": "https://api.github.com/users/bradrydzewski/received_events", + "type": "User", + "site_admin": false + }, + "private": true, + "html_url": "https://github.com/bradrydzewski/drone-test-go", + "description": "test project written in Go", + "fork": true, + "url": "https://api.github.com/repos/bradrydzewski/drone-test-go", + "forks_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/forks", + "keys_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/teams", + "hooks_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/hooks", + "issue_events_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/issues/events{/number}", + "events_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/events", + "assignees_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/assignees{/user}", + "branches_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/branches{/branch}", + "tags_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/tags", + "blobs_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/languages", + "stargazers_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/stargazers", + "contributors_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/contributors", + "subscribers_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/subscribers", + "subscription_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/subscription", + "commits_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/contents/{+path}", + "compare_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/merges", + "archive_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/downloads", + "issues_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/issues{/number}", + "pulls_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/labels{/name}", + "releases_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/releases{/id}", + "deployments_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/deployments", + "created_at": "2013-10-28T17:48:56Z", + "updated_at": "2018-06-20T02:03:15Z", + "pushed_at": "2018-06-21T17:16:44Z", + "git_url": "git://github.com/bradrydzewski/drone-test-go.git", + "ssh_url": "git@github.com:bradrydzewski/drone-test-go.git", + "clone_url": "https://github.com/bradrydzewski/drone-test-go.git", + "svn_url": "https://github.com/bradrydzewski/drone-test-go", + "homepage": null, + "size": 64, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Go", + "has_issues": false, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "open_issues_count": 1, + "license": null, + "forks": 0, + "open_issues": 1, + "watchers": 0, + "default_branch": "master" + } + }, + "_links": { + "self": { + "href": "https://api.github.com/repos/bradrydzewski/drone-test-go/pulls/1" + }, + "html": { + "href": "https://github.com/bradrydzewski/drone-test-go/pull/1" + }, + "issue": { + "href": "https://api.github.com/repos/bradrydzewski/drone-test-go/issues/1" + }, + "comments": { + "href": "https://api.github.com/repos/bradrydzewski/drone-test-go/issues/1/comments" + }, + "review_comments": { + "href": "https://api.github.com/repos/bradrydzewski/drone-test-go/pulls/1/comments" + }, + "review_comment": { + "href": "https://api.github.com/repos/bradrydzewski/drone-test-go/pulls/comments{/number}" + }, + "commits": { + "href": "https://api.github.com/repos/bradrydzewski/drone-test-go/pulls/1/commits" + }, + "statuses": { + "href": "https://api.github.com/repos/bradrydzewski/drone-test-go/statuses/d2b75aa7797ec26b088fa2dd527e9d2c052fcedd" + } + }, + "author_association": "COLLABORATOR", + "merged": false, + "mergeable": null, + "rebaseable": null, + "mergeable_state": "unknown", + "merged_by": null, + "comments": 0, + "review_comments": 0, + "maintainer_can_modify": false, + "commits": 1, + "additions": 1, + "deletions": 4, + "changed_files": 1 + }, + "repository": { + "id": 13933572, + "node_id": "MDEwOlJlcG9zaXRvcnkxMzkzMzU3Mg==", + "name": "drone-test-go", + "full_name": "bradrydzewski/drone-test-go", + "owner": { + "login": "bradrydzewski", + "id": 817538, + "node_id": "MDQ6VXNlcjgxNzUzOA==", + "avatar_url": "https://avatars1.githubusercontent.com/u/817538?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bradrydzewski", + "html_url": "https://github.com/bradrydzewski", + "followers_url": "https://api.github.com/users/bradrydzewski/followers", + "following_url": "https://api.github.com/users/bradrydzewski/following{/other_user}", + "gists_url": "https://api.github.com/users/bradrydzewski/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bradrydzewski/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bradrydzewski/subscriptions", + "organizations_url": "https://api.github.com/users/bradrydzewski/orgs", + "repos_url": "https://api.github.com/users/bradrydzewski/repos", + "events_url": "https://api.github.com/users/bradrydzewski/events{/privacy}", + "received_events_url": "https://api.github.com/users/bradrydzewski/received_events", + "type": "User", + "site_admin": false + }, + "private": true, + "html_url": "https://github.com/bradrydzewski/drone-test-go", + "description": "test project written in Go", + "fork": true, + "url": "https://api.github.com/repos/bradrydzewski/drone-test-go", + "forks_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/forks", + "keys_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/teams", + "hooks_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/hooks", + "issue_events_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/issues/events{/number}", + "events_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/events", + "assignees_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/assignees{/user}", + "branches_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/branches{/branch}", + "tags_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/tags", + "blobs_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/languages", + "stargazers_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/stargazers", + "contributors_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/contributors", + "subscribers_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/subscribers", + "subscription_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/subscription", + "commits_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/contents/{+path}", + "compare_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/merges", + "archive_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/downloads", + "issues_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/issues{/number}", + "pulls_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/labels{/name}", + "releases_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/releases{/id}", + "deployments_url": "https://api.github.com/repos/bradrydzewski/drone-test-go/deployments", + "created_at": "2013-10-28T17:48:56Z", + "updated_at": "2018-06-20T02:03:15Z", + "pushed_at": "2018-06-21T17:16:44Z", + "git_url": "git://github.com/bradrydzewski/drone-test-go.git", + "ssh_url": "git@github.com:bradrydzewski/drone-test-go.git", + "clone_url": "https://github.com/bradrydzewski/drone-test-go.git", + "svn_url": "https://github.com/bradrydzewski/drone-test-go", + "homepage": null, + "size": 64, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Go", + "has_issues": false, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "open_issues_count": 1, + "license": null, + "forks": 0, + "open_issues": 1, + "watchers": 0, + "default_branch": "master" + }, + "comment": { + "id": 123456, + "pull_request_review_id": 78910, + "user": { + "login": "bradrydzewski", + "id": 817538, + "avatar_url": "https://avatars1.githubusercontent.com/u/817538?v=4", + "name": "Brad" + }, + "path": "my path", + "body": "this is my comment text" + } +} \ No newline at end of file diff --git a/scm/driver/github/testdata/webhooks/pr_comment.json.golden b/scm/driver/github/testdata/webhooks/pr_comment.json.golden new file mode 100644 index 000000000..aafa7dc0c --- /dev/null +++ b/scm/driver/github/testdata/webhooks/pr_comment.json.golden @@ -0,0 +1,53 @@ +{ + "Action": "", + "Repo": { + "ID": "13933572", + "Namespace": "bradrydzewski", + "Name": "drone-test-go", + "Perm": null, + "Branch": "master", + "Private": true, + "Clone": "https://github.com/bradrydzewski/drone-test-go.git", + "CloneSSH": "git@github.com:bradrydzewski/drone-test-go.git", + "Link": "https://github.com/bradrydzewski/drone-test-go", + "Created": "0001-01-01T00:00:00Z", + "Updated": "0001-01-01T00:00:00Z" + }, + "PullRequest": { + "Number": 1, + "Title": "Update .drone.yml", + "Body": "", + "Sha": "d2b75aa7797ec26b088fa2dd527e9d2c052fcedd", + "Ref": "refs/pull/1/head", + "Source": "master", + "Target": "bradrydzewski-patch-1", + "Fork": "bradrydzewski/drone-test-go", + "Link": "https://github.com/bradrydzewski/drone-test-go/pull/1.diff", + "Closed": false, + "Merged": false, + "Author": { + "Login": "bradrydzewski", + "Name": "", + "Email": "", + "Avatar": "https://avatars1.githubusercontent.com/u/817538?v=4" + }, + "Created": "2018-06-22T23:54:09Z", + "Updated": "2018-06-22T23:54:09Z" + }, + "Comment": { + "ID": 123456, + "Author": { + "Login": "bradrydzewski", + "Name": "Brad", + "Email": "", + "Avatar": "https://avatars1.githubusercontent.com/u/817538?v=4" + }, + "Body": "this is my comment text" + }, + "Sender": { + "Login": "bradrydzewski", + "Name": "Brad", + "Email": "", + "Avatar": "https://avatars1.githubusercontent.com/u/817538?v=4" + } +} diff --git a/scm/driver/github/webhook.go b/scm/driver/github/webhook.go index 9cdbf53ba..3ccfca46c 100644 --- a/scm/driver/github/webhook.go +++ b/scm/driver/github/webhook.go @@ -11,6 +11,7 @@ import ( "io/ioutil" "net/http" "regexp" + "time" "github.com/drone/go-scm/scm" "github.com/drone/go-scm/scm/driver/internal/hmac" @@ -39,9 +40,10 @@ func (s *webhookService) Parse(req *http.Request, fn scm.SecretFunc) (scm.Webhoo hook, err = s.parseDeleteHook(data) case "pull_request": hook, err = s.parsePullRequestHook(data) + case "pull_request_review_comment": + hook, err = s.parsePullRequestReviewCommentHook(data) case "deployment": hook, err = s.parseDeploymentHook(data) - // case "pull_request_review_comment": // case "issues": // case "issue_comment": default: @@ -147,6 +149,16 @@ func (s *webhookService) parsePullRequestHook(data []byte) (scm.Webhook, error) return dst, nil } +func (s *webhookService) parsePullRequestReviewCommentHook(data []byte) (scm.Webhook, error) { + src := new(pullRequestReviewCommentHook) + err := json.Unmarshal(data, src) + if err != nil { + return nil, err + } + dst := convertPullRequestReviewCommentHook(src) + return dst, nil +} + // // native data structures // @@ -236,6 +248,29 @@ type ( Sender user `json:"sender"` } + pullRequestReviewCommentHook struct { + // Action see https://developer.github.com/v3/activity/events/types/#pullrequestreviewcommentevent + Action string `json:"action"` + PullRequest pr `json:"pull_request"` + Repository repository `json:"repository"` + Comment reviewComment `json:"comment"` + } + + // reviewComment describes a Pull Request review comment + reviewComment struct { + ID int `json:"id"` + ReviewID int `json:"pull_request_review_id"` + User user `json:"user"` + Body string `json:"body"` + Path string `json:"path"` + HTMLURL string `json:"html_url"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + // Position will be nil if the code has changed such that the comment is no + // longer relevant. + Position *int `json:"position"` + } + // github deployment webhook payload deploymentHook struct { Deployment struct { @@ -356,6 +391,35 @@ func convertPullRequestHook(src *pullRequestHook) *scm.PullRequestHook { } } +func convertPullRequestReviewCommentHook(src *pullRequestReviewCommentHook) *scm.PullRequestCommentHook { + return &scm.PullRequestCommentHook{ + // Action Action + Repo: scm.Repository{ + ID: fmt.Sprint(src.Repository.ID), + Namespace: src.Repository.Owner.Login, + Name: src.Repository.Name, + Branch: src.Repository.DefaultBranch, + Private: src.Repository.Private, + Clone: src.Repository.CloneURL, + CloneSSH: src.Repository.SSHURL, + Link: src.Repository.HTMLURL, + }, + PullRequest: *convertPullRequest(&src.PullRequest), + Comment: *convertPullRequestComment(&src.Comment), + Sender: *convertUser(&src.Comment.User), + } +} + +func convertPullRequestComment(comment *reviewComment) *scm.Comment { + return &scm.Comment{ + ID: comment.ID, + Body: comment.Body, + Author: *convertUser(&comment.User), + Created: comment.CreatedAt, + Updated: comment.UpdatedAt, + } +} + func convertDeploymentHook(src *deploymentHook) *scm.DeployHook { dst := &scm.DeployHook{ Data: src.Deployment.Payload, diff --git a/scm/driver/github/webhook_test.go b/scm/driver/github/webhook_test.go index 136f2e0e5..d4dc172d2 100644 --- a/scm/driver/github/webhook_test.go +++ b/scm/driver/github/webhook_test.go @@ -156,6 +156,13 @@ func TestWebhooks(t *testing.T) { after: "testdata/webhooks/pr_unlabeled.json.golden", obj: new(scm.PullRequestHook), }, + // pull request comment + { + event: "pull_request_review_comment", + before: "testdata/webhooks/pr_comment.json", + after: "testdata/webhooks/pr_comment.json.golden", + obj: new(scm.PullRequestCommentHook), + }, // deployment { event: "deployment",