Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(787)

Side by Side Diff: scripts/master/recipe_master_helper.py

Issue 74063005: Switched remaining GPU test bots to be pure testers, triggered by builders. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 from buildbot.scheduler import Scheduler
6 from buildbot.scheduler import Triggerable
7
8 import collections
9
10 # This file contains useful functions for masters whose slaves run recipes.
11
12 def AddSchedulersAndTriggers(buildmaster_config=None,
13 slave_list=None,
14 scheduler_name=None,
15 branch=None):
16 """Adds schedulers and triggers to the BuildmasterConfig based on
17 the contents of slaves.cfg, passed in as a slave_list.
18
19 This function relies on certain structure in the slaves.cfg, in
20 particular the custom 'triggered_by' property, which is not yet
21 commonly used to define triggers.
22
23 Returns a dictionary mapping builder name, for those builders which
24 invoke triggers, to the (synthesized) name of the trigger.
25
26 TODO(kbr): this function does not yet support builders with
27 multiple slaves behind them, but could be updated to do so.
28
29 Throws an Exception if a non-existent builder is mentioned in
30 another builder's 'triggered_by' property.
31
32 Arguments:
33
34 buildmaster_config: a BuildmasterConfig into which the
35 'schedulers' property will be defined.
36
37 slave_list: a SlavesList constructed from slaves.cfg.
38
39 scheduler_name: the name of the Scheduler for the polling (not
40 triggered) builders.
41 """
42 c = buildmaster_config
43 polling_builders = []
44 # Maps the parent builder to a set of the names of the builders it triggers.
45 trigger_map = collections.defaultdict(list)
46 # Maps the name of the parent builder to the (synthesized) name of its
47 # trigger, wrapped in a list.
48 trigger_name_map = {}
49 next_group_id = 0
50 for slave in slave_list.slaves:
51 builder = slave['builder']
52 parent_builder = slave.get('triggered_by')
53 if parent_builder is not None:
54 if slave_list.GetSlave(builder=parent_builder) is None:
55 raise Exception('Could not find parent builder %s for builder %s' %
56 (parent_builder, builder))
57 trigger_map[parent_builder].append(builder)
58 if parent_builder not in trigger_name_map:
59 trigger_name_map[parent_builder] = 'trigger_group_%d' % next_group_id
60 next_group_id += 1
61 else:
62 polling_builders.append(builder)
63 s_gpu = Scheduler(name=scheduler_name,
64 branch=branch,
65 treeStableTimer=60,
66 builderNames=polling_builders)
67 c['schedulers'] = [s_gpu]
68 for name, builders in trigger_map.iteritems():
69 c['schedulers'].append(Triggerable(name=trigger_name_map[name],
70 builderNames=builders))
71 return trigger_name_map
72
73 def AddRecipeBasedBuilders(buildmaster_config=None,
74 slave_list=None,
75 annotator=None,
76 trigger_name_map=None):
77 """Writes builders which use recipes to the BuildmasterConfig's
78 'builders' list, using the AnnotatorFactory's BaseFactory.
79 Specifies some common factory properties for these builders.
80
81 Arguments:
82
83 buildmaster_config: a BuildmasterConfig into which the
84 'builders' property will be defined.
85
86 slave_list: a SlavesList constructed from slaves.cfg.
87
88 annotator: an AnnotatorFactory instance.
89
90 trigger_name_map: the trigger name map returned by
91 AddSchedulersAndTriggers, above.
92 """
93 builders = []
94 for slave in slave_list.slaves:
95 if 'recipe' in slave:
96 factory_properties = {
97 'test_results_server': 'test-results.appspot.com',
98 'generate_gtest_json': True,
99 'build_config': slave['build_config']
100 }
101 if 'perf_id' in slave:
102 factory_properties['show_perf_results'] = True
103 factory_properties['perf_id'] = slave['perf_id']
104 name = slave['builder']
105 builders.append({
106 'name': name,
107 'factory': annotator.BaseFactory(
108 slave['recipe'],
109 factory_properties,
110 [trigger_name_map[name]] if name in trigger_name_map else None)
111 })
112 buildmaster_config['builders'] = builders
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698