| # Copyright 2012 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # This is the buildmaster config file for the 'chromium.perf' bot. It must |
| # be installed as 'master.cfg' in your buildmaster's base directory |
| # (although the filename can be changed with the --basedir option to |
| # 'mktap buildbot master'). |
| |
| # It has one job: define a dictionary named BuildmasterConfig. This |
| # dictionary has a variety of keys to control different aspects of the |
| # buildmaster. They are documented in docs/config.xhtml . |
| |
| # This file follows this naming convention: |
| # Factories: f_cr_rel_[type] |
| # Builders: b_chromium_rel_[os]_[type] |
| # BuildDir: chromium-rel-[os]-[type] |
| # |
| # os = xp/vista/linux/mac |
| # type = perf |
| |
| from buildbot.scheduler import Scheduler |
| |
| from master import gitiles_poller |
| from master import master_utils |
| from master import slaves_list |
| from master.factory import annotator_factory |
| from master.factory import remote_run_factory |
| |
| import config |
| import master_site_config |
| |
| ActiveMaster = master_site_config.ChromiumPerf |
| |
| |
| # This is the dictionary that the buildmaster pays attention to. We also use |
| # a shorter alias to save typing. |
| c = BuildmasterConfig = {} |
| |
| # 'slavePortnum' defines the TCP port to listen on. This must match the value |
| # configured into the buildslaves (with their --master option) |
| c['slavePortnum'] = ActiveMaster.slave_port |
| |
| # Enable compression for any stdio log file larger than 10 MB. |
| c['logCompressionLimit'] = 1024 * 1024 * 10 # 10 MB |
| |
| # Load the list of slaves. |
| slaves = slaves_list.SlavesList('slaves.cfg', 'ChromiumPerf') |
| |
| config.DatabaseSetup(c) |
| |
| def recipe_factory(recipe, **kwargs): |
| f_annotations = annotator_factory.AnnotatorFactory(ActiveMaster) |
| return f_annotations.BaseFactory(recipe=recipe, **kwargs) |
| |
| |
| def m_remote_run(recipe, **kwargs): |
| return remote_run_factory.RemoteRunFactory( |
| active_master=ActiveMaster, |
| repository='https://chromium.googlesource.com/chromium/tools/build.git', |
| recipe=recipe, |
| factory_properties={'path_config': 'kitchen'}, |
| **kwargs) |
| |
| |
| # ------------------------------------------------------------------------------ |
| # Change Sources. |
| |
| # Polls config.Master.trunk_url for changes |
| master_poller = gitiles_poller.GitilesPoller( |
| 'https://chromium.googlesource.com/chromium/src') |
| |
| c['change_source'] = [master_poller] |
| |
| # End Change Sources. |
| # ------------------------------------------------------------------------------ |
| |
| |
| # ---------------------------------------------------------------------------- |
| # Builders. |
| |
| # The 'builders' list defines the Builders. Each one is configured with a |
| # dictionary, using the following keys: |
| # name (required): the name used to describe this bilder |
| # builddir (required): which subdirectory to run the builder in |
| # factory (required): a BuildFactory to define how the build is run |
| # periodicBuildTime (optional): if set, force a build every N seconds |
| # category (optional): it is not used in the normal 'buildbot' meaning. It is |
| # used by gatekeeper to determine which steps it should |
| # look for to close the tree. |
| # |
| |
| |
| _category_index = enumerate( |
| ('builders', 'android', 'win', 'mac', 'linux')) |
| _category_index = {category: index + 1 for index, category in _category_index} |
| def _CategoryIndex(category): |
| return _category_index[category] |
| |
| |
| _builder_names = [] |
| def _AddBuilder(name, platform, recipe=None, timeout=None): |
| if platform == 'android': |
| factory = recipe_factory |
| recipe = recipe or 'android/builder' |
| else: |
| factory = m_remote_run |
| recipe = recipe or 'chromium' |
| |
| factory_kwargs = dict( |
| recipe=recipe, |
| ) |
| if timeout: |
| factory_kwargs['timeout'] = timeout |
| |
| c['builders'].append({ |
| 'name': name, |
| 'factory': factory(**factory_kwargs), |
| 'category': |
| '%d%s|%s' % (_CategoryIndex('builders'), 'builders', platform), |
| 'mergeRequests': False, |
| }) |
| |
| _builder_names.append(name) |
| |
| |
| def _AddTester(name, platform): |
| c['builders'].append({ |
| 'name': name, |
| 'factory': m_remote_run('chromium'), |
| 'category': '%d%s|testers' % (_CategoryIndex(platform), platform), |
| }) |
| |
| |
| c['builders'] = [] |
| |
| |
| _AddBuilder('Android Builder Perf', 'android') |
| _AddBuilder('Android arm64 Builder Perf', 'android') |
| _AddBuilder('Android Compile Perf', 'android', recipe='chromium') |
| _AddBuilder('Android arm64 Compile Perf', 'android', recipe='chromium') |
| _AddBuilder('Win Builder Perf', 'win', timeout=3600) |
| # TODO(dtu): decrease the timeout when https://crbug.com/617982 is fixed. |
| _AddBuilder('Win x64 Builder Perf', 'win', timeout=7200) |
| _AddBuilder('Mac Builder Perf', 'mac') |
| # TODO(krasin): decrease the timeout when https://crbug.com/569732 is fixed. |
| _AddBuilder('Linux Builder Perf', 'linux', timeout=4800) |
| |
| |
| # 32 bit android |
| _AddTester('android-nexus5x-perf', 'android') |
| _AddTester('Android Nexus5 Perf', 'android') |
| _AddTester('Android One Perf', 'android') |
| |
| |
| # Webview bots |
| _AddTester('Android Nexus5X WebView Perf', 'android') |
| _AddTester('Android Nexus6 WebView Perf', 'android') |
| |
| |
| # Windows Desktop bots |
| _AddTester('Win 10 High-DPI Perf', 'win') |
| _AddTester('win-10-perf', 'win') |
| _AddTester('Win 7 Perf', 'win') |
| _AddTester('Win 7 Nvidia GPU Perf', 'win') |
| |
| |
| # Mac Desktop bots |
| _AddTester('mac-10_12_laptop_low_end-perf', 'mac') |
| _AddTester('mac-10_13_laptop_high_end-perf', 'mac') |
| |
| |
| # Linux desktop bots |
| _AddTester('linux-perf', 'linux') |
| |
| # End Builders. |
| # ------------------------------------------------------------------------------ |
| |
| |
| # ------------------------------------------------------------------------------ |
| # Schedulers. |
| |
| ## configure the Schedulers |
| |
| c['schedulers'] = [ |
| Scheduler(name='chromium', |
| branch='master', |
| builderNames=_builder_names) |
| ] |
| |
| |
| # End Schedulers. |
| # ------------------------------------------------------------------------------ |
| |
| |
| ####### BUILDSLAVES |
| |
| # Associate the slaves to the manual builders. The configuration is in |
| # slaves.cfg. |
| for builder in c['builders']: |
| builder['slavenames'] = slaves.GetSlavesName(builder=builder['name']) |
| |
| # The 'slaves' list defines the set of allowable buildslaves. List all the |
| # slaves registered to a builder. Remove dupes. |
| c['slaves'] = master_utils.AutoSetupSlaves(c['builders'], |
| config.Master.GetBotPassword()) |
| master_utils.VerifySetup(c, slaves) |
| |
| |
| ####### STATUS TARGETS |
| |
| # the 'buildbotURL' string should point to the location where the buildbot's |
| # internal web server (usually the html.Waterfall page) is visible. This |
| # typically uses the port number set in the Waterfall 'status' entry, but |
| # with an externally-visible host name which the buildbot cannot figure out |
| # without some help. |
| |
| #Must come before AutoSetupMaster(). |
| c['buildbotURL'] = ActiveMaster.buildbot_url |
| |
| # Adds common status and tools to this master. |
| master_utils.AutoSetupMaster(c, ActiveMaster, |
| public_html='../master.chromium/public_html', |
| templates=['./templates', '../master.chromium/templates'], |
| tagComparator=master_poller.comparator, |
| enable_http_status_push=ActiveMaster.is_production_host) |
| |
| # The default is to keep 1000 builds and 500 log files. The log files from this |
| # master are very big, so keep fewer. |
| c['buildHorizon'] = 500 |
| c['logHorizon'] = 200 |
| |
| |
| ####### PROJECT IDENTITY |
| |
| # the 'projectName' string will be used to describe the project that this |
| # buildbot is working on. For example, it is used as the title of the |
| # waterfall HTML page. The 'projectURL' string will be used to provide a link |
| # from buildbot HTML pages to your project's home page. |
| |
| c['projectName'] = ActiveMaster.project_name |
| c['projectURL'] = config.Master.project_url |