blob: 68bc2b7591f89acdbf53ab64ada62423cde12c6c [file] [log] [blame]
# -*- python -*-
# ex: set syntax=python:
# Copyright (c) 2014 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' 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.process.properties import WithProperties
from buildbot.scheduler import Scheduler
from buildbot.scheduler import Triggerable
from common import chromium_utils
from master import chromium_notifier
from master import gitiles_poller
from master import master_config
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.ChromiumPerfFyi
# Enable MAIL_NOTIFIER in production to send alerts.
MAIL_NOTIFIER = ActiveMaster.is_production_host
# 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
# Disable compression for the stdio files.
c['logCompressionLimit'] = False
# Load the list of slaves.
slaves = slaves_list.SlavesList('slaves.cfg', 'ChromiumPerfFyi')
config.DatabaseSetup(c)
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.
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
# Schedulers.
## configure the Schedulers
# "FYI" is part of the Win builder name to avoid overwriting the main perf
# waterfall's Win builds. It should be removed once this builder is migrated to
# chromium.perf.
s_chromium = Scheduler(name='chromium',
branch='master',
treeStableTimer=60,
builderNames=['Win Builder FYI', 'Win Clang Builder',
'Android Builder FYI'])
s_chromium_win_clang_trigger = Triggerable('win_clang',
['Win Clang Perf'])
s_chromium_win_clang_ref_trigger = Triggerable('win_clang_ref',
['Win Clang Perf Ref'])
c['schedulers'] = [s_chromium,
s_chromium_win_clang_trigger,
s_chromium_win_clang_ref_trigger,
]
# End Schedulers.
# ------------------------------------------------------------------------------
c['builders'] = []
# ----------------------------------------------------------------------------
# BUILDER DEFINITIONS
# 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.
#
# 1. Builders
c['builders'].append({
'name': 'Android Builder FYI',
'factory': m_remote_run('chromium'),
'category': '1android|builder',
'triggered': True,
})
# 2. Android
c['builders'].append({
'name': 'Android Power Nexus 5X Perf',
'factory': m_remote_run('chromium'),
'category': '2android|builder_testers',
})
# 3. Windows
c['builders'].append({'name': 'Win Builder FYI',
'factory': m_remote_run('chromium', triggers=['win_clang_ref']),
'category': '3windows|builders',
})
c['builders'].append({'name': 'Win 10 Low-End Perf Tests',
'factory': m_remote_run('chromium'),
'category': '3windows|builder_testers',
})
c['builders'].append({'name': 'Win 10 4 Core Low-End Perf Tests',
'factory': m_remote_run('chromium'),
'category': '3windows|builder_testers',
})
c['builders'].append({'name': 'Win 7 Intel GPU Perf (Xeon)',
'factory': m_remote_run('chromium'),
'category': '3windows|builder_testers',
})
c['builders'].append({'name': 'Win Power High-DPI Perf',
'factory': m_remote_run('chromium'),
'category': '3windows|builder_testers',
})
# 4. Mac
c['builders'].append({'name': 'Mac Power Dual-GPU Perf',
'factory': m_remote_run('chromium'),
'category': '4mac|builder_testers',
})
c['builders'].append({'name': 'Mac Power Low-End Perf',
'factory': m_remote_run('chromium'),
'category': '4mac|builder_testers',
})
c['builders'].append({'name': 'Mac Test Retina Perf',
'factory': m_remote_run('chromium'),
'category': '4mac|builder_testers',
})
# 5. Linux
# 6. Win Clang
c['builders'].append({
'name': 'Win Clang Builder',
'factory': m_remote_run('chromium', triggers=['win_clang']),
'category': '6win clang|builders',
})
c['builders'].append({
'name': 'Win Clang Perf',
'factory': m_remote_run('chromium'),
'category': '6win clang|builder_testers',
})
c['builders'].append({
'name': 'Win Clang Perf Ref',
'factory': m_remote_run('chromium'),
'category': '6win clang|builder_testers',
})
####### 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)
# Add more.
if MAIL_NOTIFIER:
c['status'].append(chromium_notifier.ChromiumNotifier(
fromaddr=ActiveMaster.from_address,
exclusions={},
relayhost=config.Master.smtp,
status_header='FYI Perf alert on "%(builder)s":\n%(steps)s',
subject='%(projectName)s %(builder)s %(result)s',
extraRecipients=[],
lookup=master_utils.FilterDomain(),
sheriffs=[''],
public_html='../master.chromium/public_html',
forgiving_steps=[],
use_getname=True))
####### 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
c['changeHorizon'] = 6000