Skip to content

Commit 7a28324

Browse files
authored
Merge pull request #74 from travis-ci/ak-prepare-bot-user
Replace bot sender with Travis CI bot user
2 parents 06d40ba + 87cccce commit 7a28324

File tree

5 files changed

+229
-16
lines changed

5 files changed

+229
-16
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
.Gemfile*
22
config/travis.yml
33
log
4+
.history

lib/travis/listener/app.rb

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ class App < Sinatra::Base
4646
post '/' do
4747
report_memory_usage
4848
report_ip_validity
49+
replace_bot_sender
50+
4951
if !ip_validation? || valid_ip?
5052
if valid_request?
5153
dispatch_event
@@ -71,6 +73,19 @@ def ip_validation?
7173
(Travis.config.listener && Travis.config.listener.ip_validation)
7274
end
7375

76+
def replace_bot_sender
77+
return unless payload && decoded_payload.dig('sender', 'type')&.downcase == 'bot'
78+
79+
payload_data = JSON.parse(payload)
80+
payload_data['sender']= {
81+
type: 'User',
82+
github_id: 0,
83+
vcs_id: '0',
84+
login: 'bot'
85+
}
86+
params[:payload] = JSON.dump(payload_data)
87+
end
88+
7489
def report_ip_validity
7590
if valid_ip?
7691
Metriks.meter('listener.ip.valid').mark
@@ -132,7 +147,7 @@ def accepted_event_excluding_checks?
132147
# we ignore the tag events because we also receive individual
133148
# tag created events.
134149
def rerequested_check?
135-
checks_event? &&
150+
checks_event? &&
136151
decoded_payload['action'] == 'rerequested' &&
137152
!tag_created_check_suite?
138153
end

lib/travis/listener/schemas.rb

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ module Schemas
2020
},
2121
"sender" => {
2222
"id" => nil,
23-
"login" => nil
23+
"login" => nil,
24+
"type" => nil
2425
}
2526
}
2627

@@ -50,7 +51,8 @@ module Schemas
5051
},
5152
"sender" => {
5253
"id" => nil,
53-
"login" => nil
54+
"login" => nil,
55+
"type" => nil
5456
}
5557
}
5658

@@ -136,22 +138,24 @@ def self.event_details(event_type, payload)
136138
case event_type
137139
when 'pull_request'
138140
{
139-
repository: payload["repository"]["full_name"],
140-
number: payload['number'],
141-
action: payload['action'],
142-
source: payload['pull_request']['head']['repo'] && payload['pull_request']['head']['repo']['full_name'],
143-
head: payload['pull_request']['head']['sha'][0..6],
144-
ref: payload['pull_request']['head']['ref'],
145-
user: payload['pull_request']['head']['user']['login'],
146-
sender: payload['sender']['login']
141+
repository: payload["repository"]["full_name"],
142+
number: payload['number'],
143+
action: payload['action'],
144+
source: payload['pull_request']['head']['repo'] && payload['pull_request']['head']['repo']['full_name'],
145+
head: payload['pull_request']['head']['sha'][0..6],
146+
ref: payload['pull_request']['head']['ref'],
147+
user: payload['pull_request']['head']['user']['login'],
148+
sender: payload['sender']['login'],
149+
sender_type: payload['sender']['type']
147150
}
148151
when 'push'
149152
{
150-
repository: payload["repository"]["full_name"],
151-
ref: payload['ref'],
152-
head: payload['head_commit'] && payload['head_commit']['id'][0..6],
153-
commits: (payload["commits"] || []).map {|c| c['id'][0..6]}.join(","),
154-
sender: payload['sender']['login']
153+
repository: payload["repository"]["full_name"],
154+
ref: payload['ref'],
155+
head: payload['head_commit'] && payload['head_commit']['id'][0..6],
156+
commits: (payload["commits"] || []).map {|c| c['id'][0..6]}.join(","),
157+
sender: payload['sender']['login'],
158+
sender_type: payload['sender']['type']
155159
}
156160
when 'check_suite'
157161
{

spec/payloads/bot_push.json

Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
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": "josh.kalderimis@gmail.com",
21+
"username": "joshk"
22+
},
23+
"committer": {
24+
"name": "GitHub",
25+
"email": "noreply@github.com",
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": "josh.kalderimis@gmail.com",
49+
"username": "joshk"
50+
},
51+
"committer": {
52+
"name": "GitHub",
53+
"email": "noreply@github.com",
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": "josh.kalderimis@gmail.com",
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": "git@github.com: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": "josh.kalderimis@gmail.com"
164+
},
165+
"sender": {
166+
"login": "joshk",
167+
"id": 8701,
168+
"avatar_url": "https://avatars2.githubusercontent.com/u/8701?v=4",
169+
"gravatar_id": "",
170+
"url": "https://api.github.com/users/joshk",
171+
"html_url": "https://github.com/joshk",
172+
"followers_url": "https://api.github.com/users/joshk/followers",
173+
"following_url": "https://api.github.com/users/joshk/following{/other_user}",
174+
"gists_url": "https://api.github.com/users/joshk/gists{/gist_id}",
175+
"starred_url": "https://api.github.com/users/joshk/starred{/owner}{/repo}",
176+
"subscriptions_url": "https://api.github.com/users/joshk/subscriptions",
177+
"organizations_url": "https://api.github.com/users/joshk/orgs",
178+
"repos_url": "https://api.github.com/users/joshk/repos",
179+
"events_url": "https://api.github.com/users/joshk/events{/privacy}",
180+
"received_events_url": "https://api.github.com/users/joshk/received_events",
181+
"type": "Bot",
182+
"site_admin": false
183+
},
184+
"installation": {
185+
"id": 151888
186+
}
187+
}

spec/travis/events_spec.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,10 @@ def create(opts = {})
141141
.to have_received(:push)
142142
.with('sync', :gh_app_member, hash_including(type: event)) }
143143
end
144+
145+
describe 'a bot push' do
146+
let(:type) { 'bot_push' }
147+
let(:event) { 'push' }
148+
include_examples 'queues gatekeeper event'
149+
end
144150
end

0 commit comments

Comments
 (0)