blob: 0e0f8097f3a14edf37317f9adf0212f3240917be [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2015 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.
from buildbot.process import buildrequest
from buildbot.process.properties import WithProperties
from buildbot.scheduler import Nightly
from buildbot.scheduler import Triggerable
from buildbot.schedulers.basic import SingleBranchScheduler
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
import math
ActiveMaster = master_site_config.V8FYI
MAIL_NOTIFIER = ActiveMaster.is_production_host
INFRA_REPO_URL = 'https://chromium.googlesource.com/infra/infra'
# This is the dictionary that the buildmaster pays attention to. We also use
# a shorter alias to save typing.
c = BuildmasterConfig = {}
c['status'] = []
####### DATABASE
config.DatabaseSetup(c)
####### CHANGESOURCES
comparator = gitiles_poller.GitilesRevisionComparator()
c['change_source'] = [
gitiles_poller.GitilesPoller(
'https://chromium.googlesource.com/v8/v8',
branches=['master', 'candidate'],
pollInterval=20,
comparator=comparator,
)
]
# TODO(machenbach): Find common place for this and internal copy:
# http://shortn/_PM6ecAbllK
def merge_requests_logarithmic(req1, req2, queue_length, merged_length):
"""Merges builds dependent on the number of builds in the queue."""
if not buildrequest.BuildRequest.canBeMergedWith(req1, req2):
return False
return merged_length <= int(math.log(queue_length, 2))
# Tell buildbot that we want to use a non-standard fuction with 4 parameters.
setattr(merge_requests_logarithmic, 'with_length', True)
####### FACTORIES
F = annotator_factory.AnnotatorFactory().BaseFactory
def m_remote_run(recipe, **kwargs):
props = {'path_config': 'kitchen'}
props.update(kwargs.pop('properties', {}))
return remote_run_factory.RemoteRunFactory(
active_master=ActiveMaster,
repository=kwargs.pop(
'repository',
'https://chromium.googlesource.com/chromium/tools/build.git'
),
recipe=recipe,
factory_properties=props,
**kwargs)
####### BUILDER SPECS
CATEGORY_RELEASE = '1Release|release'
CATEGORY_LAYOUT = '2Layout|chromium'
CATEGORY_NONLAYOUT = '3Nonlayout|chromium'
CATEGORY_NONLAYOUT_NO_MAIL = '3Nonlayout'
CATEGORY_GPU_NO_MAIL = '4GPU'
CATEGORY_CLUSTERFUZZ = '5Clusterfuzz|clusterfuzz'
CATEGORY_NODE_JS = '6Node.js|node'
nightly_builders = [
{
'name': 'V8 lkgr finder',
'builddir': 'v8-lkgr',
'factory': m_remote_run(
'lkgr_finder',
repository=INFRA_REPO_URL,
properties={'lkgr_project': 'v8', 'allowed_lag': 4},
),
'category': CATEGORY_RELEASE,
'auto_reboot' : False,
},
{
'name': 'Auto-roll - push',
'builddir': 'auto-roll-push',
'factory': F('v8/auto_roll_push'),
'category': CATEGORY_RELEASE,
'auto_reboot' : False,
},
{
'name': 'Auto-roll - deps',
'builddir': 'auto-roll-deps',
'factory': F('v8/auto_roll_deps'),
'category': CATEGORY_RELEASE,
'auto_reboot' : False,
},
{
'name': 'Auto-roll - v8 deps',
'builddir': 'auto-roll-v8-deps',
'factory': F('v8/auto_roll_v8_deps'),
'category': CATEGORY_RELEASE,
'auto_reboot' : False,
},
{
'name': 'Auto-roll - v8rel',
'builddir': 'v8rel',
'factory': F('v8/auto_roll_v8rel'),
'category': CATEGORY_RELEASE,
'auto_reboot' : False,
},
{
'name': 'Auto-roll - release process',
'builddir': 'release',
'factory': F('v8/auto_roll_release_process'),
'category': CATEGORY_RELEASE + '|clusterfuzz',
'auto_reboot' : False,
},
]
scheduled_builders = [
{
'name': 'V8-Blink Win',
'factory': m_remote_run('blink_downstream'),
'category': CATEGORY_LAYOUT,
},
{
'name': 'V8-Blink Mac',
'factory': m_remote_run('blink_downstream'),
'category': CATEGORY_LAYOUT,
},
{
'name': 'V8-Blink Linux 64',
'factory': m_remote_run('blink_downstream'),
'category': CATEGORY_LAYOUT,
# Build all revisions.
'mergeRequests': False,
},
{
'name': 'V8-Blink Linux 64 - ignition',
'factory': m_remote_run('blink_downstream'),
'category': CATEGORY_LAYOUT,
},
{
'name': 'V8-Blink Linux 64 (dbg)',
'factory': m_remote_run('blink_downstream'),
'category': CATEGORY_LAYOUT,
'mergeRequests': merge_requests_logarithmic,
},
{
'name': 'Linux Debug Builder',
'factory': m_remote_run(
'chromium', triggers=['cr_linux_dbg']),
'category': CATEGORY_NONLAYOUT,
},
{
'name': 'V8 Linux GN',
'factory': m_remote_run('chromium'),
'category': CATEGORY_NONLAYOUT,
},
{
'name': 'V8 Android GN (dbg)',
'factory': m_remote_run('chromium'),
'category': CATEGORY_NONLAYOUT,
},
{
'name': 'Linux ASAN Builder',
'factory': m_remote_run('chromium'),
'category': CATEGORY_NONLAYOUT,
},
{
'name': 'Android Builder',
'factory': F('android/builder'),
'category': CATEGORY_NONLAYOUT,
},
{
'name': 'Linux Snapshot Builder',
'factory': m_remote_run('chromium'),
'category': CATEGORY_NONLAYOUT_NO_MAIL,
},
{
'name': 'Win Release (NVIDIA)',
'factory': m_remote_run('chromium'),
'category': CATEGORY_GPU_NO_MAIL,
},
{
'name': 'Mac Release (Intel)',
'factory': m_remote_run('chromium'),
'category': CATEGORY_GPU_NO_MAIL,
},
{
'name': 'Linux Release (NVIDIA)',
'factory': m_remote_run('chromium'),
'category': CATEGORY_GPU_NO_MAIL,
},
{
'name': 'Android Release (Nexus 5X)',
'factory': m_remote_run('chromium'),
'category': CATEGORY_GPU_NO_MAIL,
},
]
clusterfuzz_builders = [
{
'name': 'Chromium ASAN (symbolized)',
'factory': m_remote_run('chromium'),
'category': CATEGORY_CLUSTERFUZZ,
},
{
'name': 'Chromium ASAN - debug',
'factory': m_remote_run('chromium'),
'category': CATEGORY_CLUSTERFUZZ,
},
{
'name': 'Chromium Win SyzyASAN',
'factory': m_remote_run(
'chromium', timeout=3600),
'category': CATEGORY_CLUSTERFUZZ,
}
]
node_js_builders = [
{
'name': 'V8 - node.js integration',
'builddir': 'node_js',
'factory': F('v8/node_integration'),
'category': CATEGORY_NODE_JS,
'auto_reboot' : True,
},
]
triggered_builders = [
{
'name': 'Linux Tests (dbg)(1)',
'factory': m_remote_run('chromium'),
'category': CATEGORY_NONLAYOUT_NO_MAIL,
},
]
####### SCHEDULERS
c['schedulers'] = [
SingleBranchScheduler(
name='v8_fyi',
branch='master',
treeStableTimer=10,
builderNames=[
builder['name']
for builder in scheduled_builders + node_js_builders
],
),
SingleBranchScheduler(
name='v8_candidate',
branch='candidate',
treeStableTimer=10,
builderNames=[builder['name'] for builder in clusterfuzz_builders],
),
Triggerable('cr_linux_dbg', ['Linux Tests (dbg)(1)']),
# LKGR finder.
Nightly(
name='v8_lkgr_finder',
branch=None,
builderNames=['V8 lkgr finder'],
minute=range(8, 60, 15),
),
# Auto-roll builders.
Nightly(
name='v8_release_process',
branch=None,
builderNames=['Auto-roll - release process'],
minute=range(10, 60, 15),
),
Nightly(
name='v8_auto_push',
branch=None,
builderNames=['Auto-roll - push'],
minute=range(12, 60, 15),
),
Nightly(
name='v8_v8rel',
branch=None,
builderNames=[
'Auto-roll - v8rel',
'Auto-roll - deps',
],
minute=range(0, 60, 15),
),
# Run v8 deps roller every EMEA morning at 5am.
Nightly(
name='v8_v8deps',
branch=None,
builderNames=['Auto-roll - v8 deps'],
hour=[20],
),
]
####### BUILDERS
c['builders'] = (
nightly_builders +
scheduled_builders +
triggered_builders +
clusterfuzz_builders +
node_js_builders
)
# Associate the slaves to the builders. The configuration is in slaves.cfg.
slaves = slaves_list.SlavesList('slaves.cfg', 'V8FYI')
for builder in c['builders']:
builder['slavenames'] = slaves.GetSlavesName(builder=builder['name'])
####### BUILDSLAVES
# 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())
# Make sure everything works together.
master_utils.VerifySetup(c, slaves)
####### STATUS TARGETS
# Buildbot master url:
# 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',
tagComparator=comparator,
templates=['../master.client.v8/templates',
'../master.chromium/templates'])
if MAIL_NOTIFIER:
import mail_notifier_cfg
mail_notifier_cfg.Update(config, ActiveMaster, c)
# Adjust the buildCaches to be 3x the number of slaves per builder.
c['autoBuildCacheRatio'] = 3
####### PROJECT IDENTITY
c['projectName'] = ActiveMaster.project_name
c['projectURL'] = config.Master.project_url