| #!/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-chrome', '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-1', 'pass', max_builds=1), |
| BuildSlave('win-slave-2', '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' |
| ]) |
| chrome_scheduler = Scheduler(name='chrome', branch=None, treeStableTimer=60*60, |
| builderNames=['Chrome']) |
| |
| c['schedulers'] = [webrtc_scheduler, chrome_scheduler] |
| |
| ####### TESTS |
| # 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). |
| |
| from webrtc_buildbot import utils |
| |
| 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), |
| 'jpeg_unittests': (True, True, True), |
| 'media_file_unittests': (True, True, True), |
| 'metrics_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 |
| 'video_render_module_test': (True, False, False), |
| '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') |
| |
| ####### FACTORIES |
| # Factories defines how the build is run and can be used in multiple instances |
| # on multiple machines, depending on how many builders are defined. |
| |
| from buildbot.process import factory |
| from buildbot.steps import shell |
| |
| ############# Linux factories ####################################### |
| linux_factory_64_dbg = utils.WebRTCLinuxFactory( |
| utils.BuildStatusOracle('linux_factory_64_dbg')) |
| linux_factory_64_dbg.EnableBuild() |
| linux_factory_64_dbg.EnableTests(linux_normal_tests) |
| |
| linux_factory_32_release = utils.WebRTCLinuxFactory( |
| utils.BuildStatusOracle('linux_factory_32_release')) |
| linux_factory_32_release.EnableBuild(release=True, build32=True) |
| linux_factory_32_release.EnableTests(linux_normal_tests) |
| |
| linux_factory_64_release = utils.WebRTCLinuxFactory( |
| utils.BuildStatusOracle('linux_factory_64_release')) |
| linux_factory_64_release.EnableBuild(release=True) |
| linux_factory_64_release.EnableTests(linux_normal_tests) |
| |
| linux_factory_32_dbg = utils.WebRTCLinuxFactory( |
| utils.BuildStatusOracle('linux_factory_32_dbg')) |
| linux_factory_32_dbg.EnableCoverage( |
| coverage_url='http://webrtc-cb-linux-slave-4.cbf.corp.google.com/coverage/') |
| linux_factory_32_dbg.EnableBuild(build32=True) |
| linux_factory_32_dbg.EnableTests(linux_normal_tests) |
| |
| linux_factory_video = utils.WebRTCLinuxFactory( |
| utils.BuildStatusOracle('linux_factory_video')) |
| linux_factory_video.EnableCoverage( |
| coverage_url='http://webrtc-build-bot-se.lul/coverage/') |
| linux_factory_video.EnableBuild() |
| linux_factory_video.EnableTests(linux_physical_machine_tests) |
| |
| chromeos_factory = utils.WebRTCLinuxFactory( |
| utils.BuildStatusOracle('chromeos_factory')) |
| chromeos_factory.EnableBuild(chrome_os=True) |
| chromeos_factory.EnableTests(linux_normal_tests) |
| |
| linux_chrome_factory = utils.WebRTCChromeFactory( |
| utils.BuildStatusOracle('linux_chrome')) |
| linux_chrome_factory.EnableBuild() |
| |
| linux_clang = utils.WebRTCLinuxFactory( |
| utils.BuildStatusOracle('linux_clang')) |
| linux_clang.EnableBuild(clang=True) |
| linux_clang.EnableTests(linux_normal_tests) |
| |
| linux_valgrind = utils.WebRTCLinuxFactory( |
| utils.BuildStatusOracle('linux_valgrind'), valgrind_enabled=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) |
| |
| android_factory = utils.WebRTCAndroidFactory( |
| utils.BuildStatusOracle('android_factory')) |
| android_factory.EnableBuild(product='toro') |
| |
| ############## Mac factories ####################################### |
| mac_factory_32_dbg = utils.WebRTCMacFactory( |
| utils.BuildStatusOracle('mac_factory_32_dbg')) |
| mac_factory_32_dbg.EnableBuild(build_type='both') |
| mac_factory_32_dbg.EnableTests(mac_normal_tests) |
| |
| mac_factory_32_release = utils.WebRTCMacFactory( |
| utils.BuildStatusOracle('mac_factory_32_release')) |
| mac_factory_32_release.EnableBuild(build_type='both', release=True) |
| mac_factory_32_release.EnableTests(mac_normal_tests) |
| |
| ############# Windows factories ####################################### |
| win_factory_32_Debug = utils.WebRTCWinFactory( |
| utils.BuildStatusOracle('win_factory_32_debug')) |
| win_factory_32_Debug.EnableBuild(configuration='Debug') |
| win_factory_32_Debug.EnableTests(windows_normal_tests) |
| |
| win_factory_32_Release = utils.WebRTCWinFactory( |
| utils.BuildStatusOracle('mac_factory_32_release')) |
| win_factory_32_Release.EnableBuild(configuration='Release') |
| win_factory_32_Release.EnableTests(windows_normal_tests) |
| |
| ####### 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 |
| |
| 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-1', |
| 'builddir': 'win-32-dbg', |
| 'factory': win_factory_32_Debug, |
| } |
| win_builder_32_release = { |
| 'name': 'Win32Release', |
| 'slavename': 'win-slave-2', |
| '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_chrome = { |
| 'name': "Chrome", |
| 'slavename': "linux-chrome", |
| 'builddir': "linux-chrome", |
| 'factory': linux_chrome_factory, |
| } |
| 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, |
| } |
| 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, |
| linux_builder_chrome, |
| ] |
| |
| ####### 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/' |