Skip to content

Commit 411dc19

Browse files
authored
Merge pull request #44 from travis-ci/kerrizor/enqueue-member-events
Enqueue incoming Github MemberEvents for github-sync
2 parents 8c96b7d + 61aec6c commit 411dc19

File tree

5 files changed

+177
-8
lines changed

5 files changed

+177
-8
lines changed

lib/travis/listener/app.rb

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,16 @@ class App < Sinatra::Base
1717

1818
# https://developer.github.com/v3/activity/events/types
1919
set :events, %w[
20-
push
21-
pull_request
20+
check_run
21+
check_suite
2222
create
2323
delete
24-
repository
2524
installation
2625
installation_repositories
27-
check_run
28-
check_suite
26+
member
27+
pull_request
28+
push
29+
repository
2930
]
3031

3132
before do
@@ -104,6 +105,8 @@ def dispatch_event
104105
Travis::Sidekiq::GithubSync.gh_app_install(data)
105106
when 'installation_repositories'
106107
Travis::Sidekiq::GithubSync.gh_app_repos(data)
108+
when 'member'
109+
Travis::Sidekiq::GithubSync.gh_app_member(data)
107110
else
108111
Travis::Sidekiq::Gatekeeper.push(Travis.config.gator.queue, data)
109112
end
@@ -182,7 +185,7 @@ def event_details
182185

183186
def decoded_payload
184187
@decoded_payload ||= begin
185-
schema =
188+
schema =
186189
case event_type
187190
when 'push'
188191
Schemas::PUSH
@@ -192,6 +195,8 @@ def decoded_payload
192195
Schemas::INSTALLATION
193196
when 'create', 'delete', 'repository', 'check_run', 'check_suite'
194197
Schemas::REPOSITORY
198+
when 'member'
199+
Schemas::MEMBER
195200
else
196201
Schemas::FALLBACK
197202
end

lib/travis/listener/schemas.rb

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ module Schemas
5959
"installation" => {
6060
"id" => nil,
6161
"account" => {
62-
"login" => nil
62+
"login" => nil
6363
}
6464
},
6565
"sender" => {
@@ -84,6 +84,27 @@ module Schemas
8484
}
8585
}
8686

87+
# For MemberEvents
88+
# (https://developer.github.com/v3/activity/events/types/#memberevent)
89+
#
90+
MEMBER = {
91+
"action" => nil,
92+
"member" => {
93+
"login" => nil,
94+
"id" => nil,
95+
},
96+
"changes" => {
97+
"permission" => {
98+
"from" => nil,
99+
}
100+
},
101+
"repository" => {
102+
"id" => nil,
103+
"name" => nil,
104+
"full_name" => nil,
105+
},
106+
}
107+
87108
FALLBACK = {
88109
"sender" => {
89110
"id" => nil,
@@ -130,4 +151,4 @@ def self.event_details(event_type, payload)
130151
end
131152
end
132153
end
133-
end
154+
end

lib/travis/sidekiq.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ def self.gh_app_repos(data)
3232
push('sync.gh_apps', :gh_app_repos, data)
3333
end
3434

35+
def self.gh_app_member(data)
36+
Metriks.meter('listener.event.gh_apps_member').mark
37+
38+
push('sync.gh_apps', :gh_app_member, data)
39+
end
40+
3541
def self.client
3642
@@client ||= ::Sidekiq::Client.new(
3743
::Sidekiq::RedisConnection.create(Travis.config.redis.to_h)

spec/payloads/member.json

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
{
2+
"action": "added",
3+
"member": {
4+
"login": "octocat",
5+
"id": 583231,
6+
"avatar_url": "https://avatars.githubusercontent.com/u/583231?v=3",
7+
"gravatar_id": "",
8+
"url": "https://api.github.com/users/octocat",
9+
"html_url": "https://github.com/octocat",
10+
"followers_url": "https://api.github.com/users/octocat/followers",
11+
"following_url": "https://api.github.com/users/octocat/following{/other_user}",
12+
"gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
13+
"starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
14+
"subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
15+
"organizations_url": "https://api.github.com/users/octocat/orgs",
16+
"repos_url": "https://api.github.com/users/octocat/repos",
17+
"events_url": "https://api.github.com/users/octocat/events{/privacy}",
18+
"received_events_url": "https://api.github.com/users/octocat/received_events",
19+
"type": "User",
20+
"site_admin": false
21+
},
22+
"repository": {
23+
"id": 35129377,
24+
"name": "public-repo",
25+
"full_name": "baxterthehacker/public-repo",
26+
"owner": {
27+
"login": "baxterthehacker",
28+
"id": 6752317,
29+
"avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
30+
"gravatar_id": "",
31+
"url": "https://api.github.com/users/baxterthehacker",
32+
"html_url": "https://github.com/baxterthehacker",
33+
"followers_url": "https://api.github.com/users/baxterthehacker/followers",
34+
"following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
35+
"gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
36+
"starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
37+
"subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
38+
"organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
39+
"repos_url": "https://api.github.com/users/baxterthehacker/repos",
40+
"events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
41+
"received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
42+
"type": "User",
43+
"site_admin": false
44+
},
45+
"private": false,
46+
"html_url": "https://github.com/baxterthehacker/public-repo",
47+
"description": "",
48+
"fork": false,
49+
"url": "https://api.github.com/repos/baxterthehacker/public-repo",
50+
"forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
51+
"keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
52+
"collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
53+
"teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
54+
"hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
55+
"issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
56+
"events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
57+
"assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
58+
"branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
59+
"tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
60+
"blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
61+
"git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
62+
"git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
63+
"trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
64+
"statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
65+
"languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
66+
"stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
67+
"contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
68+
"subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
69+
"subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
70+
"commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
71+
"git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
72+
"comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
73+
"issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
74+
"contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
75+
"compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
76+
"merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
77+
"archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
78+
"downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
79+
"issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
80+
"pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
81+
"milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
82+
"notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
83+
"labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
84+
"releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
85+
"created_at": "2015-05-05T23:40:12Z",
86+
"updated_at": "2015-05-05T23:40:30Z",
87+
"pushed_at": "2015-05-05T23:40:40Z",
88+
"git_url": "git://github.com/baxterthehacker/public-repo.git",
89+
"ssh_url": "[email protected]:baxterthehacker/public-repo.git",
90+
"clone_url": "https://github.com/baxterthehacker/public-repo.git",
91+
"svn_url": "https://github.com/baxterthehacker/public-repo",
92+
"homepage": null,
93+
"size": 0,
94+
"stargazers_count": 0,
95+
"watchers_count": 0,
96+
"language": null,
97+
"has_issues": true,
98+
"has_downloads": true,
99+
"has_wiki": true,
100+
"has_pages": true,
101+
"forks_count": 0,
102+
"mirror_url": null,
103+
"open_issues_count": 2,
104+
"forks": 0,
105+
"open_issues": 2,
106+
"watchers": 0,
107+
"default_branch": "master"
108+
},
109+
"sender": {
110+
"login": "baxterthehacker",
111+
"id": 6752317,
112+
"avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
113+
"gravatar_id": "",
114+
"url": "https://api.github.com/users/baxterthehacker",
115+
"html_url": "https://github.com/baxterthehacker",
116+
"followers_url": "https://api.github.com/users/baxterthehacker/followers",
117+
"following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
118+
"gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
119+
"starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
120+
"subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
121+
"organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
122+
"repos_url": "https://api.github.com/users/baxterthehacker/repos",
123+
"events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
124+
"received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
125+
"type": "User",
126+
"site_admin": false
127+
}
128+
}

spec/travis/events_spec.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,4 +121,13 @@ def create(opts = {})
121121
.to have_received(:push)
122122
.with('sync.gh_apps', :gh_app_repos, hash_including(type: event)) }
123123
end
124+
125+
describe 'a member event' do
126+
let(:type) { 'member' }
127+
let(:event) { 'member' }
128+
129+
it { expect(gh_sync_queue)
130+
.to have_received(:push)
131+
.with('sync.gh_apps', :gh_app_member, hash_including(type: event)) }
132+
end
124133
end

0 commit comments

Comments
 (0)