blob: 5c1bba2d2c393e0c4c69b2ba3c806a7930538ddb [file] [log] [blame]
# -*- python -*-
# ex: set syntax=python:
# Copyright (c) 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.
# 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 .
from buildbot.scheduler import Dependent
from buildbot.scheduler import Scheduler
from buildbot.schedulers import triggerable
from master import build_utils
from master import master_utils
from master import slaves_list
from master import status_logger
from master.factory import annotator_factory
from master.factory.dart import dart_factory
from master.factory.dart.dart_factory import (linux_env, windows_env,
linux_clang_env, linux_asan_env_32, linux_asan_env_64)
from master.factory.dart.channels import CHANNELS
from twisted.python import log
import config
import master_site_config
ActiveMaster = master_site_config.Dart
utils = dart_factory.DartUtils(ActiveMaster)
# Hack to increase timeout for steps, dart2js debug checked mode takes more
# than 8 hours.
utils.monkey_patch_remoteshell()
MASTER_HOST = ActiveMaster.master_host
WEB_STATUS = True
MAIL_NOTIFIER = ActiveMaster.is_production_host
GOOD_REVISIONS = 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 = {}
config.DatabaseSetup(c)
# '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
slaves = slaves_list.SlavesList('slaves.cfg', 'Dart')
annotator = annotator_factory.AnnotatorFactory()
def setup_channel(channel):
postfix = channel.builder_postfix
####### Variant definitions
# build-base-name, category, platform, builder, tester
# env are relative to the dart root directory.
def category(name):
return '%d%s%s|all' % (channel.position, name, channel.category_postfix)
variants = [
{
'name': 'dart-sdk-linux' + postfix,
'category': category('4dart-sdk'),
'platform': 'posix' + postfix,
'env': linux_env,
},
{
'name': 'dart-sdk-windows' + postfix,
'category': category('4dart-sdk'),
'platform': 'windows' + postfix,
'env': windows_env,
},
{
'name': 'dart-sdk-mac' + postfix,
'category': category('4dart-sdk'),
'platform': 'posix' + postfix,
},
{
'name': 'analyzer_experimental-linux-release' + postfix,
'category': category('30analyzer'),
'platform': 'posix' + postfix,
'mode': 'release',
'arch': 'ia32',
'env': linux_env,
},
{
'name': 'dart2js-dump-info' + postfix,
'category': category('2dart2js'),
'platform': 'posix' + postfix,
'env': linux_env,
},
{
'name': 'pub-mac' + postfix,
'category': category('94pub-pkg'),
'platform': 'posix' + postfix,
},
{
'name': 'pub-linux' + postfix,
'category': category('94pub-pkg'),
'platform': 'posix' + postfix,
'env': linux_env,
},
{
'name': 'pkg-mac' + postfix,
'category': category('94pub-pkg'),
'platform': 'posix' + postfix,
},
{
'name': 'pkg-linux' + postfix,
'category': category('94pub-pkg'),
'platform': 'posix' + postfix,
'env': linux_env,
},
{
'name': 'pkg-win' + postfix,
'category': category('94pub-pkg'),
'platform': 'windows' + postfix,
'env': windows_env,
'auto_reboot': True,
},
{
'name': 'version-checker' + postfix,
'category': category('99misc'),
'platform': 'posix' + postfix,
'env': linux_env,
},
{
'name': 'linux-distribution-support-debian_wheezy' + postfix,
'category': category('99misc'),
'platform': 'posix' + postfix,
},
]
# Only run ie 9 tests on stable channel
if channel.name == 'stable':
variants.append({
'name': 'dart2js-ie9-win7-all' + postfix,
'category': category('92dart2js-windows'),
'platform': 'windows' + postfix,
'env': windows_env,
})
# Add recipe-based dart builders and testers
variants_recipe_special_trigger = [
{
'name': 'target-arm-vm-linux-release' + postfix,
'category': category('1vm-misc'),
'factory_builder': annotator.BaseFactory(
recipe='dart/dart_cross_tester'),
'platform': 'posix' + postfix,
},
{
'name': 'dart2js-linux-drt-1-2' + postfix,
'category': category('8chrome'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart2js_nobuild'),
'platform': 'posix' + postfix,
},
{
'name': 'dart2js-linux-drt-2-2' + postfix,
'category': category('8chrome'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart2js_nobuild'),
'platform': 'posix' + postfix,
},
{
'name': 'dart2js-linux-drt-csp-minified' + postfix,
'category': category('8chrome'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart2js_nobuild'),
'platform': 'posix' + postfix,
},
{
'name': 'dart2js-win8-ie10' + postfix,
'category': category('91ie'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart2js_nobuild'),
'platform': 'windows' + postfix,
'builddir': 'w8-10' + postfix,
},
{
'name': 'dart2js-win8-ie11' + postfix,
'category': category('91ie'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart2js_nobuild'),
'platform': 'windows' + postfix,
'builddir': 'w8-11' + postfix,
},
{
'name': 'dart2js-mac10.11-safari-1-3' + postfix,
'builddir': '10.11-1' + postfix,
'category': category('90safari'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart2js_nobuild'),
'platform': 'posix' + postfix,
},
{
'name': 'dart2js-mac10.11-safari-2-3' + postfix,
'builddir': '10.11-2' + postfix,
'category': category('90safari'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart2js_nobuild'),
'platform': 'posix' + postfix,
},
{
'name': 'dart2js-mac10.11-safari-3-3' + postfix,
'builddir': '10.11-3' + postfix,
'category': category('90safari'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart2js_nobuild'),
'platform': 'posix' + postfix,
},
{
'name': 'dart2js-mac10.11-chrome' + postfix,
'builddir': '10.11-c' + postfix,
'category': category('8chrome'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart2js_nobuild'),
'platform': 'posix' + postfix,
},
{
'name': 'pkg-mac10.11-debug' + postfix,
'builddir': 'pmd' + postfix,
'category': category('94pub-pkg'),
'factory_builder': annotator.BaseFactory(recipe='dart/packages'),
'platform': 'posix' + postfix,
},
{
'name': 'pkg-linux-debug' + postfix,
'category': category('94pub-pkg'),
'platform': 'posix' + postfix,
'factory_builder': annotator.BaseFactory(recipe='dart/packages'),
'env': linux_env,
},
{
'name': 'pkg-win7-debug' + postfix,
'category': category('94pub-pkg'),
'platform': 'windows' + postfix,
'factory_builder': annotator.BaseFactory(recipe='dart/packages'),
'env': windows_env,
'auto_reboot': True,
},
{
'name': 'pkg-mac10.11-release' + postfix,
'builddir': 'pmr' + postfix,
'category': category('94pub-pkg'),
'factory_builder': annotator.BaseFactory(recipe='dart/packages'),
'platform': 'posix' + postfix,
},
{
'name': 'pkg-linux-release' + postfix,
'category': category('94pub-pkg'),
'platform': 'posix' + postfix,
'factory_builder': annotator.BaseFactory(recipe='dart/packages'),
'env': linux_env,
},
{
'name': 'pkg-win7-release' + postfix,
'category': category('94pub-pkg'),
'platform': 'windows' + postfix,
'factory_builder': annotator.BaseFactory(recipe='dart/packages'),
'env': windows_env,
'auto_reboot': True,
},
{
'name': 'analyzer-mac10.11-release' + postfix,
'builddir': 'azr' + postfix,
'category': category('30analyzer'),
'factory_builder': annotator.BaseFactory(recipe='dart/packages'),
'platform': 'posix' + postfix,
},
{
'name': 'analyzer-linux-release' + postfix,
'category': category('30analyzer'),
'platform': 'posix' + postfix,
'factory_builder': annotator.BaseFactory(recipe='dart/packages'),
'env': linux_env,
},
{
'name': 'analyzer-win7-release' + postfix,
'category': category('30analyzer'),
'platform': 'windows' + postfix,
'factory_builder': annotator.BaseFactory(recipe='dart/packages'),
'env': windows_env,
},
]
for shard in range(1,6):
variants_recipe_special_trigger.append({
'name': ('dart2js-linux-d8-hostchecked-%s-5' % shard) + postfix,
'category': category('20dart2js-d8-hostchecked'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart2js'),
'platform': 'posix' + postfix,
})
for shard in range(1,6):
variants_recipe_special_trigger.append({
'name': ('dart2js-linux-d8-minified-%s-5' % shard) + postfix,
'category': category('20dart2js-d8-minified'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart2js_nobuild'),
'platform': 'posix' + postfix,
})
for shard in range(1,5):
variants_recipe_special_trigger.append({
'name': ('dart2js-linux-jsshell-%s-4' % shard) + postfix,
'category': category('23dart2js-jsshell'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart2js_nobuild'),
'platform': 'posix' + postfix,
})
for shard in range(1,5):
variants_recipe_special_trigger.append({
'name': ('dart2js-linux-chromeff-%s-4' % shard) + postfix,
'category': category('7dart2js-linux'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart2js_nobuild'),
'platform': 'posix' + postfix,
})
for browser in ['win7-ie10chrome', 'win7-ie11ff']:
for shard in range(1,5):
builddir = '%s_%s' % ('ie11' if 'ie11' in browser else 'ie10', shard)
variants_recipe_special_trigger.append({
'name': ('dart2js-%s-%s-4' % (browser, shard)) + postfix,
'category': category('92dart2js-windows'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart2js_nobuild'),
'platform': 'windows' + postfix,
'builddir': builddir + postfix,
})
variants_vm_recipe = [
{
'name': 'vm-win-debug-ia32-russian' + postfix,
'category': category('1vm-misc'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart_vm'),
'platform': 'windows' + postfix,
},
{
'name': 'vm-linux-product-x64' + postfix,
'category': category('1vm-product'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart_vm'),
'platform': 'posix' + postfix,
},
{
'name': 'vm-win-product-x64' + postfix,
'category': category('1vm-product'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart_vm'),
'platform': 'windows' + postfix,
},
{
'name': 'vm-mac-product-x64' + postfix,
'category': category('1vm-product'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart_vm'),
'platform': 'posix' + postfix,
},
{
'name': 'vm-noopt-simarm-mac-1-2' + postfix,
'category': category('1vm-precomp'),
'factory_builder': annotator.BaseFactory(
recipe='dart/dart',
factory_properties={
'target_arch': 'simarm',
'build_targets': ['runtime_precompiled'],
'test_args': ['-cprecompiler', '-rdart_precompiled',
'--exclude-suite=pkg',
'--shard=1', '--shards=2']}),
'platform': 'posix' + postfix,
},
{
'name': 'vm-noopt-simarm-mac-2-2' + postfix,
'category': category('1vm-precomp'),
'factory_builder': annotator.BaseFactory(
recipe='dart/dart',
factory_properties={
'target_arch': 'simarm',
'build_targets': ['runtime_precompiled'],
'test_args': ['-cprecompiler', '-rdart_precompiled',
'--exclude-suite=pkg',
'--shard=2', '--shards=2']}),
'platform': 'posix' + postfix,
},
{
'name': 'vm-noopt-simarm64-mac' + postfix,
'category': category('1vm-precomp'),
'factory_builder': annotator.BaseFactory(
recipe='dart/dart',
factory_properties={
'target_arch': 'simarm64',
'build_targets': ['runtime_precompiled'],
'test_args': ['-cprecompiler', '-rdart_precompiled',
'--exclude-suite=pkg']}),
'platform': 'posix' + postfix,
},
{
'name': 'vm-precomp-android-release-1-3' + postfix,
'category': category('1vm-precomp'),
'factory_builder': annotator.BaseFactory(
recipe='dart/dart',
factory_properties={
'target_arch': 'arm',
'build_args': ['--os=android'],
'build_targets': ['runtime_precompiled'],
'test_args': ['-cprecompiler', '-rdart_precompiled',
'--exclude-suite=pkg',
'--system=android',
'--use-blobs',
'--shard=1',
'--shards=3']}),
'platform': 'posix' + postfix,
},
{
'name': 'vm-precomp-android-release-2-3' + postfix,
'category': category('1vm-precomp'),
'factory_builder': annotator.BaseFactory(
recipe='dart/dart',
factory_properties={
'target_arch': 'arm',
'build_args': ['--os=android'],
'build_targets': ['runtime_precompiled'],
'test_args': ['-cprecompiler', '-rdart_precompiled',
'--exclude-suite=pkg',
'--system=android',
'--use-blobs',
'--shard=2',
'--shards=3']}),
'platform': 'posix' + postfix,
},
{
'name': 'vm-precomp-android-release-3-3' + postfix,
'category': category('1vm-precomp'),
'factory_builder': annotator.BaseFactory(
recipe='dart/dart',
factory_properties={
'target_arch': 'arm',
'build_args': ['--os=android'],
'build_targets': ['runtime_precompiled'],
'test_args': ['-cprecompiler', '-rdart_precompiled',
'--exclude-suite=pkg',
'--system=android',
'--use-blobs',
'--shard=3',
'--shards=3']}),
'platform': 'posix' + postfix,
},
{
'name': 'cross-arm-vm-linux-release' + postfix,
'category': category('1vm-misc'),
'factory_builder': annotator.BaseFactory(
recipe='dart/dart_cross_compiler'),
'platform': 'posix' + postfix,
},
# These is a recipe builder that triggers all builders dependent on the sdk.
# When the sdk builders are converted to recipes, they will do it instead.
{
'name': 'sdk-trigger' + postfix,
'category': category('4dart-sdk'),
'factory_builder': annotator.BaseFactory(recipe='dart/sdk_trigger'),
'platform': 'posix' + postfix
},
]
for platform in ['linux', 'mac', 'win']:
for arch in ['x64', 'ia32']:
for mode in ['debug', 'release']:
variants_vm_recipe.append({
'name': 'vm-%s-%s-%s' % (platform, mode, arch) + postfix,
'category': category('1vm'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart_vm'),
'platform': ('windows' if platform == 'win' else 'posix') + postfix
})
for arch in ['simmips', 'simarm', 'simarm64']:
for mode in ['debug', 'release']:
if arch == 'simarm64' and mode == 'debug': continue
variants_vm_recipe.append({
'name': 'vm-linux-%s-%s' % (mode, arch) + postfix,
'category': category('1vm'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart_vm'),
'platform': 'posix' + postfix
})
for type in ['asan', 'optcounter-threshold']:
for arch in ['ia32', 'x64']:
variants_vm_recipe.append({
'name': 'vm-linux-release-%s-%s' % (arch, type) + postfix,
'category': category('1vm-misc'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart_vm'),
'platform': 'posix' + postfix
})
for runtime in ['app', 'precomp']:
for mode in ['debug', 'release', 'product']:
if runtime == 'precomp' and mode == 'release': continue
variants_vm_recipe.append({
'name': ('%s-linux-%s-x64' % (runtime, mode)) + postfix,
'category': category('1vm-%s' % runtime),
'factory_builder': annotator.BaseFactory(recipe='dart/dart_vm'),
'platform': 'posix' + postfix,
})
for mode in ['debug', 'release']:
variants_vm_recipe.append({
'name': ('vm-linux-%s-x64-reload' % mode) + postfix,
'category': category('1vm-reload'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart_vm'),
'platform': 'posix' + postfix,
})
variants_vm_recipe.append({
'name': ('vm-linux-%s-x64-reload-rollback' % mode) + postfix,
'category': category('1vm-reload'),
'factory_builder': annotator.BaseFactory(recipe='dart/dart_vm'),
'platform': 'posix' + postfix,
})
variants_dartium = []
####### Don't run dartium-inc on dev/stable
if channel.name == 'be' or channel.name == 'integration':
variants_dartium.extend([
{
'name' : 'dartium-mac-inc' + postfix,
'category' : category('6dartium-inc'),
},
{
'name' : 'dartium-lucid64-inc' + postfix,
'category' : category('6dartium-inc'),
},
{
'name': 'dartium-win-inc-ninja' + postfix,
'category' : category('6dartium-inc'),
'builddir': 'w-' + postfix,
},
])
variants_dartium_full_mac = [
{
'name' : 'dartium-mac-full' + postfix,
'category' : category('97dartium-full'),
},
]
variants_dartium_full_linux = [
{
'name' : 'dartium-lucid64-full' + postfix,
'category' : category('97dartium-full'),
},
{
'name' : 'dartium-lucid32-full' + postfix,
'category' : category('97dartium-full'),
},
]
variants_dartium_full_win = [
{
'name' : 'dartium-win-full' + postfix,
'category' : category('97dartium-full'),
},
]
####### Dartium integration overrides, we only use the dartium builders there
if channel.name == 'integration':
variants = []
variants_vm_recipe = []
variants_recipe_special_trigger = []
# Add the dartium recipe builders after clearing on the integration branch,
# so they are also on that branch.
variants_vm_recipe.append({
'name': ('dartium-linux-x64') + postfix,
'category': category('97dartium-full'),
'factory_builder': annotator.BaseFactory(recipe='dart/dartium'),
'platform': 'posix' + postfix,
})
for platform in ['linux', 'mac', 'win']:
variants_vm_recipe.append({
'name': ('dartium-%s-ia32' % platform) + postfix,
'category': category('97dartium-full'),
'factory_builder': annotator.BaseFactory(recipe='dart/dartium'),
'platform': ('windows' if platform == 'win' else 'posix') + postfix,
})
if channel.name == 'be' or channel.name == 'integration':
variants_vm_recipe.append({
'name': ('dartium-%s-ia32-inc' % platform) + postfix,
'category': category('6dartium-inc'),
'factory_builder': annotator.BaseFactory(recipe='dart/dartium'),
'platform': ('windows' if platform == 'win' else 'posix') + postfix,
})
####### Factory setup
utils.setup_factories(variants)
utils.setup_dartium_factories(variants_dartium)
utils.setup_dartium_factories(variants_dartium_full_mac)
utils.setup_dartium_factories(variants_dartium_full_linux)
utils.setup_dartium_factories(variants_dartium_full_win)
####### Schedulers
# builder names
builder_names = utils.get_builder_names(variants)
vm_recipe_builder_names = utils.get_builder_names(variants_vm_recipe)
dartium_builder_names = utils.get_builder_names(variants_dartium)
dartium_full_linux_builder_names = (
utils.get_builder_names(variants_dartium_full_linux))
dartium_full_mac_builder_names = (
utils.get_builder_names(variants_dartium_full_mac))
dartium_full_win_builder_names = (
utils.get_builder_names(variants_dartium_full_win))
if channel.name in ['be', 'integration']:
# normal builders + dartium builders
c['schedulers'].append(Scheduler(
name='main' + postfix,
branch=channel.branch,
treeStableTimer=0,
builderNames=builder_names +
dartium_builder_names +
vm_recipe_builder_names +
dartium_full_linux_builder_names +
dartium_full_mac_builder_names +
dartium_full_win_builder_names
))
else:
c['schedulers'].append(Scheduler(
name='main' + postfix,
branch=channel.branch,
treeStableTimer=0,
builderNames=builder_names + dartium_builder_names +
vm_recipe_builder_names))
s_dartium_linux = Scheduler(
name='dartium-linux' + postfix,
branch=channel.branch,
treeStableTimer=0,
builderNames=dartium_full_linux_builder_names)
s_dartium_mac = Scheduler(
name='dartium-mac' + postfix,
branch=channel.branch,
treeStableTimer=0,
builderNames=dartium_full_mac_builder_names)
s_dartium_win = Scheduler(
name='dartium-win' + postfix,
branch=channel.branch,
treeStableTimer=0,
builderNames=dartium_full_win_builder_names)
c['schedulers'].append(s_dartium_linux)
c['schedulers'].append(s_dartium_mac)
c['schedulers'].append(s_dartium_win)
####### Builders
# Add non-dartium builders
for collection in [variants, variants_vm_recipe,
variants_recipe_special_trigger]:
for b in utils.get_builders_from_variants(collection, slaves, []):
c['builders'].append(b)
# Add dartium builders
for collection in [variants_dartium, variants_dartium_full_linux,
variants_dartium_full_mac, variants_dartium_full_win]:
# Reboot VMs after every build
for b in utils.get_builders_from_variants(collection, slaves, [],
ActiveMaster.is_production_host):
c['builders'].append(b)
c['builders'] = []
c['schedulers'] = []
for channel in CHANNELS:
setup_channel(channel)
####### CHANGESOURCES
c['change_source'] = [
utils.get_github_mirror_poller('dart-lang',
'sdk',
branch='master',
master='main'),
utils.get_github_mirror_poller('dart-lang',
'sdk',
branch='dev',
master='main'),
utils.get_github_mirror_poller('dart-lang',
'sdk',
branch='stable',
master='main'),
utils.get_github_mirror_poller('dart-lang',
'sdk',
branch='integration',
master='main')]
####### BUILDSLAVES
c['slaves'] = utils.get_slaves(c['builders'])
# Make sure everything works together.
master_utils.VerifySetup(c, slaves)
# Prioritize the builders depending on channel.
c['prioritizeBuilders'] = utils.prioritize_builders
####### STATUS TARGETS
# 'status' is a list of Status Targets. The results of each build will be
# pushed to these targets. buildbot/status/*.py has a variety to choose from,
# including web pages, email senders, and IRC bots.
c['status'] = [status_logger.StatusEventLogger()]
if WEB_STATUS:
for status in utils.get_web_statuses():
c['status'].append(status)
if MAIL_NOTIFIER:
# We have people that are interested in a specific subset of the builders
# and want to be notified whenever they break.
mail_notifiers = [
{
'extraRecipients': ['whesse+botfailures@google.com',],
'builders': None, # None means all builders
'sendToInterestedUsers': True,
},
{
'extraRecipients': ['ricow@google.com', 'whesse@google.com',
'kasperl@google.com'],
'builders': ['version-checker-dev', 'version-checker-stable'],
'subject': 'VERSION file breakage - bad build',
'sendToInterestedUsers': True,
}
]
for notifier in utils.get_mail_notifier_statuses(mail_notifiers):
c['status'].append(notifier)
if GOOD_REVISIONS:
from master import goodrevisions
# We use this basically to decide if the vm in release mode, dart2js on d8,
# and dartium inc succeeded.
factory_map = []
def is_important(name):
# Only bleeding edge builds matter
if not name.endswith('-be'):
return False
# Linux vm and dart2js v8 bots
important = ['vm-linux-release-ia32', 'vm-linux-release-x64',
'dart2js-linux-release-minified']
for prefix in important:
if name.startswith(prefix):
return True
if 'dartium' in name and '-inc' in name:
return True
for b in c['builders']:
if is_important(b['name']):
factory_map.append((b['name'], b['factory']))
log.msg("LKGR based on: %s " % [b[0] for b in factory_map])
any_steps = build_utils.ExtractFactoriesSteps(factory_map)
c['status'].append(goodrevisions.GoodRevisions(
good_revision_steps=any_steps,
store_revisions_url=ActiveMaster.store_revisions_url))
# Keep last build logs, the default is too low.
c['buildHorizon'] = 1000
c['logHorizon'] = 500
# Must be at least 2x the number of slaves.
c['eventHorizon'] = 700
# Template generation is using 40 entries, so give it a little extra.
c['buildCacheSize'] = 42
c['properties'] = {'mastername': master_utils.GetMastername()}
####### 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
# 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.
c['buildbotURL'] = ActiveMaster.buildbot_url