#!/usr/bin/env python
#  Copyright (c) 2011 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_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",
                                            "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

DEFAULT_LINUX_TESTS = ["audio_coding_module_test",
                       "audio_coding_unittests",
                       "audio_conference_mixer_unittests",
                       "audio_device_test_api",
                       "audio_device_test_func",
                       "audioproc_unittest",
                       "cng_unittests",
                       "g711_unittests",
                       "g722_unittests",
                       "libyuv_unittests",
                       "media_file_unittests",
                       "neteq_unittests",
                       "pcm16b_unittests"
                       "resampler_unittests",
                       "rtp_rtcp_unittests",
                       "signal_processing_unittests",
                       "system_wrappers_unittests",
                       "test_bwe",
                       # TODO(andrew): enable test_fec (and below) when its
                       # running time is reduced.
                       #"test_fec",
                       "udp_transport_unittests",
                       "vad_unittests",
                       "video_coding_unittests",
                       "video_engine_core_unittests",
                       "video_processing_unittests",
                       "voice_engine_unittests",
                       "vp8_unittests",
                       "webrtc_utility_unittests"]
DEFAULT_MACOS_TESTS = ["audio_coding_module_test",
                       "audio_coding_unittests",
                       "audio_conference_mixer_unittests",
                       "audio_device_test_api",
                       "audio_device_test_func",
                       "audioproc_unittest",
                       "cng_unittests",
                       "g711_unittests",
                       "g722_unittests",
                       "libyuv_unittests",
                       "media_file_unittests",
                       "neteq_unittests",
                       "pcm16b_unittests"
                       "resampler_unittests",
                       "rtp_rtcp_unittests",
                       "signal_processing_unittests",
                       "system_wrappers_unittests",
                       "test_bwe",
                       #"test_fec",
                       "udp_transport_unittests",
                       "vad_unittests",
                       "video_coding_unittests",
                       "video_engine_core_unittests",
                       "video_processing_unittests",
                       "voice_engine_unittests",
                       "vp8_unittests",
                       "webrtc_utility_unittests"]

# TODO(andrew): most tests should now run properly on Windows.
DEFAULT_WIN_TESTS = ["audio_coding_unittests",
                     "audioproc_unittest",
                     "libyuv_unittests",
                     "neteq_unittests",
                     "resampler_unittests",
                     "system_wrappers_unittests",
                     #"test_fec"
                     "vad_unittests",
                     "video_engine_core_unittests",
                     "video_processing_unittests",
                     "voice_engine_unittests",
                     "vp8_unittests"]

HEADLESS_LINUX = ["audio_device_test_api",
                  "audio_device_test_func"]
HEADLESS_MACOS = ["audio_device_test_api",
                  "audio_device_test_func"]
HEADLESS_WIN = ["audio_device_test_api",
                "audio_device_test_func"]

############# Linux Builders #######################################
linux_factory_64_dbg = utils.WebRTCLinuxFactory(enable_coverage=True)
linux_factory_64_dbg.EnableBuild()
linux_factory_64_dbg.EnableHeadLess(HEADLESS_LINUX)
linux_factory_64_dbg.EnableTests(DEFAULT_LINUX_TESTS)

linux_factory_32_release = utils.WebRTCLinuxFactory(enable_coverage=True)
linux_factory_32_release.EnableBuild(release=True, build32=True)
linux_factory_32_release.EnableHeadLess(HEADLESS_LINUX)
linux_factory_32_release.EnableTests(DEFAULT_LINUX_TESTS)

linux_factory_64_release = utils.WebRTCLinuxFactory(enable_coverage=True)
linux_factory_64_release.EnableBuild(release=True)
linux_factory_64_release.EnableHeadLess(HEADLESS_LINUX)
linux_factory_64_release.EnableTests(DEFAULT_LINUX_TESTS)

linux_factory_32_dbg = utils.WebRTCLinuxFactory(enable_coverage=True)
linux_factory_32_dbg.EnableBuild(build32=True)
linux_factory_32_dbg.EnableHeadLess(HEADLESS_LINUX)
linux_factory_32_dbg.EnableTests(DEFAULT_LINUX_TESTS)

linux_factory_video = utils.WebRTCLinuxFactory()
linux_factory_video.EnableBuild()
linux_factory_video.EnableTests(["vie_auto_test", "voe_auto_test"])

chromeos_factory = utils.WebRTCLinuxFactory()
chromeos_factory.EnableBuild(chrome_os=True)
chromeos_factory.EnableHeadLess(HEADLESS_LINUX)
chromeos_factory.EnableTests(DEFAULT_LINUX_TESTS)

linux_clang = utils.WebRTCLinuxFactory()
linux_clang.EnableBuild(clang=True)
linux_clang.EnableHeadLess(HEADLESS_LINUX)
linux_clang.EnableTests(DEFAULT_LINUX_TESTS)

############# Mac Builders #######################################
mac_factory = utils.WebRTCMacFactory()
mac_factory.EnableBuild(build_type="both")
mac_factory.EnableHeadLess(HEADLESS_MACOS)
mac_factory.EnableTests(DEFAULT_MACOS_TESTS)

############# Windows Builders #######################################
win_factory_32_Debug = utils.WebRTCWinFactory()
win_factory_32_Debug.EnableBuild(configuration="Debug")
win_factory_32_Debug.EnableHeadLess(HEADLESS_WIN)
win_factory_32_Debug.EnableTests(DEFAULT_WIN_TESTS)

win_factory_32_Release = utils.WebRTCWinFactory()
win_factory_32_Release.EnableBuild(configuration="Release")
win_factory_32_Release.EnableHeadLess(HEADLESS_WIN)
win_factory_32_Release.EnableTests(DEFAULT_WIN_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,
      }
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]


####### 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://localhost:8010/"
c['buildbotURL'] = "http://webrtc-cb-linux-master.cbf.corp.google.com:8010/"
