webrtc/tools/continuous_build/master.cfg
kjellander@webrtc.org 5eeaa38573 Improved readability of tests in master.cfg and enabling some tests
Focused responsibility of supported tests in master.cfg instead of being in utils.py (hard to overview and maintain).

Enabled the following empty tests on all platforms:
- audio_conference_mixer_unittests
- cng_unittests
- g711_unittests
- g722_unittests
- pcm16b_unittests
- media_file_unittests
- udp_transport_unittests
- webrtc_utility_unittests

Removed "headless tests" concept since everything is now compiled in the make all step (no need for compile only, no execution tests).
Removed audio_device_test_func test since not a proper test (dev tool) that was configured as headless.

BUG=
TEST=Ran local master and successfully built and executed all tests with Mac build slave.

Review URL: http://webrtc-codereview.appspot.com/384002

git-svn-id: http://webrtc.googlecode.com/svn/trunk@1603 4adac7df-926f-26a2-2b94-8c16560cd09d
2012-02-04 09:41:26 +00:00

341 lines
14 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_video", "pass", max_builds=1),
BuildSlave("mac-slave-1", "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",
"MacOS",
"ChromeOS",
"LinuxCLANG",
"Linux64bitDBG",
"Linux32bitRelease",
"Linux64bitRelease",
"Linux32bitDBG",
"Linux64bitDBG-GCC4.6",
"Android",
"LinuxVideoTest"])
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, False),
"audio_coding_unittests": (True, True, True),
"audio_conference_mixer_unittests":(True, True, False),
"audio_device_test_api": (True, True, False),
"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, False),
"neteq_unittests": (True, True, True),
"pcm16b_unittests": (True, True, True),
"resampler_unittests": (True, True, True),
"rtp_rtcp_unittests": (True, True, False),
"signal_processing_unittests": (True, True, False),
"system_wrappers_unittests": (True, True, True),
"test_bwe": (True, True, False),
"test_fec": (False, False, False),
"udp_transport_unittests": (True, True, False),
"vad_unittests": (True, True, True),
"video_coding_unittests": (True, True, False),
"video_engine_core_unittests": (True, True, True),
"video_processing_unittests": (True, True, False), # Issue #247
"voice_engine_unittests": (True, True, True),
"vp8_unittests": (True, True, True),
"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),
}
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(enable_coverage=True)
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(enable_coverage=True)
linux_factory_32_release.EnableBuild(release=True, build32=True)
linux_factory_32_release.EnableTests(linux_normal_tests)
linux_factory_64_release = utils.WebRTCLinuxFactory(enable_coverage=True)
linux_factory_64_release.EnableBuild(release=True)
linux_factory_64_release.EnableTests(linux_normal_tests)
linux_factory_32_dbg = utils.WebRTCLinuxFactory(enable_coverage=True)
linux_factory_32_dbg.EnableBuild(build32=True)
linux_factory_32_dbg.EnableTests(linux_normal_tests)
linux_factory_video = utils.WebRTCLinuxFactory()
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)
############# Mac Builders #######################################
mac_factory = utils.WebRTCMacFactory()
mac_factory.EnableBuild(build_type="both")
mac_factory.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_1 = {
'name': "Linux64bitDBG",
'slavename': "linux-slave-1",
'builddir': "linux-slave-1",
'factory': linux_factory_64_dbg,
}
linux_builder_2 = {
'name': "Linux32bitRelease",
'slavename': "linux-slave-2",
'builddir': "linux-slave-2",
'factory': linux_factory_32_release,
}
linux_builder_3 = {
'name': "Linux64bitRelease",
'slavename': "linux-slave-5",
'builddir': "linux-slave-5",
'factory': linux_factory_64_release,
}
linux_builder_4 = {
'name': "Linux32bitDBG",
'slavename': "linux-slave-4",
'builddir': "linux-slave-4",
'factory': linux_factory_32_dbg,
}
mac_builder_1 = {
'name': "MacOS",
'slavename': "mac-slave-1",
'builddir': "mac-slave-1",
'factory': mac_factory,
}
chromeos_builder = {
'name': "ChromeOS",
'slavename': "chromeos",
'builddir': "chromeos",
'factory': chromeos_factory,
}
win_builder_1 = {
'name': "Win32Debug",
'slavename': "win-slave",
'builddir': "win-32-dbg",
'factory': win_factory_32_Debug,
}
win_builder_2 = {
'name': "Win32Release",
'slavename': "win-slave32",
'builddir': "win-32-release",
'factory': win_factory_32_Release,
}
linux_video_builder = {
'name': "LinuxVideoTest",
'slavename': "linux_video",
'builddir': "video",
'factory': linux_factory_video,
}
linux_clang_builder = {
'name': "LinuxCLANG",
'slavename': "linux-clang",
'builddir': "linux-clang",
'factory': linux_clang,
}
android_builder_1 = {
'name': "Android",
'slavename': "android",
'builddir': "android",
'factory': android_factory,
}
linux_builder_gcc_4_6 = {
'name': "Linux64bitDBG-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_1, win_builder_2, mac_builder_1, chromeos_builder,
linux_builder_1, linux_clang_builder, linux_builder_2,
linux_builder_3, linux_builder_4, android_builder_1,
linux_video_builder, linux_builder_gcc_4_6]
####### 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/"