blob: 689fd45b8827de8295d8b12ba50150d75373183f [file] [log] [blame]
# -*- python -*-
# ex: set syntax=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.
import config
import master_site_config
from buildbot.scheduler import Periodic
from buildbot.schedulers.basic import AnyBranchScheduler
from buildbot.schedulers.timed import Nightly
from buildbot.status import mail
from master import exception_notifier
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
ActiveMaster = master_site_config.InfraCron
c = BuildmasterConfig = {}
c['slavePortnum'] = ActiveMaster.slave_port
c['schedulers'] = []
c['builders'] = []
c['change_source'] = []
c['status'] = []
def mergeRequests(req1, req2):
if 'publish_tarball' in (req1.buildername, req2.buildername):
return False
return req1.canBeMergedWith(req2)
c['mergeRequests'] = mergeRequests
f_annotations = annotator_factory.AnnotatorFactory(ActiveMaster)
INFRA_REPO_URL = 'https://chromium.googlesource.com/infra/infra'
def m_remote_run(recipe, **kwargs):
return remote_run_factory.RemoteRunFactory(
active_master=ActiveMaster,
repository=INFRA_REPO_URL,
recipe=recipe,
factory_properties={'path_config': 'kitchen'},
**kwargs)
####### DATABASE
config.DatabaseSetup(c)
####### CHANGE SOURCES
c['change_source'].extend([
gitiles_poller.GitilesPoller(INFRA_REPO_URL)
])
####### BUILDERS
c['builders'].extend([
{
'name': 'gsubtreed',
'factory': f_annotations.BaseFactory(
'infra/gsubtreed',
{'target_repo': 'https://chromium.googlesource.com/chromium/src'}),
'auto_reboot' : False,
'category': '1cron',
},
{
'name': 'gsubtreed-aosp-platform-system-core',
'factory': f_annotations.BaseFactory(
'infra/gsubtreed',
{'target_repo':
'https://chromium.googlesource.com/aosp/platform/system/core'}),
'auto_reboot' : False,
'category': '1cron',
},
{
'name': 'gsubtreed-infra',
'factory': f_annotations.BaseFactory(
'infra/gsubtreed',
{'target_repo': 'https://chromium.googlesource.com/infra/infra'}),
'auto_reboot' : False,
'category': '1cron',
},
{
'name': 'gsubtreed-llvm-clang',
'factory': f_annotations.BaseFactory(
'infra/gsubtreed',
{'target_repo':
'https://chromium.googlesource.com/external/'+
'github.com/llvm-mirror/clang'},
),
'auto_reboot' : False,
'category': '1cron',
},
{
'name': 'gsubtreed-luci-py',
'factory': f_annotations.BaseFactory(
'infra/gsubtreed',
{'target_repo': 'https://chromium.googlesource.com/infra/luci/luci-py'}),
'auto_reboot' : False,
'category': '1cron',
},
{
'name': 'lkgr-tag-pusher',
'factory': f_annotations.BaseFactory('infra/lkgr_tag_pusher'),
'auto_reboot' : False,
'category': '1cron',
},
{
'name': 'chromium-lkgr-finder',
'factory': m_remote_run('lkgr_finder'),
'auto_reboot' : False,
'category': '1cron',
},
{
'name': 'publish_tarball',
'factory': m_remote_run('publish_tarball', max_time=3*60*60),
'auto_reboot' : False,
'category': '1cron',
},
{
'name': 'Build From Tarball',
'factory': m_remote_run('build_from_tarball'),
'category': 'linux',
'auto_reboot': False,
},
{
'name': 'GAE SDK CIPD Packager',
'factory': f_annotations.BaseFactory(recipe='infra/gae_sdk_cipd_packager'),
'category': '1cron',
},
{
'name': 'git-hash-metrics',
'factory': m_remote_run(recipe='git_hash_metric'),
'category': '3monitoring',
},
{
'name': 'wpt-exporter',
'factory': m_remote_run('wpt_export'),
'auto_reboot' : True,
'category': '1cron',
},
{
'name': 'wpt-importer',
'factory': m_remote_run('wpt_import'),
'auto_reboot' : True,
'category': '1cron',
},
])
third_party_platforms = (
'linux-amd64',
'linux-386',
'mac-amd64',
'windows-amd64',
'windows-386',
)
third_party_builders = [
{
'name': 'third-party-packages-%s' % p,
'factory': m_remote_run('third_party_packages'),
'auto_reboot' : False,
'category': '1cron',
}
for p in third_party_platforms
]
c['builders'].extend(third_party_builders)
####### SCHEDULERS
c['schedulers'].extend([
# Period is intentionally small so that if a builder fails fast, it also
# gets restarted fast.
Periodic(
name='infra-runner-scheduler',
periodicBuildTimer=1*60,
builderNames=[
'chromium-lkgr-finder',
'gsubtreed',
'gsubtreed-aosp-platform-system-core',
'gsubtreed-infra',
'gsubtreed-llvm-clang',
'gsubtreed-luci-py',
'lkgr-tag-pusher',
'wpt-exporter',
]
),
Periodic(
# Period is larger for wpt-importer jobs because these jobs take
# about 10 minutes when there's nothing to do, and can take several
# hours when there is something to do.
name='wpt-importer-scheduler',
periodicBuildTimer=10*60,
builderNames=['wpt-importer']
),
Nightly(
name='publish_tarball',
branch=None,
builderNames=['publish_tarball'],
hour=range(0, 24, 3),
),
Nightly(
name='gae-sdk-scheduler',
branch='master',
hour=range(0, 24, 4),
minute=0,
builderNames=['GAE SDK CIPD Packager']),
Nightly(
name='third-party-packages',
branch='master',
hour=range(0, 24, 4),
minute=0,
builderNames=[b['name'] for b in third_party_builders]),
# Trigger this builder on any change anywhere.
AnyBranchScheduler(
name='git-hash-metrics',
builderNames=['git-hash-metrics']),
])
####### BUILDSLAVES
# Associate the slaves to the builders. The configuration is in slaves.cfg.
slaves = slaves_list.SlavesList('slaves.cfg', 'InfraCron')
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())
# Make sure everything works together.
master_utils.VerifySetup(c, slaves)
####### STATUS TARGETS
# Adds common status and tools (web status, mail notifier) to this master.
master_utils.AutoSetupMaster(
c, ActiveMaster, mail_notifier=False, order_console_by_time=True,
public_html='../master.chromium/public_html',
templates=['templates', '../master.chromium/templates']
)
# Send alerts when builders fail.
c['status'].extend([
mail.MailNotifier(
fromaddr=ActiveMaster.from_address,
builders=[b['name'] for b in third_party_builders],
subject='third-party-packages build failed',
mode='failing',
relayhost=config.Master.smtp,
sendToInterestedUsers=False,
extraRecipients=['chrome-troopers+alerts@google.com'],
),
])
####### PROJECT IDENTITY
c['projectName'] = ActiveMaster.project_name
c['buildbotURL'] = ActiveMaster.buildbot_url