webrtc/tools/continuous_build/master.cfg
phoglund@webrtc.org 6adfad1768 Optimized coverage computations and fixed coverage on the integration bot.
The coverage report will no longer get written to NFS but rather to the bot's own web server. This speeds up the  computation from 25 minutes to 8 seconds.

BUG=
TEST=

Review URL: https://webrtc-codereview.appspot.com/392007

git-svn-id: http://webrtc.googlecode.com/svn/trunk@1676 4adac7df-926f-26a2-2b94-8c16560cd09d
2012-02-13 12:16:50 +00:00

392 lines
16 KiB
Python
Executable File

#!/usr/bin/env python
# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
__author__ = 'ivinnichenko@webrtc.org (Illya Vinnichenko)'
# This is a buildmaster config file for WebRTC project. 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 is the dictionary that the buildmaster pays attention to. We also use
# a shorter alias to save typing.
c = BuildmasterConfig = {}
####### BUILDSLAVES
# the 'slaves' list defines the set of allowable buildslaves. Each element is
# a BuildSlave object, which is created with bot-name, bot-password. These
# correspond to values given to the buildslave's mktap invocation.
from buildbot.buildslave import BuildSlave
c['slaves'] = [BuildSlave("android", "pass", max_builds=1),
BuildSlave("chromeos", "pass", max_builds=1),
BuildSlave("linux-clang", "pass", max_builds=1),
BuildSlave("linux-slave-1", "pass", max_builds=1),
BuildSlave("linux-slave-2", "pass", max_builds=1),
BuildSlave("linux-slave-4", "pass", max_builds=1),
BuildSlave("linux-slave-5", "pass", max_builds=1),
BuildSlave("linux-slave-gcc-4.6", "pass", max_builds=1),
BuildSlave("linux-valgrind", "pass", max_builds=1),
BuildSlave("linux_video", "pass", max_builds=1),
BuildSlave("mac-slave-3", "pass", max_builds=1),
BuildSlave("mac-slave-2", "pass", max_builds=1),
BuildSlave("win-slave", "pass", max_builds=1),
BuildSlave("win-slave32", "pass", max_builds=1)]
# 'slavePortnum' defines the TCP port to listen on. This must match the value
# configured into the buildslaves (with their --master option)
c['slavePortnum'] = 9989
####### CHANGESOURCES
# the 'change_source' setting tells the buildmaster how it should find out
# about source code changes. Any class which implements IChangeSource can be
# put here: there are several in buildbot/changes/*.py to choose from.
from buildbot.changes.pb import PBChangeSource
from buildbot.changes.svnpoller import SVNPoller
source_code_svn_url = 'http://webrtc.googlecode.com/svn/trunk'
svn_poller = SVNPoller(svnurl=source_code_svn_url, pollinterval=5*60,
histmax=10, svnbin='/usr/bin/svn')
c['change_source'] = svn_poller
####### SCHEDULERS
## configure the Schedulers
from buildbot.scheduler import Scheduler
webrtc_scheduler = Scheduler(name="all", branch=None, treeStableTimer=5*60,
builderNames=["Win32Debug",
"Win32Release",
"MacOS32DBG",
"MacOS32Release",
"Linux32DBG",
"Linux32Release",
"Linux64DBG",
"Linux64Release",
"LinuxClang",
"LinuxValgrind",
"Linux64DBG-GCC4.6",
"LinuxVideoTest",
"Android",
"ChromeOS"
])
c['schedulers'] = [webrtc_scheduler]
####### 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 builder
# slavename (required): which slave to use (must appear in c['bots'])
# 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
# buildbot/process/factory.py provides several BuildFactory classes you can
# start with, which implement build processes for common targets (GNU
# autoconf projects, CPAN perl modules, etc). The factory.BuildFactory is the
# base class, and is configured with a series of BuildSteps. When the build
# is run, the appropriate buildslave is told to execute each Step in turn.
# the first BuildStep is typically responsible for obtaining a copy of the
# sources. There are source-obtaining Steps in buildbot/steps/source.py for
# CVS, SVN, and others.
from buildbot.process import factory
from buildbot.steps import shell
from webrtc_buildbot import utils
# Tests to run on Virtual machine bots and our Mac hardware.
# Defines the supported tests followed by a tuple defining if the tests are
# enabled on Linux, Mac and/or Windows (in that order; defined in utils.py).
NORMAL_TESTS = {
# Test name Linux Mac Windows
"audio_coding_module_test": (True, True, True),
"audio_coding_unittests": (True, True, True),
"audio_conference_mixer_unittests":(True, True, True),
"audio_device_test_api": (True, False, False), # Issue 257
"audioproc_unittest": (True, True, True),
"cng_unittests": (True, True, True),
"g711_unittests": (True, True, True),
"g722_unittests": (True, True, True),
"libyuv_unittests": (True, True, True),
"media_file_unittests": (True, True, True),
"neteq_unittests": (True, True, True),
"pcm16b_unittests": (True, True, True),
"resampler_unittests": (True, True, True),
"rtp_rtcp_unittests": (True, True, True),
"signal_processing_unittests": (True, True, True),
"system_wrappers_unittests": (True, True, True),
"test_bwe": (True, True, True),
"test_fec": (True, True, True),
"test_support_unittests": (True, True, True),
"udp_transport_unittests": (True, True, True),
"vad_unittests": (True, True, True),
"video_codecs_test_framework_integrationtests": (True, True, True),
"video_codecs_test_framework_unittests": (True, True, True),
"video_coding_unittests": (True, True, True),
"video_engine_core_unittests": (True, True, True),
"video_processing_unittests": (True, True, True),
"voice_engine_unittests": (True, True, True),
"vp8_unittests": (True, False, True), # Issue 273.
"webrtc_utility_unittests": (True, True, False),
}
PHYSICAL_MACHINE_TESTS = {
# Test name Linux Mac Windows
"vie_auto_test": (True, False, False),
"voe_auto_test": (True, False, False),
}
VALGRIND_DISABLED_TESTS = [
"audio_coding_module_test", # Issue 270
"test_fec", # Too slow for Valgrind
]
linux_normal_tests = utils.GetEnabledTests(NORMAL_TESTS, "Linux")
mac_normal_tests = utils.GetEnabledTests(NORMAL_TESTS, "Mac")
windows_normal_tests = utils.GetEnabledTests(NORMAL_TESTS, "Windows")
linux_physical_machine_tests = utils.GetEnabledTests(PHYSICAL_MACHINE_TESTS,
"Linux")
mac_physical_machine_tests = utils.GetEnabledTests(PHYSICAL_MACHINE_TESTS,
"Mac")
windows_physical_machine_tests = utils.GetEnabledTests(PHYSICAL_MACHINE_TESTS,
"Windows")
############# Linux Builders #######################################
linux_factory_64_dbg = utils.WebRTCLinuxFactory()
linux_factory_64_dbg.EnableBuild()
linux_factory_64_dbg.EnableTests(linux_normal_tests)
linux_factory_64_dbg_no_coverage = utils.WebRTCLinuxFactory()
linux_factory_64_dbg_no_coverage.EnableBuild()
linux_factory_64_dbg_no_coverage.EnableTests(linux_normal_tests)
linux_factory_32_release = utils.WebRTCLinuxFactory()
linux_factory_32_release.EnableBuild(release=True, build32=True)
linux_factory_32_release.EnableTests(linux_normal_tests)
linux_factory_64_release = utils.WebRTCLinuxFactory()
linux_factory_64_release.EnableBuild(release=True)
linux_factory_64_release.EnableTests(linux_normal_tests)
linux_factory_32_dbg = utils.WebRTCLinuxFactory(
enable_coverage=True,
coverage_url="http://webrtc-cb-linux-slave-4.cbf.corp.google.com/")
linux_factory_32_dbg.EnableBuild(build32=True)
linux_factory_32_dbg.EnableTests(linux_normal_tests)
linux_factory_video = utils.WebRTCLinuxFactory(
enable_coverage=True,
coverage_url="http://webrtc-build-bot-se.lul/")
linux_factory_video.EnableBuild()
linux_factory_video.EnableTests(linux_physical_machine_tests)
chromeos_factory = utils.WebRTCLinuxFactory()
chromeos_factory.EnableBuild(chrome_os=True)
chromeos_factory.EnableTests(linux_normal_tests)
linux_clang = utils.WebRTCLinuxFactory()
linux_clang.EnableBuild(clang=True)
linux_clang.EnableTests(linux_normal_tests)
linux_valgrind = utils.WebRTCLinuxFactory(enable_valgrind=True)
linux_valgrind.EnableBuild(release=True)
# Filter out disabled Valgrind tests:
valgrind_tests = filter(lambda test: test not in VALGRIND_DISABLED_TESTS,
linux_normal_tests)
linux_valgrind.EnableTests(valgrind_tests)
############## Mac Builders #######################################
mac_factory_32_dbg = utils.WebRTCMacFactory()
mac_factory_32_dbg.EnableBuild(build_type="both")
mac_factory_32_dbg.EnableTests(mac_normal_tests)
mac_factory_32_release = utils.WebRTCMacFactory()
mac_factory_32_release.EnableBuild(build_type="both", release=True)
mac_factory_32_release.EnableTests(mac_normal_tests)
############# Windows Builders #######################################
win_factory_32_Debug = utils.WebRTCWinFactory()
win_factory_32_Debug.EnableBuild(configuration="Debug")
win_factory_32_Debug.EnableTests(windows_normal_tests)
win_factory_32_Release = utils.WebRTCWinFactory()
win_factory_32_Release.EnableBuild(configuration="Release")
win_factory_32_Release.EnableTests(windows_normal_tests)
android_factory = utils.WebRTCAndroidFactory()
android_factory.EnableBuild(product="toro")
linux_builder_64_debug = {
'name': "Linux64DBG",
'slavename': "linux-slave-1",
'builddir': "linux-slave-1",
'factory': linux_factory_64_dbg,
}
linux_builder_32_release = {
'name': "Linux32Release",
'slavename': "linux-slave-2",
'builddir': "linux-slave-2",
'factory': linux_factory_32_release,
}
linux_builder_64_release = {
'name': "Linux64Release",
'slavename': "linux-slave-5",
'builddir': "linux-slave-5",
'factory': linux_factory_64_release,
}
linux_builder_32_debug = {
'name': "Linux32DBG",
'slavename': "linux-slave-4",
'builddir': "linux-slave-4",
'factory': linux_factory_32_dbg,
}
mac_builder_32_debug = {
'name': "MacOS32DBG",
'slavename': "mac-slave-3",
'builddir': "mac-slave-3",
'factory': mac_factory_32_dbg,
}
mac_builder_32_release = {
'name': "MacOS32Release",
'slavename': "mac-slave-2",
'builddir': "mac-slave-2",
'factory': mac_factory_32_release,
}
chromeos_builder = {
'name': "ChromeOS",
'slavename': "chromeos",
'builddir': "chromeos",
'factory': chromeos_factory,
}
win_builder_32_debug = {
'name': "Win32Debug",
'slavename': "win-slave",
'builddir': "win-32-dbg",
'factory': win_factory_32_Debug,
}
win_builder_32_release = {
'name': "Win32Release",
'slavename': "win-slave32",
'builddir': "win-32-release",
'factory': win_factory_32_Release,
}
linux_builder_video = {
'name': "LinuxVideoTest",
'slavename': "linux_video",
'builddir': "video",
'factory': linux_factory_video,
}
linux_builder_clang = {
'name': "LinuxClang",
'slavename': "linux-clang",
'builddir': "linux-clang",
'factory': linux_clang,
}
linux_builder_valgrind = {
'name': "LinuxValgrind",
'slavename': "linux-valgrind",
'builddir': "linux-valgrind",
'factory': linux_valgrind,
}
android_builder_1 = {
'name': "Android",
'slavename': "android",
'builddir': "android",
'factory': android_factory,
}
linux_builder_gcc_4_6 = {
'name': "Linux64DBG-GCC4.6",
'slavename': "linux-slave-gcc-4.6",
'builddir': "linux-slave-gcc-4.6",
'factory': linux_factory_64_dbg_no_coverage,
}
c['builders'] = [
win_builder_32_debug,
win_builder_32_release,
mac_builder_32_debug,
mac_builder_32_release,
linux_builder_32_debug,
linux_builder_32_release,
linux_builder_64_release,
linux_builder_64_debug,
linux_builder_clang,
linux_builder_valgrind,
linux_builder_gcc_4_6,
linux_builder_video,
android_builder_1,
chromeos_builder,
]
####### 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.
from buildbot.status import html
from buildbot.status import mail
web_page = html.WebStatus(http_port=8010, allowForce=True)
email_notification = mail.MailNotifier(
fromaddr="webrtc-cb-watchlist@google.com",
extraRecipients=["webrtc-cb-watchlist@google.com"],
sendToInterestedUsers=True,
mode='failing')
c['status'] = [web_page, email_notification]
####### DEBUGGING OPTIONS
# if you set 'debugPassword', then you can connect to the buildmaster with
# the diagnostic tool in contrib/debugclient.py . From this tool, you can
# manually force builds and inject changes, which may be useful for testing
# your buildmaster without actually committing changes to your repository (or
# before you have a functioning 'sources' set up). The debug tool uses the
# same port number as the slaves do: 'slavePortnum'.
#c['debugPassword'] = "debugpassword"
# if you set 'manhole', you can ssh into the buildmaster and get an
# interactive python shell, which may be useful for debugging buildbot
# internals. It is probably only useful for buildbot developers. You can also
# use an authorized_keys file, or plain telnet.
#from buildbot import manhole
#c['manhole'] = manhole.PasswordManhole("tcp:9999:interface=127.0.0.1",
# "admin", "password")
####### 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'] = "WebRTC"
c['projectURL'] = "http://www.webrtc.org"
# 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'] = "http://webrtc-cb-linux-master.cbf.corp.google.com:8010/"