Skip to content

Commit 47d3da4

Browse files
committed
Merge pull request MariaDB#19 from mozilla/try-extender
Support add new jobs in Treeherder
2 parents bff142b + 643814c commit 47d3da4

File tree

6 files changed

+104
-3
lines changed

6 files changed

+104
-3
lines changed

Procfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
worker1: python pulse_actions/worker.py --topic-base backfilling --dry-run
2-
worker2: python pulse_actions/worker.py --topic-base resultset_actions,manual_backfill
2+
worker2: python pulse_actions/worker.py --topic-base resultset_actions,manual_backfill,runnable
33

pulse_actions/handlers/config.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import pulse_actions.handlers.treeherder_buildbot as treeherder_buildbot
22
import pulse_actions.handlers.treeherder_resultset as treeherder_resultset
3+
import pulse_actions.handlers.treeherder_runnable as treeherder_runnable
34
import pulse_actions.handlers.backfilling as backfilling
45

56

@@ -16,6 +17,12 @@
1617
"exchange/treeherder-stage/v1/resultset-actions": {
1718
"resultset_actions-stage": treeherder_resultset.on_resultset_action_stage_event
1819
},
20+
"exchange/treeherder/v1/resultset-runnable-job-actions": {
21+
"runnable": treeherder_runnable.on_runnable_job_prod_event
22+
},
23+
"exchange/treeherder-stage/v1/resultset-runnable-job-actions": {
24+
"runnable-stage": treeherder_runnable.on_runnable_job_stage_event
25+
},
1926
"exchange/build/normalized": {
2027
"backfilling": backfilling.on_event
2128
}

pulse_actions/handlers/route_functions.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import pulse_actions.handlers.treeherder_buildbot as treeherder_buildbot
22
import pulse_actions.handlers.treeherder_resultset as treeherder_resultset
3+
import pulse_actions.handlers.treeherder_runnable as treeherder_runnable
4+
5+
36
import logging
47

58
LOG = logging.getLogger()
@@ -8,6 +11,8 @@
811
def route(data, message, dry_run):
912
if 'job_id' in data:
1013
treeherder_buildbot.on_buildbot_event(data, message, dry_run)
14+
elif 'buildernames' in data:
15+
treeherder_runnable.on_runnable_job_prod_event(data, message, dry_run)
1116
elif 'resultset_id' in data:
1217
treeherder_resultset.on_resultset_action_event(data, message, dry_run)
1318
else:
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import logging
2+
3+
from mozci.ci_manager import TaskClusterBuildbotManager
4+
from mozci.sources import buildjson, buildbot_bridge
5+
from mozci import query_jobs
6+
from thclient import TreeherderClient
7+
from pulse_actions.publisher import MessageHandler
8+
9+
logging.basicConfig(format='%(levelname)s:\t %(message)s')
10+
LOG = logging.getLogger()
11+
MEMORY_SAVING_MODE = True
12+
13+
14+
def on_runnable_job_stage_event(data, message, dry_run):
15+
return on_runnable_job_event(data, message, dry_run, stage=True)
16+
17+
18+
def on_runnable_job_prod_event(data, message, dry_run):
19+
return on_runnable_job_event(data, message, dry_run, stage=False)
20+
21+
22+
def on_runnable_job_event(data, message, dry_run, stage):
23+
# Cleaning mozci caches
24+
buildjson.BUILDS_CACHE = {}
25+
query_jobs.JOBS_CACHE = {}
26+
repo_name = data["project"]
27+
requester = data["requester"]
28+
resultset_id = data["resultset_id"]
29+
buildernames = data["buildernames"]
30+
31+
if stage:
32+
treeherder_client = TreeherderClient(host='treeherder.allizom.org')
33+
else:
34+
treeherder_client = TreeherderClient()
35+
36+
mgr = TaskClusterBuildbotManager()
37+
38+
LOG.info("New jobs requested by %s on repo_name %s with resultset_id: %s" %
39+
(data["requester"], data["project"], data["resultset_id"]))
40+
resultset = treeherder_client.get_resultsets(repo_name, id=resultset_id)[0]
41+
revision = resultset["revision"]
42+
author = resultset["author"]
43+
status = None
44+
45+
message_sender = MessageHandler()
46+
# Everyone can press the button, but only authorized users can trigger jobs
47+
# TODO: remove this when proper LDAP identication is set up on TH
48+
if author != requester and not requester.endswith('@mozilla.com'):
49+
message.ack()
50+
51+
# We publish a message saying we will not trigger the job
52+
pulse_message = {
53+
'resultset_id': resultset_id,
54+
'requester': requester,
55+
'status': "Could not determine if the user is authorized, nothing was triggered."}
56+
routing_key = '{}.{}'.format(repo_name, 'runnable')
57+
message_sender.publish_message(pulse_message, routing_key)
58+
59+
raise Exception("Requester %s is not allowed to trigger jobs." %
60+
requester)
61+
62+
builders_graph = buildbot_bridge.buildbot_graph_builder(buildernames, revision)
63+
mgr.schedule_graph(
64+
repo_name=repo_name,
65+
revision=revision,
66+
builders_graph=builders_graph,
67+
dry_run=dry_run)
68+
69+
# Send a pulse message showing what we did
70+
message_sender = MessageHandler()
71+
pulse_message = {
72+
'resultset_id': resultset_id,
73+
'graph': builders_graph,
74+
'requester': requester,
75+
'status': status}
76+
routing_key = '{}.{}'.format(repo_name, 'runnable')
77+
message_sender.publish_message(pulse_message, routing_key)
78+
79+
# We need to ack the message to remove it from our queue
80+
message.ack()

pulse_actions/run_time_config.json

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,17 @@
1515
"exchange": "exchange/treeherder-stage/v1/resultset-actions",
1616
"topic": "#.#"
1717
},
18-
"backfilling":{
18+
"backfilling": {
1919
"exchange": "exchange/build/normalized",
2020
"topic": "unittest.mozilla-inbound.#"
21+
},
22+
"runnable": {
23+
"exchange": "exchange/treeherder/v1/resultset-runnable-job-actions",
24+
"topic": "#"
25+
},
26+
"runnable-stage": {
27+
"exchange": "exchange/treeherder-stage/v1/resultset-runnable-job-actions",
28+
"topic": "#"
2129
}
30+
2231
}

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ httplib2==0.9.2
66
ijson==2.2
77
keyring==5.4
88
kombu==3.0.26
9-
mozci==0.18.0
9+
mozci==0.21.0
1010
MozillaPulse==1.2.2
1111
oauth2==1.9.0.post1
1212
progressbar==2.3

0 commit comments

Comments
 (0)