#!/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/'
