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

Side by Side Diff: masters/master.tryserver.chromiumos/master.cfg

Issue 8305010: Add ChromiumOS Trybot support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build/
Patch Set: '' Created 9 years, 2 months 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | masters/master.tryserver.chromiumos/slaves.cfg » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # -*- python -*- 1 # -*- python -*-
2 # ex: set syntax=python: 2 # ex: set syntax=python:
3 3
4 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 4 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
5 # Use of this source code is governed by a BSD-style license that can be 5 # Use of this source code is governed by a BSD-style license that can be
6 # found in the LICENSE file. 6 # found in the LICENSE file.
7 7
8 # This is the buildmaster config file for the 'chromeos' bot. It must 8 # These modules come from scripts/master, which must be in the PYTHONPATH.
9 # be installed as 'master.cfg' in your buildmaster's base directory 9 import master.cros_builder_mapping as cros_builder_mapping
10 # (although the filename can be changed with the --basedir option to 10 # Perform reload so a 'make reconfig' picks up changes to cros_builder_mapping
11 # 'mktap buildbot master'). 11 reload(cros_builder_mapping)
12 12
13 # It has one job: define a dictionary named BuildmasterConfig. This
14 # dictionary has a variety of keys to control different aspects of the
15 # buildmaster. They are documented in docs/config.xhtml .
16
17 from buildbot.changes import svnpoller
18 from buildbot.changes.pb import PBChangeSource
19 from buildbot.scheduler import Dependent
20 from buildbot.scheduler import Periodic
21 from buildbot.scheduler import Scheduler
22 from buildbot.scheduler import Triggerable
23
24 # These modules come from scripts/master, which must be in the PYTHONPATH.
25 from master import build_utils
26 from master import master_utils 13 from master import master_utils
27 from master import slaves_list 14 from master import slaves_list
15 from master.cros_builders_pools import CrOSBuildersPools
16 from master.cros_try_job_git import CrOSTryJobGit
28 from master.factory import chromeos_factory 17 from master.factory import chromeos_factory
29 18
30 # These modules come from scripts/common, which must be in the PYTHONPATH. 19 # These modules come from scripts/common, which must be in the PYTHONPATH.
31 import config 20 import config
32 21
33 ActiveMaster = config.Master.ChromiumOS 22 ActiveMaster = config.Master.ChromiumOSTryServer
34
35 TREE_GATE_KEEPER = ActiveMaster.is_production_host
36 GOOD_REVISIONS = False
37 23
38 # This is the dictionary that the buildmaster pays attention to. We also use 24 # This is the dictionary that the buildmaster pays attention to. We also use
39 # a shorter alias to save typing. 25 # a shorter alias to save typing.
40 c = BuildmasterConfig = {} 26 c = BuildmasterConfig = {}
41 27
42 # This is a dictionary that maps waterfall dashboard names to cbuildbot_configs. 28 ####### CHANGESOURCES
43 # In order to add a new dict, you must edit this first.
44 _NAME_CONFIG_DICT = {
45 'x86 generic PFQ': 'x86-generic-pre-flight-queue',
46 'x86 generic commit queue': 'x86-generic-commit-queue',
47 'arm generic PFQ': 'arm-generic-bin',
48 'tegra2 PFQ': 'arm-tegra2-bin',
49 'x86 generic full': 'x86-generic-full',
50 'arm generic full': 'arm-generic-full',
51 'tegra2 full': 'arm-tegra2-full',
52 'tegra2 seaboard full': 'arm-tegra2-seaboard-full',
53 'x86 pineview full': 'x86-pineview-full',
54 'x86 generic chrome PFQ': 'x86-generic-chrome-pre-flight-queue',
55 'arm generic chrome PFQ': 'arm-generic-chrome-pre-flight-queue',
56 'tegra2 chrome PFQ': 'arm-tegra2-chrome-pre-flight-queue',
57 'chromiumos sdk': 'chromiumos-sdk',
58 'refresh packages': 'refresh-packages',
59 'x86 generic ASAN': 'x86-generic-asan',
60 }
61 29
62 ####### CHANGESOURCES 30 c['change_source'] = []
63 def ChromeTreeFileSplitter(path):
64 """split_file for chrome tree changes; return None for uninteresting paths."""
65 # List of projects we are interested in. The project names must exactly
66 # match paths in the Subversion repository, relative to the 'path' URL
67 # argument. build_utils.SplitPath() will use them as branch names to
68 # kick off the Schedulers for different projects.
69 projects = ['releases']
70 return build_utils.SplitPath(projects, path)
71 31
32 ####### BUILDERS
72 33
73 chromium_rev = 'http://src.chromium.org/viewvc/chrome?view=rev&revision=%s' 34 c['builders'] = []
74 35 pools = CrOSBuildersPools(default_pool_name='ChromeOS',
75 chrome_trunk_poller = svnpoller.SVNPoller( 36 builder_mapping=cros_builder_mapping.CONFIG_NAME_DICT)
76 svnurl='svn://svn.chromium.org/chrome/',
77 split_file=ChromeTreeFileSplitter,
78 pollinterval=300,
79 revlinktmpl=chromium_rev)
80
81 pb_source = PBChangeSource()
82
83 c['change_source'] = [pb_source, chrome_trunk_poller]
84
85 _TOOLCHAIN_TARGETS = ['amd64-generic-full']
86 _TOOLCHAIN_TARGETS_CLOSER = ['arm-tegra2-seaboard-toolchain',
87 'x86-generic-gcc_46',
88 'arm-tegra2-seaboard-gcc_46']
89
90 ####### SCHEDULERS
91
92 ## configure the Schedulers
93
94 # Pre-flight scheduler for changes in Chromium OS. All other slaves are either
95 # triggered or depend on this scheduler.
96 # XXX: Changes to builderNames must also be made in:# - slaves.cfg
97 # - public_html/announce.html
98 # - And down below in the builder definitions as well
99 # - and you probably need to restart any changed slaves as well as the master
100 s_chromiumos_sdk = Scheduler(
101 name='sdk_scheduler',
102 # Renamed 'src' to 'master' for git_buildbot.py
103 branch='master',
104 treeStableTimer=0,
105 builderNames=[
106 'chromiumos sdk',
107 ])
108
109 s_refresh_packages = Periodic(
110 name='refresh_pkgs_scheduler',
111 branch='master',
112 periodicBuildTimer=24*60*60, # 1 day
113 builderNames=[
114 'refresh packages',
115 ])
116
117 s_cq = Periodic(
118 name='commit_queue_scheduler',
119 branch='master',
120 periodicBuildTimer=5*60, # 5 minutes
121 builderNames=[
122 'x86 generic commit queue',
123 ])
124
125 s_asan = Periodic(
126 name='x86_generic_asan_scheduler',
127 branch='master',
128 periodicBuildTimer=5*60, # 5 minutes
129 builderNames=[
130 'x86 generic ASAN',
131 ])
132
133 s_pre_flight_queue = Scheduler(
134 name='pre_flight_queue',
135 # Renamed 'src' to 'master' for git_buildbot.py
136 branch='master',
137 treeStableTimer=0,
138 builderNames=[
139 'x86 generic PFQ',
140 ])
141
142 # Pre-flight scheduler for deps changes of Chromium for Chromium OS.
143 s_chrome_pre_flight_queue = Scheduler(
144 name='chrome_pre_flight_queue',
145 branch='releases',
146 treeStableTimer=0,
147 builderNames=[
148 'x86 generic chrome PFQ',
149 ])
150
151 # Triggerable for chrome-pre-flight-queue-slaves. All chrome PFQ's should be
152 # triggered from master chrome pfq.
153 s_chrome_pre_flight_queue_slaves = Triggerable(
154 name='chrome_pre_flight_queue_slaves',
155 builderNames=[
156 'arm generic chrome PFQ',
157 'tegra2 chrome PFQ',
158 ])
159
160 # Triggerable for other pre-flight-queue slaves. We use triggers so that
161 # the other slaves are guaranteed to use the same sourcestamp as the main.
162 s_pre_flight_queue_slaves = Triggerable(
163 name='pre_flight_queue_slaves',
164 builderNames=[
165 'arm generic PFQ',
166 'tegra2 PFQ',
167 ])
168
169 # Only trigger fulls when we have a newly revved build.
170 s_chromeos_full = Dependent(
171 name='chromeos',
172 upstream=s_pre_flight_queue,
173 builderNames=[
174 'arm generic full',
175 'tegra2 full',
176 'tegra2 seaboard full',
177 'x86 generic full',
178 'x86 pineview full',
179 ] + _TOOLCHAIN_TARGETS)
180
181 c['schedulers'] = [
182 s_pre_flight_queue, s_pre_flight_queue_slaves,
183 s_chrome_pre_flight_queue, s_chrome_pre_flight_queue_slaves,
184 s_chromeos_full, s_chromiumos_sdk,
185 s_refresh_packages, s_cq, s_asan,
186 ]
187
188 BUILDERS = []
189 37
190 # ---------------------------------------------------------------------------- 38 # ----------------------------------------------------------------------------
191 # BUILDER DEFINITIONS 39 # BUILDER DEFINITIONS
192 40
193 # The 'builders' list defines the Builders. Each one is configured with a 41 # The 'builders' list defines the Builders. Each one is configured with a
194 # dictionary, using the following keys: 42 # dictionary, using the following keys:
195 # name (required): the name used to describe this bilder 43 # name (required): the name used to describe this bilder
196 # slavename (required): which slave to use, must appear in c['slaves'] 44 # slavename (required): which slave to use, must appear in c['slaves']
197 # builddir (required): which subdirectory to run the builder in 45 # builddir (required): which subdirectory to run the builder in
198 # factory (required): a BuildFactory to define how the build is run 46 # factory (required): a BuildFactory to define how the build is run
199 # category (optional): it is not used in the normal 'buildbot' meaning. It is 47 # category (optional): it is not used in the normal 'buildbot' meaning. It is
200 # used by gatekeeper to determine which steps it should 48 # used by gatekeeper to determine which steps it should
201 # look for to close the tree. 49 # look for to close the tree.
202 # 50 #
203 51
204 # Cros helper functions to build builders and factories. 52 # Cros helper functions to build builders and factories.
205 53
206 def GetCBuildbotFactory(config, is_master=False): 54 def GetCBuildbotFactory(config):
207 """Returns cros buildbot factories.""" 55 """Returns cros buildbot factories."""
208 return chromeos_factory.CbuildbotFactory( 56 return chromeos_factory.CbuildbotFactory(
209 params=config, dry_run=not ActiveMaster.is_production_host, 57 params=config, trybot=True, crostools_repo=None).get_factory()
210 crostools_repo=None,
211 is_master=is_master).get_factory()
212 58
213 def GetChromeCBuildbotFactory(config, is_master=False):
214 """Returns buildbot factories specifically for Chrome pfqs."""
215 return chromeos_factory.ChromeCbuildbotFactory(
216 params=config, chrome_rev_stages=[],
217 dry_run=not ActiveMaster.is_production_host,
218 crostools_repo=None,
219 is_master=is_master).get_factory()
220 59
221 def AddBuilderDefinition(display_name, closer=True, chrome_factory=False, 60 def AddBuilderDefinition(display_name):
222 is_master=False):
223 """Adds a builder definition given by the args. 61 """Adds a builder definition given by the args.
224 62
225 Args: 63 Args:
226 display_name: Name displayed on buildbot waterfall. 64 display_name: Name displayed on buildbot waterfall.
227 closer: Do we close the tree based on this build's failure.
228 chrome_factory: Use the chrome factory rather than normal factory.
229 is_master: One set per pfq type.
230 """ 65 """
231 def GetConfig(): 66 def GetConfig():
232 return _NAME_CONFIG_DICT.get(display_name, display_name) 67 return cros_builder_mapping.NAME_CONFIG_DICT.get(display_name, display_name)
233 68
234 category = '1release full|info' 69 c['builders'].append({
235 if closer: category = '1release full|closer'
236 build_dir = display_name.replace(' ', '-')
237 if chrome_factory:
238 factory = GetChromeCBuildbotFactory(GetConfig(), is_master)
239 else:
240 factory = GetCBuildbotFactory(GetConfig(), is_master)
241
242 BUILDERS.append({
243 'name': display_name, 70 'name': display_name,
244 'builddir': build_dir, 71 'builddir': display_name.replace(' ', '-'),
245 'factory': factory, 72 'factory': GetCBuildbotFactory(GetConfig()),
246 'category': category, 73 'category': '1release full|info',
247 }) 74 })
248 75
76 pools['ChromeOS'].append(display_name)
77
78
249 # Pre Flight Queues 79 # Pre Flight Queues
250 AddBuilderDefinition('x86 generic PFQ', is_master=True) 80 AddBuilderDefinition('x86 generic PFQ')
251 AddBuilderDefinition('arm generic PFQ') 81 AddBuilderDefinition('arm generic PFQ')
252 AddBuilderDefinition('tegra2 PFQ') 82 AddBuilderDefinition('tegra2 PFQ')
253 83
254 # Full Builders 84 # Full Builders
255 AddBuilderDefinition('x86 generic full') 85 AddBuilderDefinition('x86 generic full')
256 AddBuilderDefinition('arm generic full') 86 AddBuilderDefinition('arm generic full')
257 AddBuilderDefinition('tegra2 full') 87 AddBuilderDefinition('tegra2 full')
258 AddBuilderDefinition('tegra2 seaboard full') 88 AddBuilderDefinition('tegra2 seaboard full')
259 AddBuilderDefinition('x86 pineview full') 89 AddBuilderDefinition('x86 pineview full')
260 90
261 # Chrome pre-flight builds.
262 AddBuilderDefinition('x86 generic chrome PFQ', chrome_factory=True,
263 is_master=True)
264 AddBuilderDefinition('arm generic chrome PFQ', chrome_factory=True,)
265 AddBuilderDefinition('tegra2 chrome PFQ', chrome_factory=True,)
266
267 AddBuilderDefinition('chromiumos sdk',) 91 AddBuilderDefinition('chromiumos sdk',)
268 92
269 for builder in _TOOLCHAIN_TARGETS_CLOSER:
270 AddBuilderDefinition(builder, closer=True)
271
272 ####### Non Closer build defs.
273
274 AddBuilderDefinition('x86 generic commit queue', closer=False)
275 AddBuilderDefinition('refresh packages', closer=False)
276 AddBuilderDefinition('x86 generic ASAN', closer=False)
277
278 for builder in _TOOLCHAIN_TARGETS:
279 AddBuilderDefinition(builder, closer=False)
280
281 c['builders'] = BUILDERS
282
283
284 ####### BUILDSLAVES 93 ####### BUILDSLAVES
285 94
286 # the 'slaves' list defines the set of allowable buildslaves. Each element is a 95 # the 'slaves' list defines the set of allowable buildslaves. Each element is a
287 # tuple of bot-name and bot-password. These correspond to values given to the 96 # tuple of bot-name and bot-password. These correspond to values given to the
288 # buildslave's mktap invocation. 97 # buildslave's mktap invocation.
289 98
290 # First, load the list from slaves.cfg. 99 # First, load the list from slaves.cfg.
291 slaves = slaves_list.SlavesList('slaves.cfg', 'ChromiumOS') 100 slaves = slaves_list.SlavesList('slaves.cfg', 'ChromiumOSTryServer')
292 101
293 # Associate the slaves to the builders. 102 # Associate the slaves to the builders.
294 for builder in c['builders']: 103 for builder in c['builders']:
295 builder['slavenames'] = slaves.GetSlavesName(builder=builder['name']) 104 builder['slavenames'] = slaves.GetSlavesName(builder=builder['name'])
296 # Don't enable auto_reboot for people testing locally. 105 # Don't enable auto_reboot for people testing locally.
297 builder.setdefault('auto_reboot', ActiveMaster.is_production_host) 106 builder.setdefault('auto_reboot', ActiveMaster.is_production_host)
298 107
299 # The 'slaves' list defines the set of allowable buildslaves. List all the 108 # The 'slaves' list defines the set of allowable buildslaves. List all the
300 # slaves registered to a builder. Remove dupes. 109 # slaves registered to a builder. Remove dupes.
301 c['slaves'] = master_utils.AutoSetupSlaves(c['builders'], 110 c['slaves'] = master_utils.AutoSetupSlaves(c['builders'],
302 config.Master.GetBotPassword()) 111 config.Master.GetBotPassword())
303 112
113 ####### SCHEDULERS
114
115 c['schedulers'] = []
116
117 c['schedulers'].append(CrOSTryJobGit(
118 name='cros_try_job_git',
119 pools=pools,
120 repo_url=ActiveMaster.repo_url
121 ))
304 122
305 ####### STATUS TARGETS 123 ####### STATUS TARGETS
306 124
307 # Adds common status and tools to this master. 125 # Adds common status and tools to this master.
308 master_utils.AutoSetupMaster(c, ActiveMaster, order_console_by_time=True) 126 master_utils.AutoSetupMaster(c, ActiveMaster, order_console_by_time=True)
309 127
310 # Add more. 128 # Add a dumb MailNotifier first so it will be used for BuildSlave with
129 # notify_on_missing set when they go missing.
130 from buildbot.status import mail
131 c['status'].append(mail.MailNotifier(
132 fromaddr=ActiveMaster.from_address,
133 builders=[],
134 relayhost=config.Master.smtp,
135 lookup=master_utils.UsersAreEmails()))
311 136
312 if TREE_GATE_KEEPER: 137 # Try job result emails.
313 from master import gatekeeper 138 from master.try_mail_notifier import TryMailNotifier
314 # This is the list of the builder categories and the corresponding critical 139 c['status'].append(TryMailNotifier(
315 # steps. If one critical step fails, gatekeeper will close the tree 140 fromaddr=ActiveMaster.from_address,
316 # automatically. 141 subject="try %(result)s for %(reason)s on %(builder)s",
317 # Note: don't include 'update scripts' since we can't do much about it when 142 mode='all',
318 # it's failing and the tree is still technically fine. 143 relayhost=config.Master.smtp,
319 categories_steps = { 144 lookup=master_utils.UsersAreEmails()))
320 'closer': [
321 'update', 'configure build', 'setup mirrors', 'update chroot',
322 'setup board', 'build packages', 'run tests',
323 'build image', 'create qemu image', 'run smoke bvt', 'archived build',
324 'cbuildbot', 'cbuildbot_master', 'cbuildbot_chrome_latest_release',
325 ],
326 'info': [
327 ],
328 '': [
329 ],
330 }
331 exclusions = {}
332 # TODO: convert GateKeeper to 'use_getname=True'
333 # 1) set names for all steps in categories_steps
334 # 2) update categories_steps to use names insteads of description
335 # 3) change forgiving_steps to:
336 # forgiving_steps = ['update_scripts', 'update', 'archive_build']
337 # 4) add 'use_getname=True' to the GateKeeper call
338 forgiving_steps = ['update scripts', 'update', 'archived build']
339 c['status'].append(gatekeeper.GateKeeper(
340 fromaddr=ActiveMaster.from_address,
341 categories_steps=categories_steps,
342 exclusions=exclusions,
343 relayhost=config.Master.smtp,
344 subject='buildbot %(result)s in %(projectName)s on %(builder)s, '
345 'revision %(revision)s',
346 extraRecipients=ActiveMaster.tree_closing_notification_recipients,
347 lookup=master_utils.FilterDomain(),
348 forgiving_steps=forgiving_steps,
349 tree_status_url=ActiveMaster.tree_status_url,
350 check_revisions=False))
351
352 if GOOD_REVISIONS:
353 # TODO: update for ChromeOS
354 from master import goodrevisions
355 # This is the list of builders with their respective list of critical steps
356 # that all need to succeed to mark a revision as successful. A single failure
357 # in any of the steps of any of the builders will mark the revision as failed.
358 good_revision_steps = {
359 'XP Tests (dbg)(2)': ['unit_tests'],
360 'Mac10.5 Tests (dbg)(2)': ['unit_tests'],
361 'Chromium Linux': ['unit_tests'],
362 }
363 c['status'].append(goodrevisions.GoodRevisions(
364 good_revision_steps=good_revision_steps))
365
366
367 ####### TROOPER NAGGING
368 if ActiveMaster.is_production_host:
369 from master import chromium_notifier
370 categories_steps = {
371 'closer': [
372 'CleanUp', 'LKGMCandidateSync', 'Sync', 'Uprev', 'UploadPrebuilts',
373 'Archive', 'PublishUprevChanges'
374 ]
375 }
376
377 c['status'].append(chromium_notifier.ChromiumNotifier(
378 fromaddr=ActiveMaster.from_address,
379 categories_steps=categories_steps,
380 relayhost=config.Master.smtp,
381 status_header='%(steps)s failed on "%(builder)s"',
382 subject='buildbot trooper alert on %(builder)s (%(projectName)s)',
383 extraRecipients=['troopers@chromium.org'],
384 send_to_sheriffs=True,
385 lookup=master_utils.FilterDomain(),
386 use_getname=True))
387 145
388 146
389 ####### PROJECT IDENTITY 147 ####### PROJECT IDENTITY
390 148
391 # Buildbot master url: 149 # Buildbot master url:
392 c['buildbotURL'] = 'http://build.chromium.org/buildbot/chromiumos/' 150 c['buildbotURL'] = ''
OLDNEW
« no previous file with comments | « no previous file | masters/master.tryserver.chromiumos/slaves.cfg » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698