Skip to content

Commit 5a342d7

Browse files
committed
Pull user login/name from pusher field when sender is nil
Some payloads come in that are missing a `sender` field for one reason or another, but they do seem to have a `pusher` field, which has a `name` field that is the same as the ['sender']['login'] value.
1 parent 411dc19 commit 5a342d7

File tree

4 files changed

+207
-5
lines changed

4 files changed

+207
-5
lines changed

lib/travis/listener/app.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ def event_details
179179
rescue => e
180180
error("Error logging payload: #{e.message}")
181181
error("Payload causing error: #{decoded_payload}")
182+
error("Original payload causing error: #{payload}")
182183
Raven.capture_exception(e)
183184
{}
184185
end

lib/travis/listener/schemas.rb

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ module Schemas
1818
},
1919
"private" => nil
2020
},
21+
"pusher" => {
22+
"name" => nil,
23+
},
2124
"sender" => {
2225
"id" => nil,
2326
"login" => nil
@@ -48,6 +51,9 @@ module Schemas
4851
},
4952
"private" => nil
5053
},
54+
"pusher" => {
55+
"name" => nil,
56+
},
5157
"sender" => {
5258
"id" => nil,
5359
"login" => nil
@@ -62,6 +68,9 @@ module Schemas
6268
"login" => nil
6369
}
6470
},
71+
"pusher" => {
72+
"name" => nil,
73+
},
6574
"sender" => {
6675
"login" => nil
6776
}
@@ -78,6 +87,9 @@ module Schemas
7887
},
7988
"private" => nil
8089
},
90+
"pusher" => {
91+
"name" => nil,
92+
},
8193
"sender" => {
8294
"id" => nil,
8395
"login" => nil
@@ -106,6 +118,9 @@ module Schemas
106118
}
107119

108120
FALLBACK = {
121+
"pusher" => {
122+
"name" => nil,
123+
},
109124
"sender" => {
110125
"id" => nil,
111126
"login" => nil
@@ -123,32 +138,44 @@ def self.event_details(event_type, payload)
123138
head: payload['pull_request']['head']['sha'][0..6],
124139
ref: payload['pull_request']['head']['ref'],
125140
user: payload['pull_request']['head']['user']['login'],
126-
sender: payload['sender']['login']
141+
sender: parse_sender_from(payload)
127142
}
128143
when 'push'
129144
{
130145
repository: payload["repository"]["full_name"],
131146
ref: payload['ref'],
132147
head: payload['head_commit'] && payload['head_commit']['id'][0..6],
133-
commits: (payload["commits"] || []).map {|c| c['id'][0..6]}.join(","),
134-
sender: payload['sender']['login']
148+
commits: (payload["commits"] || []).map {|c| c['id'][0..6]}.join(","),
149+
sender: parse_sender_from(payload)
135150
}
136151
when 'create', 'delete', 'repository', 'check_run', 'check_suite'
137152
{
138153
action: payload['action'],
139154
repository: payload["repository"]["full_name"],
140-
sender: payload['sender']['login']
155+
sender: parse_sender_from(payload)
141156
}
142157
when 'installation', 'installation_repositories'
143158
{
144159
action: payload['action'],
145160
installation: payload["installation"]["account"]["login"],
146-
sender: payload['sender']['login']
161+
sender: parse_sender_from(payload)
147162
}
148163
else
149164
{ }
150165
end
151166
end
167+
168+
# Some payloads come in that are missing a `sender` field for one reason
169+
# or another, but they do seem to have a `pusher` field, which has a
170+
# `name` field that is the same as the ['sender']['login'] value.
171+
#
172+
def self.parse_sender_from(payload)
173+
if payload['sender']
174+
payload['sender']['login']
175+
else
176+
payload['pusher']['name']
177+
end
178+
end
152179
end
153180
end
154181
end
Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
{
2+
"ref": "refs/heads/master",
3+
"before": "f968cca6b2a1cc561424ad3b93d63438b0d7a9d8",
4+
"after": "902ac3c7552760b548e8d1d0f9e4fbfd3a3ea5a5",
5+
"created": false,
6+
"deleted": false,
7+
"forced": false,
8+
"base_ref": null,
9+
"compare": "https://github.com/joshk/sportsmaps.co.nz/compare/f968cca6b2a1...902ac3c75527",
10+
"commits": [
11+
{
12+
"id": "902ac3c7552760b548e8d1d0f9e4fbfd3a3ea5a5",
13+
"tree_id": "2a5e394af3e29803ffae0e45da1237bc4fb76e9c",
14+
"distinct": true,
15+
"message": "moar ###",
16+
"timestamp": "2018-05-03T18:49:57-07:00",
17+
"url": "https://github.com/joshk/sportsmaps.co.nz/commit/902ac3c7552760b548e8d1d0f9e4fbfd3a3ea5a5",
18+
"author": {
19+
"name": "Josh Kalderimis",
20+
"email": "[email protected]",
21+
"username": "joshk"
22+
},
23+
"committer": {
24+
"name": "GitHub",
25+
"email": "[email protected]",
26+
"username": "web-flow"
27+
},
28+
"added": [
29+
30+
],
31+
"removed": [
32+
33+
],
34+
"modified": [
35+
"README.textile"
36+
]
37+
}
38+
],
39+
"head_commit": {
40+
"id": "902ac3c7552760b548e8d1d0f9e4fbfd3a3ea5a5",
41+
"tree_id": "2a5e394af3e29803ffae0e45da1237bc4fb76e9c",
42+
"distinct": true,
43+
"message": "moar ###",
44+
"timestamp": "2018-05-03T18:49:57-07:00",
45+
"url": "https://github.com/joshk/sportsmaps.co.nz/commit/902ac3c7552760b548e8d1d0f9e4fbfd3a3ea5a5",
46+
"author": {
47+
"name": "Josh Kalderimis",
48+
"email": "[email protected]",
49+
"username": "joshk"
50+
},
51+
"committer": {
52+
"name": "GitHub",
53+
"email": "[email protected]",
54+
"username": "web-flow"
55+
},
56+
"added": [
57+
58+
],
59+
"removed": [
60+
61+
],
62+
"modified": [
63+
"README.textile"
64+
]
65+
},
66+
"repository": {
67+
"id": 149532,
68+
"name": "sportsmaps.co.nz",
69+
"full_name": "joshk/sportsmaps.co.nz",
70+
"owner": {
71+
"name": "joshk",
72+
"email": "[email protected]",
73+
"login": "joshk",
74+
"id": 8701,
75+
"avatar_url": "https://avatars2.githubusercontent.com/u/8701?v=4",
76+
"gravatar_id": "",
77+
"url": "https://api.github.com/users/joshk",
78+
"html_url": "https://github.com/joshk",
79+
"followers_url": "https://api.github.com/users/joshk/followers",
80+
"following_url": "https://api.github.com/users/joshk/following{/other_user}",
81+
"gists_url": "https://api.github.com/users/joshk/gists{/gist_id}",
82+
"starred_url": "https://api.github.com/users/joshk/starred{/owner}{/repo}",
83+
"subscriptions_url": "https://api.github.com/users/joshk/subscriptions",
84+
"organizations_url": "https://api.github.com/users/joshk/orgs",
85+
"repos_url": "https://api.github.com/users/joshk/repos",
86+
"events_url": "https://api.github.com/users/joshk/events{/privacy}",
87+
"received_events_url": "https://api.github.com/users/joshk/received_events",
88+
"type": "User",
89+
"site_admin": false
90+
},
91+
"private": true,
92+
"html_url": "https://github.com/joshk/sportsmaps.co.nz",
93+
"description": "SportsMaps central repo",
94+
"fork": false,
95+
"url": "https://github.com/joshk/sportsmaps.co.nz",
96+
"forks_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/forks",
97+
"keys_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/keys{/key_id}",
98+
"collaborators_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/collaborators{/collaborator}",
99+
"teams_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/teams",
100+
"hooks_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/hooks",
101+
"issue_events_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/issues/events{/number}",
102+
"events_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/events",
103+
"assignees_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/assignees{/user}",
104+
"branches_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/branches{/branch}",
105+
"tags_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/tags",
106+
"blobs_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/git/blobs{/sha}",
107+
"git_tags_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/git/tags{/sha}",
108+
"git_refs_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/git/refs{/sha}",
109+
"trees_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/git/trees{/sha}",
110+
"statuses_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/statuses/{sha}",
111+
"languages_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/languages",
112+
"stargazers_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/stargazers",
113+
"contributors_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/contributors",
114+
"subscribers_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/subscribers",
115+
"subscription_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/subscription",
116+
"commits_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/commits{/sha}",
117+
"git_commits_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/git/commits{/sha}",
118+
"comments_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/comments{/number}",
119+
"issue_comment_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/issues/comments{/number}",
120+
"contents_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/contents/{+path}",
121+
"compare_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/compare/{base}...{head}",
122+
"merges_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/merges",
123+
"archive_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/{archive_format}{/ref}",
124+
"downloads_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/downloads",
125+
"issues_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/issues{/number}",
126+
"pulls_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/pulls{/number}",
127+
"milestones_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/milestones{/number}",
128+
"notifications_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/notifications{?since,all,participating}",
129+
"labels_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/labels{/name}",
130+
"releases_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/releases{/id}",
131+
"deployments_url": "https://api.github.com/repos/joshk/sportsmaps.co.nz/deployments",
132+
"created_at": 1236890990,
133+
"updated_at": "2015-05-21T23:06:01Z",
134+
"pushed_at": 1525398598,
135+
"git_url": "git://github.com/joshk/sportsmaps.co.nz.git",
136+
"ssh_url": "[email protected]:joshk/sportsmaps.co.nz.git",
137+
"clone_url": "https://github.com/joshk/sportsmaps.co.nz.git",
138+
"svn_url": "https://github.com/joshk/sportsmaps.co.nz",
139+
"homepage": "www.sportsmaps.co.nz",
140+
"size": 6724,
141+
"stargazers_count": 2,
142+
"watchers_count": 2,
143+
"language": "Ruby",
144+
"has_issues": true,
145+
"has_projects": true,
146+
"has_downloads": true,
147+
"has_wiki": true,
148+
"has_pages": false,
149+
"forks_count": 0,
150+
"mirror_url": null,
151+
"archived": false,
152+
"open_issues_count": 0,
153+
"license": null,
154+
"forks": 0,
155+
"open_issues": 0,
156+
"watchers": 2,
157+
"default_branch": "master",
158+
"stargazers": 2,
159+
"master_branch": "master"
160+
},
161+
"pusher": {
162+
"name": "joshk",
163+
"email": "[email protected]"
164+
},
165+
"installation": {
166+
"id": 151888
167+
}
168+
}

spec/travis/events_spec.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ def create(opts = {})
3636
include_examples 'queues gatekeeper event'
3737
end
3838

39+
describe 'a push event missing the `sender` field in the payload' do
40+
let(:type) { 'push_without_sender' }
41+
let(:event) { 'push' }
42+
include_examples 'queues gatekeeper event'
43+
end
44+
3945
describe 'a pull_request event' do
4046
let(:type) { 'pull_request' }
4147
let(:event) { 'pull_request' }

0 commit comments

Comments
 (0)