Moving buildbot to internal repository.
BUG=None TEST=None Review URL: https://webrtc-codereview.appspot.com/654007 git-svn-id: http://webrtc.googlecode.com/svn/trunk@2428 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
3168e5349c
commit
ba5a97db4a
31
tools/.gitignore
vendored
31
tools/.gitignore
vendored
@ -1,4 +1,3 @@
|
|||||||
*.failed
|
|
||||||
*.pyc
|
*.pyc
|
||||||
*~
|
*~
|
||||||
.*.sw?
|
.*.sw?
|
||||||
@ -10,36 +9,6 @@
|
|||||||
.pydevproject
|
.pydevproject
|
||||||
.settings
|
.settings
|
||||||
.status_password
|
.status_password
|
||||||
/continuous_build/depot_tools
|
|
||||||
/third_party/bloat
|
|
||||||
/third_party/gaeunit
|
/third_party/gaeunit
|
||||||
/third_party/google-visualization-python
|
/third_party/google-visualization-python
|
||||||
/third_party/oauth2
|
/third_party/oauth2
|
||||||
/third_party/webtreemap
|
|
||||||
|
|
||||||
# Buildbot creates these files:
|
|
||||||
*.new
|
|
||||||
.manhole
|
|
||||||
bg_gradient.jpg
|
|
||||||
changes.pck
|
|
||||||
changes.pck.old
|
|
||||||
dropin.cache
|
|
||||||
events_*
|
|
||||||
http.log
|
|
||||||
master.cfg.sample
|
|
||||||
robots.txt
|
|
||||||
state.sqlite
|
|
||||||
state.sqlite-shm
|
|
||||||
state.sqlite-wal
|
|
||||||
twistd.log*
|
|
||||||
twistd.pid
|
|
||||||
|
|
||||||
# Chrome buildbot scripts
|
|
||||||
/continuous_build/build
|
|
||||||
|
|
||||||
# Buildbot slave log directories:
|
|
||||||
/continuous_build/build_internal/masters/master.libvpx/*/
|
|
||||||
/continuous_build/build_internal/masters/master.webrtc/*/
|
|
||||||
/continuous_build/build_internal/masters/master.tryserver.webrtc/*/
|
|
||||||
# Public HTML folder is also a subdirectory, make sure it's not ignored:
|
|
||||||
!public_html
|
|
||||||
|
34
tools/DEPS
34
tools/DEPS
@ -2,10 +2,6 @@
|
|||||||
# Use http rather than https; the latter can cause problems for users behind
|
# Use http rather than https; the latter can cause problems for users behind
|
||||||
# proxies.
|
# proxies.
|
||||||
|
|
||||||
vars = {
|
|
||||||
"chromium_trunk" : "http://src.chromium.org/svn/trunk",
|
|
||||||
}
|
|
||||||
|
|
||||||
deps = {
|
deps = {
|
||||||
# Used by quality_tracking.
|
# Used by quality_tracking.
|
||||||
"tools/third_party/gaeunit":
|
"tools/third_party/gaeunit":
|
||||||
@ -15,38 +11,8 @@ deps = {
|
|||||||
"tools/third_party/oauth2":
|
"tools/third_party/oauth2":
|
||||||
"http://github.com/simplegeo/python-oauth2.git@a83f4a29",
|
"http://github.com/simplegeo/python-oauth2.git@a83f4a29",
|
||||||
|
|
||||||
# Chromium buildbot scripts needs to be at the same level as our scripts.
|
|
||||||
"tools/continuous_build/build":
|
|
||||||
Var("chromium_trunk") + "/tools/build",
|
|
||||||
|
|
||||||
# Chromium buildbot scripts needs their own depot_tools.
|
|
||||||
"tools/continuous_build/depot_tools":
|
|
||||||
Var("chromium_trunk") + "/tools/depot_tools",
|
|
||||||
|
|
||||||
# Used by tools/quality_tracking/dashboard and tools/python_charts.
|
# Used by tools/quality_tracking/dashboard and tools/python_charts.
|
||||||
"tools/third_party/google-visualization-python":
|
"tools/third_party/google-visualization-python":
|
||||||
"http://google-visualization-python.googlecode.com/svn/trunk/@15",
|
"http://google-visualization-python.googlecode.com/svn/trunk/@15",
|
||||||
|
|
||||||
# Used by tools/continuous_build/build_internal/symsrc/calculate_bloat.py.
|
|
||||||
"tools/third_party/bloat":
|
|
||||||
"https://github.com/martine/bloat.git@31428aaa491",
|
|
||||||
"tools/third_party/webtreemap":
|
|
||||||
"https://github.com/martine/webtreemap.git@7839cf9154",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
deps_os = {
|
|
||||||
# Statically built Xvfb to be used for browser tests on headless machines.
|
|
||||||
"unix": {
|
|
||||||
"tools/continuous_build/build/third_party/xvfb":
|
|
||||||
Var("chromium_trunk") + "/tools/third_party/xvfb",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
hooks = [
|
|
||||||
{
|
|
||||||
# Make changes needed for customization of WebRTC buildbots.
|
|
||||||
"pattern": ".",
|
|
||||||
"action": ["python", "tools/fix_webrtc_buildbots.py"],
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
kjellander@webrtc.org
|
|
||||||
phoglund@webrtc.org
|
|
||||||
ivinnichenko@webrtc.org
|
|
@ -1,76 +0,0 @@
|
|||||||
WebRTC buildbots
|
|
||||||
================
|
|
||||||
These buildbot setups are based on how Chromium uses Buildbot scripts with their
|
|
||||||
own customizations of startup and master-slave configurations.
|
|
||||||
|
|
||||||
The directory layout and the files inside build_internal/masters are copied from
|
|
||||||
Chromium's repository and modified for our needs according to the guidelines at
|
|
||||||
http://goo.gl/kPSSv
|
|
||||||
|
|
||||||
One nice advantage with using this, is that all slaves run out of the box by
|
|
||||||
just syncing the WebRTC tools and the third-party dependencies. No additional
|
|
||||||
dependencies are required except a Python install.
|
|
||||||
|
|
||||||
|
|
||||||
Setup a tools workspace:
|
|
||||||
========================
|
|
||||||
mkdir webrtc-tools
|
|
||||||
cd webrtc-tools
|
|
||||||
gclient config http://webrtc.googlecode.com/svn/trunk/tools
|
|
||||||
gclient sync
|
|
||||||
cd tools/continuous_build
|
|
||||||
svn co http://src.chromium.org/svn/trunk/tools/depot_tools
|
|
||||||
echo pass > build/site_config/.bot_password
|
|
||||||
|
|
||||||
|
|
||||||
To run the build master:
|
|
||||||
========================
|
|
||||||
cd tools/continuous_build/build_internal/masters/master.webrtc
|
|
||||||
make restart
|
|
||||||
|
|
||||||
|
|
||||||
To run the try master:
|
|
||||||
======================
|
|
||||||
cd tools/continuous_build/build_internal/masters/master.tryserver.webrtc
|
|
||||||
make restart
|
|
||||||
|
|
||||||
|
|
||||||
To run a slave:
|
|
||||||
===============
|
|
||||||
cd tools/continuous_build/build/slave
|
|
||||||
|
|
||||||
There are some variables that can be set for flexible development testing:
|
|
||||||
* TESTING_SLAVENAME : Simulates the slave name. Since slave names are
|
|
||||||
based on hostnames, they must be overridden using
|
|
||||||
the this variable in order to run the slave on the
|
|
||||||
local machine.
|
|
||||||
* TESTING_MASTER : The master to connect to. We usually use 'WebRTC'
|
|
||||||
or 'TryServer'.
|
|
||||||
* TESTING_MASTER_HOST : The host the master is located at.
|
|
||||||
Default: localhost
|
|
||||||
* RUN_SLAVE_UPDATED_SCRIPTS : Set this to False to avoid checking for updates
|
|
||||||
during startup.
|
|
||||||
|
|
||||||
For Windows, make sure to add the --use_buildbot_8 flag to the run_slave.bat
|
|
||||||
in order to make the tests execute properly.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
---------
|
|
||||||
|
|
||||||
Connect to a running build master:
|
|
||||||
* Linux and Mac:
|
|
||||||
TESTING_SLAVENAME=webrtc-cb-linux-slave-1 TESTING_MASTER=WebRTC make restart
|
|
||||||
|
|
||||||
* Windows:
|
|
||||||
set TESTING_SLAVENAME=webrtc-cb-linux-slave-1
|
|
||||||
set TESTING_MASTER=WebRTC
|
|
||||||
run_slave.bat --use_buildbot_8
|
|
||||||
|
|
||||||
Connect to a running try master:
|
|
||||||
* Linux and Mac:
|
|
||||||
TESTING_SLAVENAME=linux-trybot-1 TESTING_MASTER=TryServer make restart
|
|
||||||
|
|
||||||
* Windows:
|
|
||||||
set TESTING_SLAVENAME=linux-trybot-1
|
|
||||||
set TESTING_MASTER=TryServer
|
|
||||||
run_slave.bat --use_buildbot_8
|
|
@ -1,123 +0,0 @@
|
|||||||
# -*- makefile -*-
|
|
||||||
|
|
||||||
# This file is a copy of the Chromium master-common.mk located at
|
|
||||||
# /trunk/tools/build/masters of the Chromium tools. It is just modified to add
|
|
||||||
# the PRIVATESCRIPTS_DIR property.
|
|
||||||
|
|
||||||
# This should be included by a makefile which lives in a buildmaster/buildslave
|
|
||||||
# directory (next to the buildbot.tac file). That including makefile *must*
|
|
||||||
# define MASTERPATH.
|
|
||||||
|
|
||||||
# The 'start' and 'stop' targets start and stop the buildbot master.
|
|
||||||
# The 'reconfig' target will tell a buildmaster to reload its config file.
|
|
||||||
|
|
||||||
# Note that a relative PYTHONPATH entry is relative to the current directory.
|
|
||||||
|
|
||||||
# Confirm that MASTERPATH has been defined.
|
|
||||||
ifeq ($(MASTERPATH),)
|
|
||||||
$(error MASTERPATH not defined.)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# On the Mac, the buildbot is started via the launchd mechanism as a
|
|
||||||
# LaunchAgent to give the slave a proper Mac UI environment for tests. In
|
|
||||||
# order for this to work, the plist must be present and loaded by launchd, and
|
|
||||||
# the user must be logged in to the UI. The plist is loaded by launchd at user
|
|
||||||
# login (and the job may have been initially started at that time too). Our
|
|
||||||
# Mac build slaves are all set up this way, and have auto-login enabled, so
|
|
||||||
# "make start" should just work and do the right thing.
|
|
||||||
#
|
|
||||||
# When using launchd to start the job, it also needs to be used to stop the
|
|
||||||
# job. Otherwise, launchd might try to restart the job when stopped manually
|
|
||||||
# by SIGTERM. Using SIGHUP for reconfig is safe with launchd.
|
|
||||||
#
|
|
||||||
# Because it's possible to have more than one slave on a machine (for testing),
|
|
||||||
# this tests to make sure that the slave is in the known slave location,
|
|
||||||
# /b/slave, which is what the LaunchAgent operates on.
|
|
||||||
USE_LAUNCHD := \
|
|
||||||
$(shell [ -f ~/Library/LaunchAgents/org.chromium.buildbot.$(MASTERPATH).plist ] && \
|
|
||||||
[ "$$(pwd -P)" = "/b/build/masters/$(MASTERPATH)" ] && \
|
|
||||||
echo 1)
|
|
||||||
|
|
||||||
# Elements used to construct PYTHONPATH. These may be overridden by the
|
|
||||||
# including Makefile.
|
|
||||||
#
|
|
||||||
# For example: while we transition from buildbot 0.7.12 to buildbot 0.8.x ,
|
|
||||||
# some masters will override BUILDBOT_PATH in their local Makefiles.
|
|
||||||
TOPLEVEL_DIR ?= ../../../build
|
|
||||||
THIRDPARTY_DIR ?= $(TOPLEVEL_DIR)/third_party
|
|
||||||
SCRIPTS_DIR ?= $(TOPLEVEL_DIR)/scripts
|
|
||||||
PUBLICCONFIG_DIR ?= $(TOPLEVEL_DIR)/site_config
|
|
||||||
PRIVATECONFIG_DIR ?= $(TOPLEVEL_DIR)/../build_internal/site_config
|
|
||||||
PRIVATESCRIPTS_DIR ?= $(TOPLEVEL_DIR)/../build_internal/scripts
|
|
||||||
|
|
||||||
# Packages needed by buildbot7
|
|
||||||
BUILDBOT7_PATH = $(THIRDPARTY_DIR)/buildbot_7_12:$(THIRDPARTY_DIR)/twisted_8_1
|
|
||||||
|
|
||||||
# Packages needed by buildbot8
|
|
||||||
BUILDBOT8_DEPS := \
|
|
||||||
buildbot_8_4p1 \
|
|
||||||
twisted_10_2 \
|
|
||||||
jinja2 \
|
|
||||||
sqlalchemy_0_7_1 \
|
|
||||||
sqlalchemy_migrate_0_7_1 \
|
|
||||||
tempita_0_5 \
|
|
||||||
decorator_3_3_1
|
|
||||||
|
|
||||||
nullstring :=
|
|
||||||
space := $(nullstring) #
|
|
||||||
BUILDBOT8_PATH = $(subst $(space),:,$(BUILDBOT8_DEPS:%=$(THIRDPARTY_DIR)/%))
|
|
||||||
|
|
||||||
# Default to buildbot7. To override, put this in the master's Makefile:
|
|
||||||
# BUILDBOT_PATH = $(BUILDBOT8_PATH)
|
|
||||||
BUILDBOT_PATH ?= $(BUILDBOT7_PATH)
|
|
||||||
|
|
||||||
PYTHONPATH := $(BUILDBOT_PATH):$(SCRIPTS_DIR):$(THIRDPARTY_DIR):$(PUBLICCONFIG_DIR):$(PRIVATECONFIG_DIR):$(PRIVATESCRIPTS_DIR):.
|
|
||||||
|
|
||||||
ifeq ($(BUILDBOT_PATH),$(BUILDBOT8_PATH))
|
|
||||||
start: upgrade
|
|
||||||
else
|
|
||||||
start:
|
|
||||||
endif
|
|
||||||
ifneq ($(USE_LAUNCHD),1)
|
|
||||||
PYTHONPATH=$(PYTHONPATH) python $(SCRIPTS_DIR)/common/twistd --no_save -y buildbot.tac
|
|
||||||
else
|
|
||||||
launchctl start org.chromium.buildbot.$(MASTERPATH)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(BUILDBOT_PATH),$(BUILDBOT8_PATH))
|
|
||||||
start-prof: upgrade
|
|
||||||
else
|
|
||||||
start-prof:
|
|
||||||
endif
|
|
||||||
ifneq ($(USE_LAUNCHD),1)
|
|
||||||
TWISTD_PROFILE=1 PYTHONPATH=$(PYTHONPATH) python $(SCRIPTS_DIR)/common/twistd --no_save -y buildbot.tac
|
|
||||||
else
|
|
||||||
launchctl start org.chromium.buildbot.$(MASTERPATH)
|
|
||||||
endif
|
|
||||||
|
|
||||||
stop:
|
|
||||||
ifneq ($(USE_LAUNCHD),1)
|
|
||||||
if `test -f twistd.pid`; then kill `cat twistd.pid`; fi;
|
|
||||||
else
|
|
||||||
launchctl stop org.chromium.buildbot.$(MASTERPATH)
|
|
||||||
endif
|
|
||||||
|
|
||||||
reconfig:
|
|
||||||
kill -HUP `cat twistd.pid`
|
|
||||||
|
|
||||||
log:
|
|
||||||
tail -F twistd.log
|
|
||||||
|
|
||||||
wait:
|
|
||||||
while `test -f twistd.pid`; do sleep 1; done;
|
|
||||||
|
|
||||||
restart: stop wait start log
|
|
||||||
|
|
||||||
restart-prof: stop wait start-prof log
|
|
||||||
|
|
||||||
# This target is only known to work on 0.8.x masters.
|
|
||||||
upgrade:
|
|
||||||
@[ -e '.dbconfig' ] || [ -e 'state.sqlite' ] || PYTHONPATH=$(PYTHONPATH) python buildbot upgrade-master .
|
|
||||||
|
|
||||||
setup:
|
|
||||||
@echo export PYTHONPATH=$(PYTHONPATH)
|
|
@ -1,5 +0,0 @@
|
|||||||
# -*- makefile -*-
|
|
||||||
|
|
||||||
BUILDBOT_PATH = $(BUILDBOT8_PATH)
|
|
||||||
MASTERPATH := master.libvpx
|
|
||||||
include ../master-common.mk
|
|
@ -1,4 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
|
|
||||||
from buildbot.scripts import runner
|
|
||||||
runner.run()
|
|
@ -1,11 +0,0 @@
|
|||||||
import os
|
|
||||||
|
|
||||||
from twisted.application import service
|
|
||||||
from buildbot.master import BuildMaster
|
|
||||||
|
|
||||||
basedir = os.path.dirname(os.path.abspath(__file__))
|
|
||||||
configfile = r'master.cfg'
|
|
||||||
|
|
||||||
application = service.Application('buildmaster')
|
|
||||||
BuildMaster(basedir, configfile).setServiceParent(application)
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
#!/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.
|
|
||||||
|
|
||||||
from master import master_utils
|
|
||||||
from master import slaves_list
|
|
||||||
import config
|
|
||||||
|
|
||||||
# This master configuration file reuses most of the WebRTC buildbot master,
|
|
||||||
# to avoid duplicating the configuration as much as possible.
|
|
||||||
# It uses a global variable to get the different configuration required for
|
|
||||||
# the libvpx source path to be set as custom_deps for the build factories.
|
|
||||||
LIBVPX_BUILD = True
|
|
||||||
LIBVPX_DEPS_LIST = [
|
|
||||||
('trunk/third_party/libvpx/source/libvpx',
|
|
||||||
'http://git.chromium.org/webm/libvpx.git@master'),
|
|
||||||
]
|
|
||||||
|
|
||||||
vars = {'LIBVPX_BUILD':LIBVPX_BUILD,
|
|
||||||
'LIBVPX_DEPS_LIST': LIBVPX_DEPS_LIST}
|
|
||||||
execfile('../master.webrtc/master.cfg', vars, vars)
|
|
||||||
|
|
||||||
c = BuildmasterConfig = vars['c']
|
|
||||||
|
|
||||||
# Remove the Chrome Bloat builder since it's not useful for the libvpx project.
|
|
||||||
c['builders'] = filter(lambda x: x['name'] != 'LinuxChromeBloat', c['builders'])
|
|
||||||
|
|
@ -1,86 +0,0 @@
|
|||||||
#!/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.
|
|
||||||
|
|
||||||
"""Chrome+WebRTC bots customized for Libvpx build."""
|
|
||||||
|
|
||||||
from buildbot.schedulers import timed
|
|
||||||
|
|
||||||
from master import master_config
|
|
||||||
from webrtc_buildbot import webrtc_chromium_factory
|
|
||||||
|
|
||||||
def linux():
|
|
||||||
return webrtc_chromium_factory.ChromiumWebRTCFactory('src/build', 'linux2')
|
|
||||||
def mac():
|
|
||||||
return webrtc_chromium_factory.ChromiumWebRTCFactory('src/build', 'mac')
|
|
||||||
def win():
|
|
||||||
return webrtc_chromium_factory.ChromiumWebRTCFactory('src/build', 'win32')
|
|
||||||
|
|
||||||
CHROME_LKGR = 'http://chromium-status.appspot.com/lkgr'
|
|
||||||
|
|
||||||
|
|
||||||
def ConfigureChromeWebRTCBuilders(c, custom_deps_list=[]):
|
|
||||||
# The Libvpx Chrome bots are setup without the Chromium helper classes since
|
|
||||||
# they don't have support for a Nightly scheduler.
|
|
||||||
|
|
||||||
# Linux
|
|
||||||
chrome_linux_debug_factory = linux().ChromiumWebRTCLatestFactory(
|
|
||||||
target='Debug',
|
|
||||||
factory_properties={'safesync_url': CHROME_LKGR},
|
|
||||||
custom_deps_list=custom_deps_list)
|
|
||||||
|
|
||||||
chrome_linux_debug_builder = {
|
|
||||||
'name': 'LinuxChrome',
|
|
||||||
'factory': chrome_linux_debug_factory,
|
|
||||||
}
|
|
||||||
c['builders'].append(chrome_linux_debug_builder)
|
|
||||||
c['schedulers'][0].builderNames.append('LinuxChrome')
|
|
||||||
|
|
||||||
# Mac 10.7 (Lion) ...
|
|
||||||
chrome_mac_debug_factory = mac().ChromiumWebRTCLatestFactory(
|
|
||||||
target='Debug',
|
|
||||||
factory_properties={'safesync_url': CHROME_LKGR},
|
|
||||||
custom_deps_list=custom_deps_list)
|
|
||||||
|
|
||||||
chrome_mac_debug_builder = {
|
|
||||||
'name': 'MacChrome',
|
|
||||||
'factory': chrome_mac_debug_factory,
|
|
||||||
}
|
|
||||||
c['builders'].append(chrome_mac_debug_builder)
|
|
||||||
c['schedulers'][0].builderNames.append('MacChrome')
|
|
||||||
|
|
||||||
# Windows...
|
|
||||||
chrome_win_debug_factory = win().ChromiumWebRTCLatestFactory(
|
|
||||||
target='Debug',
|
|
||||||
factory_properties={'safesync_url': CHROME_LKGR},
|
|
||||||
custom_deps_list=custom_deps_list)
|
|
||||||
|
|
||||||
chrome_win_debug_builder = {
|
|
||||||
'name': 'WinChrome',
|
|
||||||
'factory': chrome_win_debug_factory,
|
|
||||||
}
|
|
||||||
c['builders'].append(chrome_win_debug_builder)
|
|
||||||
c['schedulers'][0].builderNames.append('WinChrome')
|
|
||||||
|
|
||||||
|
|
||||||
def ConfigureNightlyChromeWebRTCBloatBuilder(c, custom_deps_list=[]):
|
|
||||||
# Must add a Bloat builder for Libvpx to avoid an error during the
|
|
||||||
# slave configuration check. This builder will be removed at the last stage of
|
|
||||||
# the configuration loading (see master.libvpx/master.cfg).
|
|
||||||
chrome_bloat_factory = linux().ChromiumWebRTCBloatFactory(
|
|
||||||
target='Release',
|
|
||||||
factory_properties={'safesync_url': CHROME_LKGR,
|
|
||||||
'gclient_env': {'GYP_DEFINES': 'profiling=1'}},
|
|
||||||
custom_deps_list=custom_deps_list)
|
|
||||||
|
|
||||||
chrome_bloat_builder = {
|
|
||||||
'name': 'LinuxChromeBloat',
|
|
||||||
'factory': chrome_bloat_factory,
|
|
||||||
'category': 'linux',
|
|
||||||
}
|
|
||||||
c['builders'].append(chrome_bloat_builder)
|
|
@ -1 +0,0 @@
|
|||||||
../master.webrtc/master_source_cfg.py
|
|
@ -1 +0,0 @@
|
|||||||
../master.webrtc/public_html
|
|
@ -1 +0,0 @@
|
|||||||
../master.webrtc/slaves.cfg
|
|
@ -1,5 +0,0 @@
|
|||||||
# -*- makefile -*-
|
|
||||||
|
|
||||||
BUILDBOT_PATH = $(BUILDBOT8_PATH)
|
|
||||||
MASTERPATH := master.tryserver.webrtc
|
|
||||||
include ../master-common.mk
|
|
@ -1,4 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
|
|
||||||
from buildbot.scripts import runner
|
|
||||||
runner.run()
|
|
@ -1,11 +0,0 @@
|
|||||||
import os
|
|
||||||
|
|
||||||
from twisted.application import service
|
|
||||||
from buildbot.master import BuildMaster
|
|
||||||
|
|
||||||
basedir = os.path.dirname(os.path.abspath(__file__))
|
|
||||||
configfile = r'master.cfg'
|
|
||||||
|
|
||||||
application = service.Application('buildmaster')
|
|
||||||
BuildMaster(basedir, configfile).setServiceParent(application)
|
|
||||||
|
|
@ -1,290 +0,0 @@
|
|||||||
#!/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__ = 'kjellander@webrtc.org (Henrik Kjellander)'
|
|
||||||
|
|
||||||
c = BuildmasterConfig = {}
|
|
||||||
|
|
||||||
import os
|
|
||||||
from buildbot.buildslave import BuildSlave
|
|
||||||
from buildbot.changes.pb import PBChangeSource
|
|
||||||
from buildbot.changes.svnpoller import SVNPoller
|
|
||||||
from buildbot.process import factory
|
|
||||||
from buildbot.scheduler import Scheduler
|
|
||||||
from buildbot.status import html
|
|
||||||
from buildbot.status import mail
|
|
||||||
from buildbot.steps import shell
|
|
||||||
|
|
||||||
# These modules come from scripts, which must be in the PYTHONPATH.
|
|
||||||
from master import master_utils
|
|
||||||
from master import slaves_list
|
|
||||||
from master.builders_pools import BuildersPools
|
|
||||||
from master.try_job_http import TryJobHTTP
|
|
||||||
from master.try_job_svn import TryJobSubversion
|
|
||||||
from master.try_mail_notifier import TryMailNotifier
|
|
||||||
import config
|
|
||||||
|
|
||||||
from webrtc_buildbot import utils
|
|
||||||
|
|
||||||
ActiveMaster = config.Master.TryServer
|
|
||||||
|
|
||||||
####### CHANGESOURCES
|
|
||||||
c['change_source'] = []
|
|
||||||
|
|
||||||
####### SCHEDULERS
|
|
||||||
pools = BuildersPools('webrtc')
|
|
||||||
pools['webrtc'].append('android')
|
|
||||||
pools['webrtc'].append('android_ndk')
|
|
||||||
pools['webrtc'].append('linux')
|
|
||||||
pools['webrtc'].append('linux_rel')
|
|
||||||
pools['webrtc'].append('mac')
|
|
||||||
pools['webrtc'].append('mac_rel')
|
|
||||||
pools['webrtc'].append('win')
|
|
||||||
pools['webrtc'].append('win_rel')
|
|
||||||
|
|
||||||
last_good_urls = {'webrtc': ActiveMaster.last_good_url}
|
|
||||||
code_review_sites = {'webrtc': ActiveMaster.code_review_site}
|
|
||||||
|
|
||||||
try_scheduler = TryJobHTTP(name='try_job_http',
|
|
||||||
port=ActiveMaster.try_job_port,
|
|
||||||
last_good_urls=last_good_urls,
|
|
||||||
code_review_sites=code_review_sites,
|
|
||||||
pools=pools)
|
|
||||||
c['schedulers'] = [try_scheduler]
|
|
||||||
|
|
||||||
####### TESTS
|
|
||||||
|
|
||||||
# Tests to run on the trybots
|
|
||||||
# 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),
|
|
||||||
'audioproc_unittest': (True, True, True),
|
|
||||||
'bitrate_controller_unittests': (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),
|
|
||||||
'remote_bitrate_estimator_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_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, True, True),
|
|
||||||
'webrtc_utility_unittests': (True, True, True),
|
|
||||||
}
|
|
||||||
linux_normal_tests = utils.GetEnabledTests(NORMAL_TESTS, 'Linux')
|
|
||||||
mac_normal_tests = utils.GetEnabledTests(NORMAL_TESTS, 'Mac')
|
|
||||||
windows_normal_tests = utils.GetEnabledTests(NORMAL_TESTS, 'Windows')
|
|
||||||
|
|
||||||
####### FACTORIES
|
|
||||||
# Linux
|
|
||||||
linux_factory_dbg = utils.WebRTCLinuxFactory(
|
|
||||||
utils.BuildStatusOracle('linux_factory_dbg'), is_try_slave=True)
|
|
||||||
linux_factory_dbg.EnableBuild()
|
|
||||||
linux_factory_dbg.EnableTests(linux_normal_tests)
|
|
||||||
|
|
||||||
linux_factory_release = utils.WebRTCLinuxFactory(
|
|
||||||
utils.BuildStatusOracle('linux_factory_release'), is_try_slave=True)
|
|
||||||
linux_factory_release.EnableBuild(release=True)
|
|
||||||
linux_factory_release.EnableTests(linux_normal_tests)
|
|
||||||
|
|
||||||
android_factory = utils.WebRTCAndroidFactory(
|
|
||||||
utils.BuildStatusOracle('android_factory'), is_try_slave=True)
|
|
||||||
android_factory.EnableBuild(product='toro')
|
|
||||||
|
|
||||||
android_ndk_factory = utils.WebRTCAndroidNDKFactory(
|
|
||||||
utils.BuildStatusOracle('android_ndk_factory'), is_try_slave=True)
|
|
||||||
android_ndk_factory.EnableBuild()
|
|
||||||
|
|
||||||
# Mac
|
|
||||||
mac_factory_dbg = utils.WebRTCMacFactory(
|
|
||||||
utils.BuildStatusOracle('mac_factory_dbg'), is_try_slave=True)
|
|
||||||
mac_factory_dbg.EnableBuild(build_type='make')
|
|
||||||
mac_factory_dbg.EnableTests(mac_normal_tests)
|
|
||||||
|
|
||||||
mac_factory_release = utils.WebRTCMacFactory(
|
|
||||||
utils.BuildStatusOracle('mac_factory_release'), is_try_slave=True)
|
|
||||||
mac_factory_release.EnableBuild(build_type='make', release=True)
|
|
||||||
mac_factory_release.EnableTests(mac_normal_tests)
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
win_factory_debug = utils.WebRTCWinFactory(
|
|
||||||
utils.BuildStatusOracle('win_factory_debug'), is_try_slave=True)
|
|
||||||
win_factory_debug.EnableBuild(configuration='Debug')
|
|
||||||
win_factory_debug.EnableTests(windows_normal_tests)
|
|
||||||
|
|
||||||
win_factory_release = utils.WebRTCWinFactory(
|
|
||||||
utils.BuildStatusOracle('win_factory_release'), is_try_slave=True)
|
|
||||||
win_factory_release.EnableBuild(configuration='Release')
|
|
||||||
win_factory_release.EnableTests(windows_normal_tests)
|
|
||||||
|
|
||||||
####### BUILDERS
|
|
||||||
android_builder = {
|
|
||||||
'name': 'android',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-7',
|
|
||||||
'builddir': 'android-trybot',
|
|
||||||
'factory': android_factory,
|
|
||||||
}
|
|
||||||
android_ndk_builder = {
|
|
||||||
'name': 'android_ndk',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-10',
|
|
||||||
'builddir': 'android-ndk-trybot',
|
|
||||||
'factory': android_ndk_factory,
|
|
||||||
}
|
|
||||||
linux_builder_debug = {
|
|
||||||
'name': 'linux',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-11',
|
|
||||||
'builddir': 'linux-trybot-1',
|
|
||||||
'factory': linux_factory_dbg,
|
|
||||||
}
|
|
||||||
linux_builder_release = {
|
|
||||||
'name': 'linux_rel',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-12',
|
|
||||||
'builddir': 'linux-trybot-2',
|
|
||||||
'factory': linux_factory_release,
|
|
||||||
}
|
|
||||||
mac_builder_debug = {
|
|
||||||
'name': 'mac',
|
|
||||||
'slavename': 'dhcp-172-28-249-129',
|
|
||||||
'builddir': 'mac-trybot-1',
|
|
||||||
'factory': mac_factory_dbg,
|
|
||||||
}
|
|
||||||
mac_builder_release = {
|
|
||||||
'name': 'mac_rel',
|
|
||||||
'slavename': 'dhcp-172-28-249-145',
|
|
||||||
'builddir': 'mac-trybot-2',
|
|
||||||
'factory': mac_factory_release,
|
|
||||||
}
|
|
||||||
win_builder_debug = {
|
|
||||||
'name': 'win',
|
|
||||||
'slavename': 'webrtc-win2k8-3',
|
|
||||||
'builddir': 'win-trybot-1',
|
|
||||||
'factory': win_factory_debug,
|
|
||||||
}
|
|
||||||
win_builder_release = {
|
|
||||||
'name': 'win_rel',
|
|
||||||
'slavename': 'webrtc-win-x86',
|
|
||||||
'builddir': 'win-trybot-2',
|
|
||||||
'factory': win_factory_release,
|
|
||||||
}
|
|
||||||
|
|
||||||
c['builders'] = [
|
|
||||||
win_builder_debug,
|
|
||||||
win_builder_release,
|
|
||||||
mac_builder_debug,
|
|
||||||
mac_builder_release,
|
|
||||||
linux_builder_debug,
|
|
||||||
linux_builder_release,
|
|
||||||
android_builder,
|
|
||||||
android_ndk_builder,
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def NextJob(builder, requests):
|
|
||||||
"""Always prioritize commit queue jobs over try jobs."""
|
|
||||||
for req in requests:
|
|
||||||
if any(c.who == 'commit-bot@webrtc.org' for c in req.source.changes):
|
|
||||||
return req
|
|
||||||
return requests[0]
|
|
||||||
|
|
||||||
|
|
||||||
# Slaves are loaded from slaves.cfg.
|
|
||||||
slaves = slaves_list.SlavesList('slaves.cfg', 'TryServer')
|
|
||||||
|
|
||||||
for builder in c['builders']:
|
|
||||||
# Associate the slaves to the builders. The configuration is in slaves.cfg.
|
|
||||||
builder['slavenames'] = slaves.GetSlavesName(builder=builder['name'])
|
|
||||||
# Don't enable auto_reboot for our bots (Chrome uses it since they don't trust
|
|
||||||
# their unit tests to clean up properly)
|
|
||||||
builder['auto_reboot'] = False
|
|
||||||
# Prioritize commit-queue jobs over try jobs.
|
|
||||||
# This is documented starting with 0.8.2
|
|
||||||
# http://buildbot.net/buildbot/docs/0.8.2/Prioritizing-Builds.html#Prioritizing-Builds
|
|
||||||
# but appears to be working on 0.7.12 already.
|
|
||||||
builder['nextBuild'] = NextJob
|
|
||||||
|
|
||||||
|
|
||||||
####### BUILDSLAVES
|
|
||||||
|
|
||||||
# The 'slaves' list defines the set of allowable buildslaves. List all the
|
|
||||||
# slaves registered to a builder. Remove dupes.
|
|
||||||
c['slaves'] = master_utils.AutoSetupSlaves(c['builders'],
|
|
||||||
config.Master.GetBotPassword())
|
|
||||||
|
|
||||||
# Make sure everything works together.
|
|
||||||
master_utils.VerifySetup(c, slaves)
|
|
||||||
|
|
||||||
# Adds common status and tools to this master.
|
|
||||||
# Use our own mail notifier.
|
|
||||||
master_utils.AutoSetupMaster(c, ActiveMaster, mail_notifier=False,
|
|
||||||
public_html='../master.webrtc/public_html',
|
|
||||||
templates=['./templates',
|
|
||||||
'../master.webrtc/templates'])
|
|
||||||
|
|
||||||
####### STATUS TARGETS
|
|
||||||
|
|
||||||
# Use an environment variable to easily avoid enabling e-mail for development.
|
|
||||||
if not os.getenv('BUILDBOT_DEVELOPMENT_MODE'):
|
|
||||||
email_status = mail.MailNotifier(
|
|
||||||
fromaddr='webrtc-try-watchlist@google.com',
|
|
||||||
extraRecipients=['webrtc-try-watchlist@google.com'],
|
|
||||||
sendToInterestedUsers=True,
|
|
||||||
mode='failing')
|
|
||||||
c['status'] += [email_status]
|
|
||||||
|
|
||||||
# Try job result emails.
|
|
||||||
c['status'].append(TryMailNotifier(
|
|
||||||
fromaddr='webrtc-try-watchlist@google.com',
|
|
||||||
subject='try %(result)s for %(reason)s on %(builder)s @ r%(revision)s',
|
|
||||||
mode='all',
|
|
||||||
lookup=master_utils.UsersAreEmails()))
|
|
||||||
|
|
||||||
####### DB URL
|
|
||||||
|
|
||||||
# This specifies what database buildbot uses to store change and scheduler
|
|
||||||
# state. You can leave this at its default for all but the largest
|
|
||||||
# installations.
|
|
||||||
c['db_url'] = 'sqlite:///state.sqlite'
|
|
||||||
|
|
||||||
####### 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')
|
|
@ -1,457 +0,0 @@
|
|||||||
body {
|
|
||||||
margin-bottom:50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
body, td {
|
|
||||||
font-family: Verdana, Cursor;
|
|
||||||
font-size: 10px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:link,a:visited,a:active {
|
|
||||||
color: #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
table {
|
|
||||||
border-spacing: 1px 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table td {
|
|
||||||
padding: 3px 0px 3px 0px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Project {
|
|
||||||
width: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.LastBuild, .Activity {
|
|
||||||
padding: 0 0 0 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.LastBuild, .Activity, .Builder, .BuildStep {
|
|
||||||
width: 155px;
|
|
||||||
max-width: 155px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Chromium Specific styles */
|
|
||||||
div.BuildResultInfo {
|
|
||||||
color: #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.Announcement {
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.Announcement > a:hover {
|
|
||||||
color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.Announcement > div.Notice {
|
|
||||||
background-color: #afdaff;
|
|
||||||
padding: 0.5em;
|
|
||||||
font-size: 16px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.Announcement > div.Open {
|
|
||||||
border: 3px solid #8fdf5f;
|
|
||||||
padding: 0.5em;
|
|
||||||
font-size: 16px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.Announcement > div.Closed {
|
|
||||||
border: 5px solid #e98080;
|
|
||||||
padding: 0.5em;
|
|
||||||
font-size: 24px;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Time {
|
|
||||||
color: #000;
|
|
||||||
border-bottom: 1px solid #aaa;
|
|
||||||
background-color: #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Activity, td.Change, td.Builder {
|
|
||||||
color: #333333;
|
|
||||||
background-color: #CCCCCC;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Change {
|
|
||||||
border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
}
|
|
||||||
td.Event {
|
|
||||||
color: #777;
|
|
||||||
background-color: #ddd;
|
|
||||||
border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Activity {
|
|
||||||
border-top-left-radius: 10px;
|
|
||||||
-webkit-border-top-left-radius: 10px;
|
|
||||||
-moz-border-radius-topleft: 10px;
|
|
||||||
min-height: 20px;
|
|
||||||
padding: 2px 0 2px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.idle, td.waiting, td.offline, td.building {
|
|
||||||
border-top-left-radius: 0px;
|
|
||||||
-webkit-border-top-left-radius: 0px;
|
|
||||||
-moz-border-radius-topleft: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.LastBuild {
|
|
||||||
border-top-left-radius: 5px;
|
|
||||||
-webkit-border-top-left-radius: 5px;
|
|
||||||
-moz-border-radius-topleft: 5px;
|
|
||||||
border-top-right-radius: 5px;
|
|
||||||
-webkit-border-top-right-radius: 5px;
|
|
||||||
-moz-border-radius-topright: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Console view styles */
|
|
||||||
|
|
||||||
td.DevRev {
|
|
||||||
padding: 4px 8px 4px 8px;
|
|
||||||
color: #333333;
|
|
||||||
border-top-left-radius: 5px;
|
|
||||||
-webkit-border-top-left-radius: 5px;
|
|
||||||
-moz-border-radius-topleft: 5px;
|
|
||||||
background-color: #eee;
|
|
||||||
width: 1%;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevRevCollapse {
|
|
||||||
border-bottom-left-radius: 5px;
|
|
||||||
-webkit-border-bottom-left-radius: 5px;
|
|
||||||
-moz-border-radius-bottomleft: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevName {
|
|
||||||
padding: 4px 8px 4px 8px;
|
|
||||||
color: #333333;
|
|
||||||
background-color: #eee;
|
|
||||||
width: 1%;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevStatus {
|
|
||||||
padding: 4px 4px 4px 4px;
|
|
||||||
color: #333333;
|
|
||||||
background-color: #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevSlave {
|
|
||||||
padding: 4px 4px 4px 4px;
|
|
||||||
color: #333333;
|
|
||||||
background-color: #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.first {
|
|
||||||
border-top-left-radius: 5px;
|
|
||||||
-webkit-border-top-left-radius: 5px;
|
|
||||||
-moz-border-radius-topleft: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.last {
|
|
||||||
border-top-right-radius: 5px;
|
|
||||||
-webkit-border-top-right-radius: 5px;
|
|
||||||
-moz-border-radius-topright: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevStatusCategory {
|
|
||||||
border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
border-width:1px;
|
|
||||||
border-style:solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevStatusCollapse {
|
|
||||||
border-bottom-right-radius: 5px;
|
|
||||||
-webkit-border-bottom-right-radius: 5px;
|
|
||||||
-moz-border-radius-bottomright: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevDetails {
|
|
||||||
font-weight: normal;
|
|
||||||
padding: 8px 8px 8px 8px;
|
|
||||||
color: #333333;
|
|
||||||
background-color: #eee;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevComment {
|
|
||||||
font-weight: normal;
|
|
||||||
padding: 8px 8px 8px 8px;
|
|
||||||
color: #333333;
|
|
||||||
border-bottom-right-radius: 5px;
|
|
||||||
-webkit-border-bottom-right-radius: 5px;
|
|
||||||
-moz-border-radius-bottomright: 5px;
|
|
||||||
border-bottom-left-radius: 5px;
|
|
||||||
-webkit-border-bottom-left-radius: 5px;
|
|
||||||
-moz-border-radius-bottomleft: 5px;
|
|
||||||
background-color: #eee;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Alt {
|
|
||||||
background-color: #CCCCCC;
|
|
||||||
}
|
|
||||||
|
|
||||||
.legend {
|
|
||||||
border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
width: 100px;
|
|
||||||
max-width: 100px;
|
|
||||||
text-align:center;
|
|
||||||
padding: 2px 2px 2px 2px;
|
|
||||||
height:14px;
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.DevStatusBox {
|
|
||||||
text-align:center;
|
|
||||||
height:20px;
|
|
||||||
padding:0 2px;
|
|
||||||
line-height:0;
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.DevStatusBox a {
|
|
||||||
opacity: 0.85;
|
|
||||||
border-width:1px;
|
|
||||||
border-style:solid;
|
|
||||||
border-radius: 4px;
|
|
||||||
-webkit-border-radius: 4px;
|
|
||||||
-moz-border-radius: 4px;
|
|
||||||
display:block;
|
|
||||||
width:90%;
|
|
||||||
height:20px;
|
|
||||||
line-height:20px;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.DevSlaveBox {
|
|
||||||
text-align:center;
|
|
||||||
height:10px;
|
|
||||||
padding:0 2px;
|
|
||||||
line-height:0;
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.DevSlaveBox a {
|
|
||||||
opacity: 0.85;
|
|
||||||
border-width:1px;
|
|
||||||
border-style:solid;
|
|
||||||
border-radius: 4px;
|
|
||||||
-webkit-border-radius: 4px;
|
|
||||||
-moz-border-radius: 4px;
|
|
||||||
display:block;
|
|
||||||
width:90%;
|
|
||||||
height:10px;
|
|
||||||
line-height:20px;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.noround {
|
|
||||||
border-radius: 0px;
|
|
||||||
-webkit-border-radius: 0px;
|
|
||||||
-moz-border-radius: 0px;
|
|
||||||
position: relative;
|
|
||||||
margin-top: -8px;
|
|
||||||
margin-bottom: -8px;
|
|
||||||
height: 36px;
|
|
||||||
border-top-width: 0;
|
|
||||||
border-bottom-width: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.begin {
|
|
||||||
border-top-width:1px;
|
|
||||||
position: relative;
|
|
||||||
margin-top: 0px;
|
|
||||||
margin-bottom: -7px;
|
|
||||||
height: 27px;
|
|
||||||
border-top-left-radius: 4px;
|
|
||||||
-webkit-border-top-left-radius: 4px;
|
|
||||||
-moz-border-radius-topleft: 4px;
|
|
||||||
border-top-right-radius: 4px;
|
|
||||||
-webkit-border-top-right-radius: 4px;
|
|
||||||
-moz-border-radius-topright: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.end {
|
|
||||||
border-bottom-width:1px;
|
|
||||||
position: relative;
|
|
||||||
margin-top: -7px;
|
|
||||||
margin-bottom: 0px;
|
|
||||||
height: 27px;
|
|
||||||
border-bottom-left-radius: 4px;
|
|
||||||
-webkit-border-bottom-left-radius: 4px;
|
|
||||||
-moz-border-radius-bottomleft: 4px;
|
|
||||||
border-bottom-right-radius: 4px;
|
|
||||||
-webkit-border-bottom-right-radius: 4px;
|
|
||||||
-moz-border-radius-bottomright: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.center_align {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.right_align {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.left_align {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.BuildWaterfall {
|
|
||||||
border-radius: 7px;
|
|
||||||
-webkit-border-radius: 7px;
|
|
||||||
-moz-border-radius: 7px;
|
|
||||||
position: absolute;
|
|
||||||
left: 0px;
|
|
||||||
top: 0px;
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
padding: 4px 4px 4px 4px;
|
|
||||||
float: left;
|
|
||||||
display: none;
|
|
||||||
border-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* LastBuild, BuildStep states */
|
|
||||||
.success {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #8fdf5f;
|
|
||||||
border-color: #4F8530;
|
|
||||||
}
|
|
||||||
|
|
||||||
.failure {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #e98080;
|
|
||||||
border-color: #A77272;
|
|
||||||
}
|
|
||||||
|
|
||||||
.warnings {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #ffc343;
|
|
||||||
border-color: #C29D46;
|
|
||||||
}
|
|
||||||
|
|
||||||
.exception, td.offline {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #e0b0ff;
|
|
||||||
border-color: #ACA0B3;
|
|
||||||
}
|
|
||||||
|
|
||||||
.start,.running, td.building {
|
|
||||||
color: #666666;
|
|
||||||
background-color: #fffc6c;
|
|
||||||
border-color: #C5C56D;
|
|
||||||
}
|
|
||||||
|
|
||||||
.running_failure {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #fffc6c;
|
|
||||||
border-color: #ff0000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.start {
|
|
||||||
border-bottom-left-radius: 10px;
|
|
||||||
-webkit-border-bottom-left-radius: 10px;
|
|
||||||
-moz-border-radius-bottomleft: 10px;
|
|
||||||
border-bottom-right-radius: 10px;
|
|
||||||
-webkit-border-bottom-right-radius: 10px;
|
|
||||||
-moz-border-radius-bottomright: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notstarted {
|
|
||||||
border-width:1px;
|
|
||||||
border-style:solid;
|
|
||||||
border-color:#aaa;
|
|
||||||
}
|
|
||||||
|
|
||||||
.closed {
|
|
||||||
background-color: #ff0000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.closed .large {
|
|
||||||
font-size: 1.5em;
|
|
||||||
font-weight: bolder;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Project a:hover, td.start a:hover {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mini-box {
|
|
||||||
text-align:center;
|
|
||||||
height:20px;
|
|
||||||
padding:0 2px;
|
|
||||||
line-height:0;
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mini-box a {
|
|
||||||
border-radius: 0;
|
|
||||||
-webkit-border-radius: 0;
|
|
||||||
-moz-border-radius: 0;
|
|
||||||
display:block;
|
|
||||||
width:100%;
|
|
||||||
height:20px;
|
|
||||||
line-height:20px;
|
|
||||||
margin-top:-30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mini-closed {
|
|
||||||
-box-sizing:border-box;
|
|
||||||
-webkit-box-sizing:border-box;
|
|
||||||
border:4px solid red;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* grid styles */
|
|
||||||
|
|
||||||
table.Grid {
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.Grid tr td {
|
|
||||||
padding: 0.2em;
|
|
||||||
margin: 0px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.Grid tr td.title {
|
|
||||||
font-size: 90%;
|
|
||||||
border-right: 1px gray solid;
|
|
||||||
border-bottom: 1px gray solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.Grid tr td.sourcestamp {
|
|
||||||
font-size: 90%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.Grid tr td.builder {
|
|
||||||
text-align: right;
|
|
||||||
font-size: 90%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.Grid tr td.build {
|
|
||||||
border: 1px gray solid;
|
|
||||||
}
|
|
Binary file not shown.
Before Width: | Height: | Size: 1.1 KiB |
@ -1,86 +0,0 @@
|
|||||||
# -*- python -*-
|
|
||||||
# ex: set syntax=python:
|
|
||||||
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
|
||||||
# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
# found in the LICENSE file.
|
|
||||||
|
|
||||||
# See master.experimental/slaves.cfg for documentation.
|
|
||||||
|
|
||||||
|
|
||||||
def linux():
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
'master': 'TryServer',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'android',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-13',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'TryServer',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'android_ndk',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-14',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'TryServer',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'linux',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-11',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'TryServer',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'linux_rel',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-12',
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
def mac():
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
'master': 'TryServer',
|
|
||||||
'os': 'mac',
|
|
||||||
'version': '10.7',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'mac',
|
|
||||||
'hostname': 'dhcp-172-28-249-129',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'TryServer',
|
|
||||||
'os': 'mac',
|
|
||||||
'version': '10.7',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'mac_rel',
|
|
||||||
'hostname': 'dhcp-172-28-249-145',
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
def windows():
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
'master': 'TryServer',
|
|
||||||
'os': 'win',
|
|
||||||
'version': 'server2008',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'win',
|
|
||||||
'hostname': 'webrtc-win2k8-3',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'TryServer',
|
|
||||||
'os': 'win',
|
|
||||||
'version': 'server2008',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'win_rel',
|
|
||||||
'hostname': 'webrtc-win-x86',
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
slaves = linux() + mac() + windows()
|
|
@ -1,5 +0,0 @@
|
|||||||
# -*- makefile -*-
|
|
||||||
|
|
||||||
BUILDBOT_PATH = $(BUILDBOT8_PATH)
|
|
||||||
MASTERPATH := master.webrtc
|
|
||||||
include ../master-common.mk
|
|
@ -1,4 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
|
|
||||||
from buildbot.scripts import runner
|
|
||||||
runner.run()
|
|
@ -1,11 +0,0 @@
|
|||||||
import os
|
|
||||||
|
|
||||||
from twisted.application import service
|
|
||||||
from buildbot.master import BuildMaster
|
|
||||||
|
|
||||||
basedir = os.path.dirname(os.path.abspath(__file__))
|
|
||||||
configfile = r'master.cfg'
|
|
||||||
|
|
||||||
application = service.Application('buildmaster')
|
|
||||||
BuildMaster(basedir, configfile).setServiceParent(application)
|
|
||||||
|
|
@ -1,515 +0,0 @@
|
|||||||
#!/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.
|
|
||||||
|
|
||||||
c = BuildmasterConfig = {}
|
|
||||||
|
|
||||||
import os
|
|
||||||
from buildbot.buildslave import BuildSlave
|
|
||||||
from buildbot.changes.pb import PBChangeSource
|
|
||||||
from buildbot.changes.svnpoller import SVNPoller
|
|
||||||
from buildbot.process import factory
|
|
||||||
from buildbot.schedulers import basic
|
|
||||||
from buildbot.schedulers import timed
|
|
||||||
from buildbot.status import html
|
|
||||||
from buildbot.status import mail
|
|
||||||
from buildbot.status.web import grid
|
|
||||||
from buildbot.steps import shell
|
|
||||||
|
|
||||||
# These modules come from scripts, which must be in the PYTHONPATH.
|
|
||||||
from master import master_utils
|
|
||||||
from master import slaves_list
|
|
||||||
import config
|
|
||||||
from webrtc_buildbot import utils
|
|
||||||
|
|
||||||
|
|
||||||
def is_libvpx_build():
|
|
||||||
"""Used to check if this master is the default or the libvpx master."""
|
|
||||||
return 'LIBVPX_BUILD' in globals()
|
|
||||||
|
|
||||||
ActiveMaster = (config.Master.Libvpx if is_libvpx_build() else
|
|
||||||
config.Master.WebRTC)
|
|
||||||
|
|
||||||
####### CHANGESOURCES
|
|
||||||
import master_source_cfg
|
|
||||||
master_source_cfg.ConfigureChangeSource(config, c)
|
|
||||||
|
|
||||||
####### SCHEDULERS
|
|
||||||
from buildbot.scheduler import Scheduler
|
|
||||||
builder_names = ['Win32Debug',
|
|
||||||
'Win32Release',
|
|
||||||
'MacOS32DBG',
|
|
||||||
'MacOS32Release',
|
|
||||||
'Linux32DBG',
|
|
||||||
'Linux32Release',
|
|
||||||
'Linux64DBG',
|
|
||||||
'Linux64Release',
|
|
||||||
'LinuxClang',
|
|
||||||
'LinuxMemcheck',
|
|
||||||
'LinuxTsan',
|
|
||||||
'LinuxAsan',
|
|
||||||
'Linux64DBG-GCC4.6',
|
|
||||||
'LinuxLargeTests',
|
|
||||||
'MacLargeTests',
|
|
||||||
'WinLargeTests',
|
|
||||||
'Android',
|
|
||||||
'AndroidNDK',
|
|
||||||
'ChromeOS',
|
|
||||||
]
|
|
||||||
|
|
||||||
if is_libvpx_build():
|
|
||||||
# Run the libvpx waterfall only nightly since it re-uses the WebRTC bots and
|
|
||||||
# would cause colliding builds otherwise.
|
|
||||||
scheduler = timed.Nightly(name='libvpx_nightly', branch='trunk',
|
|
||||||
builderNames=builder_names, hour=20)
|
|
||||||
else:
|
|
||||||
# Trigger builds on each check-in if we are the regular WebRTC waterfall.
|
|
||||||
scheduler = basic.SingleBranchScheduler(name='all', branch='trunk',
|
|
||||||
builderNames=builder_names)
|
|
||||||
|
|
||||||
# Note that additional schedulers (used by the Chrome+WebRTC builders) are
|
|
||||||
# defined in master_builders_cfg.py. This is an in progress change to make all
|
|
||||||
# our bots use the Chromium Buildbot scripts.
|
|
||||||
c['schedulers'] = [scheduler]
|
|
||||||
|
|
||||||
####### TESTS
|
|
||||||
# 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 run on Virtual machines for Linux and Windows and physical
|
|
||||||
# machines for Mac.
|
|
||||||
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': (False, True, False), # no audio devices
|
|
||||||
'audioproc_unittest': (True, True, True),
|
|
||||||
'bitrate_controller_unittests': (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),
|
|
||||||
'remote_bitrate_estimator_unittests': (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_integrationtests': (True, True, True),
|
|
||||||
'vp8_unittests': (True, True, True),
|
|
||||||
'webrtc_utility_unittests': (True, True, True),
|
|
||||||
}
|
|
||||||
|
|
||||||
# Physical machine tests run on hardware with audio device and webcam present.
|
|
||||||
PHYSICAL_MACHINE_TESTS = {
|
|
||||||
# Test name Linux Mac Windows
|
|
||||||
'audio_e2e_test': (True, False, False),
|
|
||||||
'audio_device_test_api': (False, False, False), # Issue 257+339
|
|
||||||
'video_render_module_test': (True, True, True),
|
|
||||||
'vie_auto_test': (True, True, True),
|
|
||||||
'voe_auto_test': (True, True, True),
|
|
||||||
}
|
|
||||||
|
|
||||||
MEMCHECK_DISABLED_TESTS = [
|
|
||||||
'audio_coding_module_test', # Issue 270
|
|
||||||
'test_fec', # Too slow for Valgrind memcheck
|
|
||||||
]
|
|
||||||
TSAN_DISABLED_TESTS = [
|
|
||||||
'audio_coding_module_test', # Issue 283
|
|
||||||
'audioproc_unittest', # Issue 299
|
|
||||||
'system_wrappers_unittests', # Issue 300
|
|
||||||
'video_processing_unittests', # Issue 303
|
|
||||||
'test_fec', # Too slow for TSAN
|
|
||||||
]
|
|
||||||
ASAN_DISABLED_TESTS = [
|
|
||||||
'audio_coding_module_test', # Issue 281
|
|
||||||
'bitrate_controller_unittests', # Issue 555
|
|
||||||
'neteq_unittests', # Issue 282
|
|
||||||
]
|
|
||||||
|
|
||||||
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
|
|
||||||
CHROME_SVN_URL = 'http://src.chromium.org/svn/trunk/src'
|
|
||||||
CHROME_LKGR_URL = 'http://chromium-status.appspot.com/lkgr'
|
|
||||||
CHROME_GCLIENT_SOLUTION_NAME='src'
|
|
||||||
CHROME_CUSTOM_DEPS_LIST = [
|
|
||||||
('src/third_party/webrtc', 'http://webrtc.googlecode.com/svn/stable/src'),
|
|
||||||
('src/third_party/WebKit/LayoutTests', None),
|
|
||||||
('src/webkit/data/layout_tests/LayoutTests', None),
|
|
||||||
]
|
|
||||||
|
|
||||||
VALGRIND_DEPS_LIST = [
|
|
||||||
('trunk/third_party/valgrind',
|
|
||||||
'http://src.chromium.org/svn/trunk/deps/third_party/valgrind/binaries'),
|
|
||||||
]
|
|
||||||
ASAN_DEPS_LIST = [
|
|
||||||
('trunk/third_party/asan',
|
|
||||||
'http://src.chromium.org/chrome/trunk/deps/third_party/asan'),
|
|
||||||
]
|
|
||||||
|
|
||||||
# Libvpx waterfall has additional configuration (inherits this config).
|
|
||||||
DEFAULT_CUSTOM_DEPS = LIBVPX_DEPS_LIST if is_libvpx_build() else []
|
|
||||||
|
|
||||||
# Linux
|
|
||||||
linux_factory_64_dbg = utils.WebRTCLinuxFactory(
|
|
||||||
utils.BuildStatusOracle('linux_factory_64_dbg'),
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
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'),
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
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'),
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
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'),
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
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)
|
|
||||||
|
|
||||||
# The video factory needs to prepare for valgrind since some tests will run
|
|
||||||
# under tooling. Not all tests will though since that would be too slow.
|
|
||||||
linux_factory_large_tests = utils.WebRTCLinuxFactory(
|
|
||||||
utils.BuildStatusOracle('linux_factory_large_tests'),
|
|
||||||
custom_deps_list=VALGRIND_DEPS_LIST + DEFAULT_CUSTOM_DEPS)
|
|
||||||
linux_factory_large_tests.EnableCoverage(
|
|
||||||
coverage_url='http://webrtc-build-bot-se.lul/coverage/')
|
|
||||||
linux_factory_large_tests.EnableBuild(compile_for_memory_tooling=True)
|
|
||||||
linux_factory_large_tests.EnableTests(linux_physical_machine_tests)
|
|
||||||
|
|
||||||
chromeos_factory = utils.WebRTCLinuxFactory(
|
|
||||||
utils.BuildStatusOracle('chromeos_factory'),
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
chromeos_factory.EnableBuild(chrome_os=True)
|
|
||||||
chromeos_factory.EnableTests(linux_normal_tests)
|
|
||||||
|
|
||||||
linux_clang = utils.WebRTCLinuxFactory(
|
|
||||||
utils.BuildStatusOracle('linux_clang'),
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
linux_clang.EnableBuild(clang=True)
|
|
||||||
linux_clang.EnableTests(linux_normal_tests)
|
|
||||||
|
|
||||||
linux_memcheck_factory = utils.WebRTCLinuxFactory(
|
|
||||||
utils.BuildStatusOracle('linux_memcheck_factory'), run_with_memcheck=True,
|
|
||||||
custom_deps_list=VALGRIND_DEPS_LIST + DEFAULT_CUSTOM_DEPS)
|
|
||||||
linux_memcheck_factory.EnableBuild(release=True,
|
|
||||||
compile_for_memory_tooling=True)
|
|
||||||
# Filter out disabled memcheck tests:
|
|
||||||
memcheck_tests = filter(lambda test: test not in MEMCHECK_DISABLED_TESTS,
|
|
||||||
linux_normal_tests)
|
|
||||||
linux_memcheck_factory.EnableTests(memcheck_tests)
|
|
||||||
|
|
||||||
linux_tsan_factory = utils.WebRTCLinuxFactory(
|
|
||||||
utils.BuildStatusOracle('linux_tsan_factory'), run_with_tsan=True,
|
|
||||||
custom_deps_list=VALGRIND_DEPS_LIST + DEFAULT_CUSTOM_DEPS)
|
|
||||||
linux_tsan_factory.EnableBuild(release=True, compile_for_memory_tooling=True)
|
|
||||||
# Filter out disabled tsan tests:
|
|
||||||
tsan_tests = filter(lambda test: test not in TSAN_DISABLED_TESTS,
|
|
||||||
linux_normal_tests)
|
|
||||||
linux_tsan_factory.EnableTests(tsan_tests)
|
|
||||||
|
|
||||||
linux_asan_factory = utils.WebRTCLinuxFactory(
|
|
||||||
utils.BuildStatusOracle('linux_asan_factory'), run_with_asan=True,
|
|
||||||
custom_deps_list=ASAN_DEPS_LIST + DEFAULT_CUSTOM_DEPS)
|
|
||||||
linux_asan_factory.EnableBuild(release=True, clang=True)
|
|
||||||
# Filter out disabled asan tests:
|
|
||||||
asan_tests = filter(lambda test: test not in ASAN_DISABLED_TESTS,
|
|
||||||
linux_normal_tests)
|
|
||||||
linux_asan_factory.EnableTests(asan_tests)
|
|
||||||
|
|
||||||
android_factory = utils.WebRTCAndroidFactory(
|
|
||||||
utils.BuildStatusOracle('android_factory'),
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
android_factory.EnableBuild(product='toro')
|
|
||||||
|
|
||||||
android_ndk_factory = utils.WebRTCAndroidNDKFactory(
|
|
||||||
utils.BuildStatusOracle('android_ndk_factory'),
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
android_ndk_factory.EnableBuild()
|
|
||||||
|
|
||||||
# Mac
|
|
||||||
mac_factory_32_dbg = utils.WebRTCMacFactory(
|
|
||||||
utils.BuildStatusOracle('mac_factory_32_dbg'),
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
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'),
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
mac_factory_32_release.EnableBuild(build_type='both', release=True)
|
|
||||||
mac_factory_32_release.EnableTests(mac_normal_tests)
|
|
||||||
|
|
||||||
mac_factory_large_tests = utils.WebRTCMacFactory(
|
|
||||||
utils.BuildStatusOracle('mac_factory_large_tests'),
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
mac_factory_large_tests.EnableBuild(build_type='make')
|
|
||||||
mac_factory_large_tests.EnableTests(mac_physical_machine_tests)
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
win_factory_32_Debug = utils.WebRTCWinFactory(
|
|
||||||
utils.BuildStatusOracle('win_factory_32_debug'),
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
win_factory_32_Debug.EnableBuild(configuration='Debug')
|
|
||||||
win_factory_32_Debug.EnableTests(windows_normal_tests)
|
|
||||||
|
|
||||||
win_factory_32_Release = utils.WebRTCWinFactory(
|
|
||||||
utils.BuildStatusOracle('win_factory_32_release'),
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
win_factory_32_Release.EnableBuild(configuration='Release')
|
|
||||||
win_factory_32_Release.EnableTests(windows_normal_tests)
|
|
||||||
|
|
||||||
win_factory_large_tests = utils.WebRTCWinFactory(
|
|
||||||
utils.BuildStatusOracle('win_factory_large_tests'),
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
win_factory_large_tests.EnableBuild()
|
|
||||||
win_factory_large_tests.EnableTests(windows_physical_machine_tests)
|
|
||||||
|
|
||||||
####### BUILDERS
|
|
||||||
linux_builder_64_debug = {
|
|
||||||
'name': 'Linux64DBG',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-1',
|
|
||||||
'builddir': 'linux-slave-1',
|
|
||||||
'factory': linux_factory_64_dbg,
|
|
||||||
}
|
|
||||||
linux_builder_32_release = {
|
|
||||||
'name': 'Linux32Release',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-2',
|
|
||||||
'builddir': 'linux-slave-2',
|
|
||||||
'factory': linux_factory_32_release,
|
|
||||||
}
|
|
||||||
linux_builder_64_release = {
|
|
||||||
'name': 'Linux64Release',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-5',
|
|
||||||
'builddir': 'linux-slave-5',
|
|
||||||
'factory': linux_factory_64_release,
|
|
||||||
}
|
|
||||||
linux_builder_32_debug = {
|
|
||||||
'name': 'Linux32DBG',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-4',
|
|
||||||
'builddir': 'linux-slave-4',
|
|
||||||
'factory': linux_factory_32_dbg,
|
|
||||||
}
|
|
||||||
mac_builder_32_debug = {
|
|
||||||
'name': 'MacOS32DBG',
|
|
||||||
'slavename': 'dhcp-172-28-249-144',
|
|
||||||
'builddir': 'mac-slave-3',
|
|
||||||
'factory': mac_factory_32_dbg,
|
|
||||||
}
|
|
||||||
mac_builder_32_release = {
|
|
||||||
'name': 'MacOS32Release',
|
|
||||||
'slavename': 'dhcp-172-28-249-167',
|
|
||||||
'builddir': 'mac-slave-2',
|
|
||||||
'factory': mac_factory_32_release,
|
|
||||||
}
|
|
||||||
mac_builder_large_tests = {
|
|
||||||
'name': 'MacLargeTests',
|
|
||||||
'slavename': 'dhcp-172-28-249-168',
|
|
||||||
'builddir': 'mac-large-tests',
|
|
||||||
'factory': mac_factory_large_tests,
|
|
||||||
}
|
|
||||||
chromeos_builder = {
|
|
||||||
'name': 'ChromeOS',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-3',
|
|
||||||
'builddir': 'chromeos',
|
|
||||||
'factory': chromeos_factory,
|
|
||||||
}
|
|
||||||
win_builder_32_debug = {
|
|
||||||
'name': 'Win32Debug',
|
|
||||||
'slavename': 'webrtc-win2k8-1',
|
|
||||||
'builddir': 'win-32-dbg',
|
|
||||||
'factory': win_factory_32_Debug,
|
|
||||||
}
|
|
||||||
win_builder_32_release = {
|
|
||||||
'name': 'Win32Release',
|
|
||||||
'slavename': 'webrtc-win2k8-2',
|
|
||||||
'builddir': 'win-32-release',
|
|
||||||
'factory': win_factory_32_Release,
|
|
||||||
}
|
|
||||||
win_builder_large_tests = {
|
|
||||||
'name': 'WinLargeTests',
|
|
||||||
'slavename': 'webrtc-test-w',
|
|
||||||
'builddir': 'win-large-tests',
|
|
||||||
'factory': win_factory_large_tests,
|
|
||||||
}
|
|
||||||
linux_builder_large_tests = {
|
|
||||||
'name': 'LinuxLargeTests',
|
|
||||||
'slavename': 'webrtc-build-bot-se',
|
|
||||||
'builddir': 'linux-large-tests',
|
|
||||||
'factory': linux_factory_large_tests,
|
|
||||||
}
|
|
||||||
linux_builder_clang = {
|
|
||||||
'name': 'LinuxClang',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-8',
|
|
||||||
'builddir': 'linux-clang',
|
|
||||||
'factory': linux_clang,
|
|
||||||
}
|
|
||||||
linux_builder_memcheck = {
|
|
||||||
'name': 'LinuxMemcheck',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-6',
|
|
||||||
'builddir': 'linux-memcheck',
|
|
||||||
'factory': linux_memcheck_factory,
|
|
||||||
}
|
|
||||||
linux_builder_tsan = {
|
|
||||||
'name': 'LinuxTsan',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-15',
|
|
||||||
'builddir': 'linux-tsan',
|
|
||||||
'factory': linux_tsan_factory,
|
|
||||||
}
|
|
||||||
linux_builder_asan = {
|
|
||||||
'name': 'LinuxAsan',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-16',
|
|
||||||
'builddir': 'linux-asan',
|
|
||||||
'factory': linux_asan_factory,
|
|
||||||
}
|
|
||||||
android_builder_1 = {
|
|
||||||
'name': 'Android',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-7',
|
|
||||||
'builddir': 'android',
|
|
||||||
'factory': android_factory,
|
|
||||||
}
|
|
||||||
android_builder_ndk = {
|
|
||||||
'name': 'AndroidNDK',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-10',
|
|
||||||
'builddir': 'android-ndk',
|
|
||||||
'factory': android_ndk_factory,
|
|
||||||
}
|
|
||||||
linux_builder_gcc_4_6 = {
|
|
||||||
'name': 'Linux64DBG-GCC4.6',
|
|
||||||
'slavename': 'webrtc-cb-linux-slave-9',
|
|
||||||
'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_memcheck,
|
|
||||||
linux_builder_tsan,
|
|
||||||
linux_builder_asan,
|
|
||||||
linux_builder_gcc_4_6,
|
|
||||||
win_builder_large_tests,
|
|
||||||
mac_builder_large_tests,
|
|
||||||
linux_builder_large_tests,
|
|
||||||
android_builder_1,
|
|
||||||
android_builder_ndk,
|
|
||||||
chromeos_builder,
|
|
||||||
]
|
|
||||||
|
|
||||||
# Load Chrome bots that are using Chromium factories.
|
|
||||||
# These modules come from the local directory.
|
|
||||||
import master_builders_cfg
|
|
||||||
master_builders_cfg.ConfigureChromeWebRTCBuilders(c,
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
master_builders_cfg.ConfigureNightlyChromeWebRTCBloatBuilder(c,
|
|
||||||
custom_deps_list=DEFAULT_CUSTOM_DEPS)
|
|
||||||
|
|
||||||
####### BUILDSLAVES
|
|
||||||
|
|
||||||
# Slaves are loaded from slaves.cfg.
|
|
||||||
slaves = slaves_list.SlavesList('slaves.cfg', 'WebRTC')
|
|
||||||
for builder in c['builders']:
|
|
||||||
# Associate the slaves to the builders. The configuration is in slaves.cfg.
|
|
||||||
builder['slavenames'] = slaves.GetSlavesName(builder=builder['name'])
|
|
||||||
|
|
||||||
# The 'slaves' list defines the set of allowable buildslaves. List all the
|
|
||||||
# slaves registered to a builder. Remove dupes.
|
|
||||||
c['slaves'] = master_utils.AutoSetupSlaves(c['builders'],
|
|
||||||
config.Master.GetBotPassword())
|
|
||||||
# Make sure everything works together.
|
|
||||||
master_utils.VerifySetup(c, slaves)
|
|
||||||
|
|
||||||
# Adds common status and tools to this master.
|
|
||||||
master_utils.AutoSetupMaster(c, ActiveMaster, mail_notifier=False,
|
|
||||||
enable_http_status_push=False)
|
|
||||||
|
|
||||||
####### STATUS TARGETS
|
|
||||||
# Override the tgrid URL since we're parsing that in WebRTC for LKGR
|
|
||||||
# (Chrome doesn't use it and puts the Console page on that URL instead).
|
|
||||||
c['status'][0].putChild("tgrid", grid.TransposedGridStatusResource())
|
|
||||||
|
|
||||||
# Use an environment variable to easily avoid enabling e-mail for development.
|
|
||||||
if not os.getenv('BUILDBOT_DEVELOPMENT_MODE'):
|
|
||||||
watchlist_email = ('libvpx-cb-watchlist@google.com' if is_libvpx_build() else
|
|
||||||
'webrtc-cb-watchlist@google.com')
|
|
||||||
email_status = mail.MailNotifier(
|
|
||||||
fromaddr=watchlist_email,
|
|
||||||
extraRecipients=[watchlist_email],
|
|
||||||
sendToInterestedUsers=True,
|
|
||||||
mode='failing',
|
|
||||||
lookup=master_utils.UsersAreEmails())
|
|
||||||
c['status'] += [email_status]
|
|
||||||
|
|
||||||
####### DB URL
|
|
||||||
|
|
||||||
# This specifies what database buildbot uses to store change and scheduler
|
|
||||||
# state. You can leave this at its default for all but the largest
|
|
||||||
# installations.
|
|
||||||
c['db_url'] = 'sqlite:///state.sqlite'
|
|
||||||
|
|
||||||
####### 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')
|
|
@ -1,97 +0,0 @@
|
|||||||
#!/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.
|
|
||||||
|
|
||||||
"""Chrome+WebRTC bots configured in Chromium style."""
|
|
||||||
|
|
||||||
from buildbot.schedulers import timed
|
|
||||||
|
|
||||||
from master import master_config
|
|
||||||
from webrtc_buildbot import webrtc_chromium_factory
|
|
||||||
|
|
||||||
# Used to put builders into different categories by the Helper class.
|
|
||||||
defaults = {}
|
|
||||||
|
|
||||||
|
|
||||||
def linux():
|
|
||||||
return webrtc_chromium_factory.ChromiumWebRTCFactory('src/build', 'linux2')
|
|
||||||
def mac():
|
|
||||||
return webrtc_chromium_factory.ChromiumWebRTCFactory('src/build', 'mac')
|
|
||||||
def win():
|
|
||||||
return webrtc_chromium_factory.ChromiumWebRTCFactory('src/build', 'win32')
|
|
||||||
|
|
||||||
CHROME_LKGR = 'http://chromium-status.appspot.com/lkgr'
|
|
||||||
|
|
||||||
|
|
||||||
def ConfigureChromeWebRTCBuilders(c, custom_deps_list=[]):
|
|
||||||
helper = master_config.Helper(defaults)
|
|
||||||
B = helper.Builder
|
|
||||||
F = helper.Factory
|
|
||||||
S = helper.Scheduler
|
|
||||||
|
|
||||||
# Main Scheduler for WebRTC
|
|
||||||
S('webrtc_rel', branch='trunk', treeStableTimer=0)
|
|
||||||
|
|
||||||
# Set up all the builders.
|
|
||||||
# Don't put spaces or 'funny characters' within the builder names, so that
|
|
||||||
# we can safely use the builder name as part of a filepath.
|
|
||||||
|
|
||||||
# Linux...
|
|
||||||
defaults['category'] = 'linux'
|
|
||||||
B('LinuxChrome', 'chrome_linux_debug_factory', scheduler='webrtc_rel')
|
|
||||||
F('chrome_linux_debug_factory', linux().ChromiumWebRTCLatestFactory(
|
|
||||||
target='Debug',
|
|
||||||
factory_properties={'safesync_url': CHROME_LKGR,
|
|
||||||
'use_xvfb_on_linux': True},
|
|
||||||
custom_deps_list=custom_deps_list))
|
|
||||||
|
|
||||||
# Mac 10.7 (Lion) ...
|
|
||||||
defaults['category'] = 'mac-10.7'
|
|
||||||
B('MacChrome', 'chrome_mac_debug_factory', scheduler='webrtc_rel')
|
|
||||||
F('chrome_mac_debug_factory', mac().ChromiumWebRTCLatestFactory(
|
|
||||||
target='Debug',
|
|
||||||
factory_properties={'safesync_url': CHROME_LKGR},
|
|
||||||
custom_deps_list=custom_deps_list))
|
|
||||||
|
|
||||||
# Windows...
|
|
||||||
defaults['category'] = 'windows'
|
|
||||||
B('WinChrome', 'chrome_win32_debug_factory', scheduler='webrtc_rel')
|
|
||||||
F('chrome_win32_debug_factory', win().ChromiumWebRTCLatestFactory(
|
|
||||||
project=r'..\chrome\chrome.sln',
|
|
||||||
target='Debug',
|
|
||||||
factory_properties={'safesync_url': CHROME_LKGR},
|
|
||||||
custom_deps_list=custom_deps_list))
|
|
||||||
|
|
||||||
# Use the helper class to connect the builders, factories and schedulers
|
|
||||||
# and add them to the BuildmasterConfig (c) dictionary.
|
|
||||||
helper.Update(c)
|
|
||||||
|
|
||||||
|
|
||||||
def ConfigureNightlyChromeWebRTCBloatBuilder(c, custom_deps_list=[]):
|
|
||||||
# Nightly Scheduler at 22 PM CST/CDT. This will mean 5 AM in the CET
|
|
||||||
# time zone, which should avoid everyone's working hours.
|
|
||||||
nightly_scheduler = timed.Nightly(name='webrtc_nightly',
|
|
||||||
branch='trunk',
|
|
||||||
builderNames=['LinuxChromeBloat'],
|
|
||||||
hour=22)
|
|
||||||
c['schedulers'].append(nightly_scheduler)
|
|
||||||
|
|
||||||
# The Bloat calculator bot is setup without the helper classes since they
|
|
||||||
# don't have support for a Nightly scheduler.
|
|
||||||
chrome_bloat_factory = linux().ChromiumWebRTCBloatFactory(
|
|
||||||
target='Release',
|
|
||||||
factory_properties={'safesync_url': CHROME_LKGR,
|
|
||||||
'gclient_env': {'GYP_DEFINES': 'profiling=1'}},
|
|
||||||
custom_deps_list=custom_deps_list)
|
|
||||||
|
|
||||||
chrome_bloat_builder = {
|
|
||||||
'name': 'LinuxChromeBloat',
|
|
||||||
'factory': chrome_bloat_factory,
|
|
||||||
'category': 'linux',
|
|
||||||
}
|
|
||||||
c['builders'].append(chrome_bloat_builder)
|
|
@ -1,31 +0,0 @@
|
|||||||
#!/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.
|
|
||||||
|
|
||||||
"""Source control poller for the WebRTC code."""
|
|
||||||
|
|
||||||
from buildbot.changes import svnpoller
|
|
||||||
from master import build_utils
|
|
||||||
|
|
||||||
|
|
||||||
def WebRTCFileSplitter(path):
|
|
||||||
"""Splits the SVN path into branch and filename sections."""
|
|
||||||
# We're currently only using trunk branch but we may soon start building
|
|
||||||
# multiple branches.
|
|
||||||
projects = ['trunk']
|
|
||||||
return build_utils.SplitPath(projects, path)
|
|
||||||
|
|
||||||
|
|
||||||
def ConfigureChangeSource(config, c):
|
|
||||||
webrtc_revlinktmpl = 'http://code.google.com/p/webrtc/source/browse?r=%s'
|
|
||||||
webrtc_poller = svnpoller.SVNPoller(svnurl=config.Master.webrtc_root_url,
|
|
||||||
split_file=WebRTCFileSplitter,
|
|
||||||
pollinterval=30,
|
|
||||||
histmax=10,
|
|
||||||
revlinktmpl=webrtc_revlinktmpl)
|
|
||||||
c['change_source'] = webrtc_poller
|
|
@ -1,486 +0,0 @@
|
|||||||
body {
|
|
||||||
margin-bottom:50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
body, td {
|
|
||||||
font-family: Verdana, Cursor;
|
|
||||||
font-size: 10px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:link,a:visited,a:active {
|
|
||||||
color: #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
table {
|
|
||||||
border-spacing: 1px 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table td {
|
|
||||||
padding: 3px 0px 3px 0px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.closerbox {
|
|
||||||
border: 1px solid #aaa;
|
|
||||||
background-color: #eef;
|
|
||||||
border-radius: 8px;
|
|
||||||
-webkit-border-radius: 8px;
|
|
||||||
-moz-border-radius: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.closerbox table {
|
|
||||||
padding: 0 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.closerbox .title {
|
|
||||||
background-color: #ccc;
|
|
||||||
border-top-left-radius: 8px;
|
|
||||||
-webkit-border-top-left-radius: 8px;
|
|
||||||
-moz-border-top-left-radius: 8px;
|
|
||||||
border-top-right-radius: 8px;
|
|
||||||
-webkit-border-top-right-radius: 8px;
|
|
||||||
-moz-border-top-right-radius: 8px;
|
|
||||||
padding: 0 0 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Project {
|
|
||||||
width: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.LastBuild, .Activity {
|
|
||||||
padding: 0 0 0 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.LastBuild, .Activity, .Builder, .BuildStep {
|
|
||||||
width: 155px;
|
|
||||||
max-width: 155px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Chromium Specific styles */
|
|
||||||
div.BuildResultInfo {
|
|
||||||
color: #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.Announcement {
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.Announcement > a:hover {
|
|
||||||
color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.Announcement > div.Notice {
|
|
||||||
background-color: #afdaff;
|
|
||||||
padding: 0.5em;
|
|
||||||
font-size: 16px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.Announcement > div.Open {
|
|
||||||
border: 3px solid #8fdf5f;
|
|
||||||
padding: 0.5em;
|
|
||||||
font-size: 16px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.Announcement > div.Closed {
|
|
||||||
border: 5px solid #e98080;
|
|
||||||
padding: 0.5em;
|
|
||||||
font-size: 24px;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Time {
|
|
||||||
color: #000;
|
|
||||||
border-bottom: 1px solid #aaa;
|
|
||||||
background-color: #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Activity, td.Change, td.Builder {
|
|
||||||
color: #333333;
|
|
||||||
background-color: #CCCCCC;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Change {
|
|
||||||
border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
}
|
|
||||||
td.Event {
|
|
||||||
color: #777;
|
|
||||||
background-color: #ddd;
|
|
||||||
border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Activity {
|
|
||||||
border-top-left-radius: 10px;
|
|
||||||
-webkit-border-top-left-radius: 10px;
|
|
||||||
-moz-border-radius-topleft: 10px;
|
|
||||||
min-height: 20px;
|
|
||||||
padding: 2px 0 2px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.idle, td.waiting, td.offline, td.building {
|
|
||||||
border-top-left-radius: 0px;
|
|
||||||
-webkit-border-top-left-radius: 0px;
|
|
||||||
-moz-border-radius-topleft: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.LastBuild {
|
|
||||||
border-top-left-radius: 5px;
|
|
||||||
-webkit-border-top-left-radius: 5px;
|
|
||||||
-moz-border-radius-topleft: 5px;
|
|
||||||
border-top-right-radius: 5px;
|
|
||||||
-webkit-border-top-right-radius: 5px;
|
|
||||||
-moz-border-radius-topright: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Console view styles */
|
|
||||||
|
|
||||||
td.DevRev {
|
|
||||||
padding: 4px 8px 4px 8px;
|
|
||||||
color: #333333;
|
|
||||||
border-top-left-radius: 5px;
|
|
||||||
-webkit-border-top-left-radius: 5px;
|
|
||||||
-moz-border-radius-topleft: 5px;
|
|
||||||
background-color: #eee;
|
|
||||||
width: 1%;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevRevCollapse {
|
|
||||||
border-bottom-left-radius: 5px;
|
|
||||||
-webkit-border-bottom-left-radius: 5px;
|
|
||||||
-moz-border-radius-bottomleft: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevName {
|
|
||||||
padding: 4px 8px 4px 8px;
|
|
||||||
color: #333333;
|
|
||||||
background-color: #eee;
|
|
||||||
width: 1%;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevStatus {
|
|
||||||
padding: 4px 4px 4px 4px;
|
|
||||||
color: #333333;
|
|
||||||
background-color: #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevSlave {
|
|
||||||
padding: 4px 4px 4px 4px;
|
|
||||||
color: #333333;
|
|
||||||
background-color: #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.first {
|
|
||||||
border-top-left-radius: 5px;
|
|
||||||
-webkit-border-top-left-radius: 5px;
|
|
||||||
-moz-border-radius-topleft: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.last {
|
|
||||||
border-top-right-radius: 5px;
|
|
||||||
-webkit-border-top-right-radius: 5px;
|
|
||||||
-moz-border-radius-topright: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevStatusCategory {
|
|
||||||
border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
border-width:1px;
|
|
||||||
border-style:solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevStatusCollapse {
|
|
||||||
border-bottom-right-radius: 5px;
|
|
||||||
-webkit-border-bottom-right-radius: 5px;
|
|
||||||
-moz-border-radius-bottomright: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevDetails {
|
|
||||||
font-weight: normal;
|
|
||||||
padding: 8px 8px 8px 8px;
|
|
||||||
color: #333333;
|
|
||||||
background-color: #eee;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevComment {
|
|
||||||
font-weight: normal;
|
|
||||||
padding: 8px 8px 8px 8px;
|
|
||||||
color: #333333;
|
|
||||||
border-bottom-right-radius: 5px;
|
|
||||||
-webkit-border-bottom-right-radius: 5px;
|
|
||||||
-moz-border-radius-bottomright: 5px;
|
|
||||||
border-bottom-left-radius: 5px;
|
|
||||||
-webkit-border-bottom-left-radius: 5px;
|
|
||||||
-moz-border-radius-bottomleft: 5px;
|
|
||||||
background-color: #eee;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Alt {
|
|
||||||
background-color: #CCCCCC;
|
|
||||||
}
|
|
||||||
|
|
||||||
.legend {
|
|
||||||
border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
width: 100px;
|
|
||||||
max-width: 100px;
|
|
||||||
text-align:center;
|
|
||||||
padding: 2px 2px 2px 2px;
|
|
||||||
height:14px;
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.DevStatusBox {
|
|
||||||
text-align:center;
|
|
||||||
height:20px;
|
|
||||||
padding:0 2px;
|
|
||||||
line-height:0;
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.DevStatusBox a {
|
|
||||||
opacity: 0.85;
|
|
||||||
border-width:1px;
|
|
||||||
border-style:solid;
|
|
||||||
border-radius: 4px;
|
|
||||||
-webkit-border-radius: 4px;
|
|
||||||
-moz-border-radius: 4px;
|
|
||||||
display:block;
|
|
||||||
width:90%;
|
|
||||||
height:20px;
|
|
||||||
line-height:20px;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.DevSlaveBox {
|
|
||||||
text-align:center;
|
|
||||||
height:10px;
|
|
||||||
padding:0 2px;
|
|
||||||
line-height:0;
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.DevSlaveBox a {
|
|
||||||
opacity: 0.85;
|
|
||||||
border-width:1px;
|
|
||||||
border-style:solid;
|
|
||||||
border-radius: 4px;
|
|
||||||
-webkit-border-radius: 4px;
|
|
||||||
-moz-border-radius: 4px;
|
|
||||||
display:block;
|
|
||||||
width:90%;
|
|
||||||
height:10px;
|
|
||||||
line-height:20px;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.noround {
|
|
||||||
border-radius: 0px;
|
|
||||||
-webkit-border-radius: 0px;
|
|
||||||
-moz-border-radius: 0px;
|
|
||||||
position: relative;
|
|
||||||
margin-top: -8px;
|
|
||||||
margin-bottom: -8px;
|
|
||||||
height: 36px;
|
|
||||||
border-top-width: 0;
|
|
||||||
border-bottom-width: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.begin {
|
|
||||||
border-top-width:1px;
|
|
||||||
position: relative;
|
|
||||||
margin-top: 0px;
|
|
||||||
margin-bottom: -7px;
|
|
||||||
height: 27px;
|
|
||||||
border-top-left-radius: 4px;
|
|
||||||
-webkit-border-top-left-radius: 4px;
|
|
||||||
-moz-border-radius-topleft: 4px;
|
|
||||||
border-top-right-radius: 4px;
|
|
||||||
-webkit-border-top-right-radius: 4px;
|
|
||||||
-moz-border-radius-topright: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.end {
|
|
||||||
border-bottom-width:1px;
|
|
||||||
position: relative;
|
|
||||||
margin-top: -7px;
|
|
||||||
margin-bottom: 0px;
|
|
||||||
height: 27px;
|
|
||||||
border-bottom-left-radius: 4px;
|
|
||||||
-webkit-border-bottom-left-radius: 4px;
|
|
||||||
-moz-border-radius-bottomleft: 4px;
|
|
||||||
border-bottom-right-radius: 4px;
|
|
||||||
-webkit-border-bottom-right-radius: 4px;
|
|
||||||
-moz-border-radius-bottomright: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.center_align {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.right_align {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.left_align {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.BuildWaterfall {
|
|
||||||
border-radius: 7px;
|
|
||||||
-webkit-border-radius: 7px;
|
|
||||||
-moz-border-radius: 7px;
|
|
||||||
position: absolute;
|
|
||||||
left: 0px;
|
|
||||||
top: 0px;
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
padding: 4px 4px 4px 4px;
|
|
||||||
float: left;
|
|
||||||
display: none;
|
|
||||||
border-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* LastBuild, BuildStep states */
|
|
||||||
.success {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #8fdf5f;
|
|
||||||
border-color: #4F8530;
|
|
||||||
}
|
|
||||||
|
|
||||||
.failure {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #e98080;
|
|
||||||
border-color: #A77272;
|
|
||||||
}
|
|
||||||
|
|
||||||
.warnings {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #ffc343;
|
|
||||||
border-color: #C29D46;
|
|
||||||
}
|
|
||||||
|
|
||||||
.never {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #f0f0e0;
|
|
||||||
border-color: #A77272;
|
|
||||||
}
|
|
||||||
|
|
||||||
.exception, td.offline {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #e0b0ff;
|
|
||||||
border-color: #ACA0B3;
|
|
||||||
}
|
|
||||||
|
|
||||||
.start,.running, td.building {
|
|
||||||
color: #666666;
|
|
||||||
background-color: #fffc6c;
|
|
||||||
border-color: #C5C56D;
|
|
||||||
}
|
|
||||||
|
|
||||||
.running_failure {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #fffc6c;
|
|
||||||
border-color: #ff0000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.start {
|
|
||||||
border-bottom-left-radius: 10px;
|
|
||||||
-webkit-border-bottom-left-radius: 10px;
|
|
||||||
-moz-border-radius-bottomleft: 10px;
|
|
||||||
border-bottom-right-radius: 10px;
|
|
||||||
-webkit-border-bottom-right-radius: 10px;
|
|
||||||
-moz-border-radius-bottomright: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notstarted {
|
|
||||||
border-width:1px;
|
|
||||||
border-style:solid;
|
|
||||||
border-color:#aaa;
|
|
||||||
}
|
|
||||||
|
|
||||||
.closed {
|
|
||||||
background-color: #ff0000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.closed .large {
|
|
||||||
font-size: 1.5em;
|
|
||||||
font-weight: bolder;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Project a:hover, td.start a:hover {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mini-box {
|
|
||||||
text-align:center;
|
|
||||||
height:20px;
|
|
||||||
padding:0 2px;
|
|
||||||
line-height:0;
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mini-box a {
|
|
||||||
border-radius: 0;
|
|
||||||
-webkit-border-radius: 0;
|
|
||||||
-moz-border-radius: 0;
|
|
||||||
display:block;
|
|
||||||
width:100%;
|
|
||||||
height:20px;
|
|
||||||
line-height:20px;
|
|
||||||
margin-top:-30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mini-closed {
|
|
||||||
-box-sizing:border-box;
|
|
||||||
-webkit-box-sizing:border-box;
|
|
||||||
border:4px solid red;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* grid styles */
|
|
||||||
|
|
||||||
table.Grid {
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.Grid tr td {
|
|
||||||
padding: 0.2em;
|
|
||||||
margin: 0px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.Grid tr td.title {
|
|
||||||
font-size: 90%;
|
|
||||||
border-right: 1px gray solid;
|
|
||||||
border-bottom: 1px gray solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.Grid tr td.sourcestamp {
|
|
||||||
font-size: 90%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.Grid tr td.builder {
|
|
||||||
text-align: right;
|
|
||||||
font-size: 90%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.Grid tr td.build {
|
|
||||||
border: 1px gray solid;
|
|
||||||
}
|
|
@ -1,504 +0,0 @@
|
|||||||
body {
|
|
||||||
margin-bottom:50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
body, td {
|
|
||||||
font-family: Verdana, Cursor;
|
|
||||||
font-size: 10px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:link,a:visited,a:active {
|
|
||||||
color: #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
table {
|
|
||||||
border-spacing: 1px 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table td {
|
|
||||||
padding: 3px 0px 3px 0px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.closerbox {
|
|
||||||
border: 1px solid #aaa;
|
|
||||||
background-color: #eef;
|
|
||||||
border-radius: 8px;
|
|
||||||
-webkit-border-radius: 8px;
|
|
||||||
-moz-border-radius: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.closerbox table {
|
|
||||||
padding: 0 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.closerbox .title {
|
|
||||||
background-color: #ccc;
|
|
||||||
border-top-left-radius: 8px;
|
|
||||||
-webkit-border-top-left-radius: 8px;
|
|
||||||
-moz-border-top-left-radius: 8px;
|
|
||||||
border-top-right-radius: 8px;
|
|
||||||
-webkit-border-top-right-radius: 8px;
|
|
||||||
-moz-border-top-right-radius: 8px;
|
|
||||||
padding: 0 0 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Project {
|
|
||||||
width: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.LastBuild, .Activity {
|
|
||||||
padding: 0 0 0 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.LastBuild, .Activity, .Builder, .BuildStep {
|
|
||||||
width: 155px;
|
|
||||||
max-width: 155px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Chromium Specific styles */
|
|
||||||
div.BuildResultInfo {
|
|
||||||
color: #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.Announcement {
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.Announcement > a:hover {
|
|
||||||
color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.Announcement > div.Notice {
|
|
||||||
background-color: #afdaff;
|
|
||||||
padding: 0.5em;
|
|
||||||
font-size: 16px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.Announcement > div.Open {
|
|
||||||
border: 3px solid #8fdf5f;
|
|
||||||
padding: 0.5em;
|
|
||||||
font-size: 16px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.Announcement > div.Closed {
|
|
||||||
border: 5px solid #e98080;
|
|
||||||
padding: 0.5em;
|
|
||||||
font-size: 24px;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Time {
|
|
||||||
color: #000;
|
|
||||||
border-bottom: 1px solid #aaa;
|
|
||||||
background-color: #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Activity, td.Change, td.Builder {
|
|
||||||
color: #333333;
|
|
||||||
background-color: #CCCCCC;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Change {
|
|
||||||
border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
}
|
|
||||||
td.Event {
|
|
||||||
color: #777;
|
|
||||||
background-color: #ddd;
|
|
||||||
border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Activity {
|
|
||||||
border-top-left-radius: 10px;
|
|
||||||
-webkit-border-top-left-radius: 10px;
|
|
||||||
-moz-border-radius-topleft: 10px;
|
|
||||||
min-height: 20px;
|
|
||||||
padding: 2px 0 2px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.idle, td.waiting, td.offline, td.building {
|
|
||||||
border-top-left-radius: 0px;
|
|
||||||
-webkit-border-top-left-radius: 0px;
|
|
||||||
-moz-border-radius-topleft: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.LastBuild {
|
|
||||||
border-top-left-radius: 5px;
|
|
||||||
-webkit-border-top-left-radius: 5px;
|
|
||||||
-moz-border-radius-topleft: 5px;
|
|
||||||
border-top-right-radius: 5px;
|
|
||||||
-webkit-border-top-right-radius: 5px;
|
|
||||||
-moz-border-radius-topright: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Console view styles */
|
|
||||||
|
|
||||||
td.DevRev {
|
|
||||||
padding: 4px 8px 4px 8px;
|
|
||||||
color: #333333;
|
|
||||||
border-top-left-radius: 5px;
|
|
||||||
-webkit-border-top-left-radius: 5px;
|
|
||||||
-moz-border-radius-topleft: 5px;
|
|
||||||
background-color: #eee;
|
|
||||||
width: 1%;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevRevCollapse {
|
|
||||||
border-bottom-left-radius: 5px;
|
|
||||||
-webkit-border-bottom-left-radius: 5px;
|
|
||||||
-moz-border-radius-bottomleft: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevName {
|
|
||||||
padding: 4px 8px 4px 8px;
|
|
||||||
color: #333333;
|
|
||||||
background-color: #eee;
|
|
||||||
width: 1%;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevStatus {
|
|
||||||
padding: 4px 4px 4px 4px;
|
|
||||||
color: #333333;
|
|
||||||
background-color: #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevSlave {
|
|
||||||
padding: 4px 4px 4px 4px;
|
|
||||||
color: #333333;
|
|
||||||
background-color: #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.first {
|
|
||||||
border-top-left-radius: 5px;
|
|
||||||
-webkit-border-top-left-radius: 5px;
|
|
||||||
-moz-border-radius-topleft: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.last {
|
|
||||||
border-top-right-radius: 5px;
|
|
||||||
-webkit-border-top-right-radius: 5px;
|
|
||||||
-moz-border-radius-topright: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevStatusCategory {
|
|
||||||
border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
border-width:1px;
|
|
||||||
border-style:solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevStatusCollapse {
|
|
||||||
border-bottom-right-radius: 5px;
|
|
||||||
-webkit-border-bottom-right-radius: 5px;
|
|
||||||
-moz-border-radius-bottomright: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevDetails {
|
|
||||||
font-weight: normal;
|
|
||||||
padding: 8px 8px 8px 8px;
|
|
||||||
color: #333333;
|
|
||||||
background-color: #eee;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.DevComment {
|
|
||||||
font-weight: normal;
|
|
||||||
padding: 8px 8px 8px 8px;
|
|
||||||
color: #333333;
|
|
||||||
border-bottom-right-radius: 5px;
|
|
||||||
-webkit-border-bottom-right-radius: 5px;
|
|
||||||
-moz-border-radius-bottomright: 5px;
|
|
||||||
border-bottom-left-radius: 5px;
|
|
||||||
-webkit-border-bottom-left-radius: 5px;
|
|
||||||
-moz-border-radius-bottomleft: 5px;
|
|
||||||
background-color: #eee;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Alt {
|
|
||||||
background-color: #CCCCCC;
|
|
||||||
}
|
|
||||||
|
|
||||||
.legend {
|
|
||||||
border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
width: 100px;
|
|
||||||
max-width: 100px;
|
|
||||||
text-align:center;
|
|
||||||
padding: 2px 2px 2px 2px;
|
|
||||||
height:14px;
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.DevStatusBox {
|
|
||||||
text-align:center;
|
|
||||||
height:20px;
|
|
||||||
padding:0 2px;
|
|
||||||
line-height:0;
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.DevStatusBox a {
|
|
||||||
opacity: 0.85;
|
|
||||||
border-width:1px;
|
|
||||||
border-style:solid;
|
|
||||||
border-radius: 4px;
|
|
||||||
-webkit-border-radius: 4px;
|
|
||||||
-moz-border-radius: 4px;
|
|
||||||
display:block;
|
|
||||||
width:90%;
|
|
||||||
height:20px;
|
|
||||||
line-height:20px;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.DevSlaveBox {
|
|
||||||
text-align:center;
|
|
||||||
height:10px;
|
|
||||||
padding:0 2px;
|
|
||||||
line-height:0;
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.DevSlaveBox a {
|
|
||||||
opacity: 0.85;
|
|
||||||
border-width:1px;
|
|
||||||
border-style:solid;
|
|
||||||
border-radius: 4px;
|
|
||||||
-webkit-border-radius: 4px;
|
|
||||||
-moz-border-radius: 4px;
|
|
||||||
display:block;
|
|
||||||
width:90%;
|
|
||||||
height:10px;
|
|
||||||
line-height:20px;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.noround {
|
|
||||||
border-radius: 0px;
|
|
||||||
-webkit-border-radius: 0px;
|
|
||||||
-moz-border-radius: 0px;
|
|
||||||
position: relative;
|
|
||||||
margin-top: -8px;
|
|
||||||
margin-bottom: -8px;
|
|
||||||
height: 36px;
|
|
||||||
border-top-width: 0;
|
|
||||||
border-bottom-width: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.begin {
|
|
||||||
border-top-width:1px;
|
|
||||||
position: relative;
|
|
||||||
margin-top: 0px;
|
|
||||||
margin-bottom: -7px;
|
|
||||||
height: 27px;
|
|
||||||
border-top-left-radius: 4px;
|
|
||||||
-webkit-border-top-left-radius: 4px;
|
|
||||||
-moz-border-radius-topleft: 4px;
|
|
||||||
border-top-right-radius: 4px;
|
|
||||||
-webkit-border-top-right-radius: 4px;
|
|
||||||
-moz-border-radius-topright: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.end {
|
|
||||||
border-bottom-width:1px;
|
|
||||||
position: relative;
|
|
||||||
margin-top: -7px;
|
|
||||||
margin-bottom: 0px;
|
|
||||||
height: 27px;
|
|
||||||
border-bottom-left-radius: 4px;
|
|
||||||
-webkit-border-bottom-left-radius: 4px;
|
|
||||||
-moz-border-radius-bottomleft: 4px;
|
|
||||||
border-bottom-right-radius: 4px;
|
|
||||||
-webkit-border-bottom-right-radius: 4px;
|
|
||||||
-moz-border-radius-bottomright: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.center_align {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.right_align {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.left_align {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.BuildWaterfall {
|
|
||||||
border-radius: 7px;
|
|
||||||
-webkit-border-radius: 7px;
|
|
||||||
-moz-border-radius: 7px;
|
|
||||||
position: absolute;
|
|
||||||
left: 0px;
|
|
||||||
top: 0px;
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
padding: 4px 4px 4px 4px;
|
|
||||||
float: left;
|
|
||||||
display: none;
|
|
||||||
border-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* LastBuild, BuildStep states */
|
|
||||||
.success {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #8fdf5f;
|
|
||||||
border-color: #4F8530;
|
|
||||||
}
|
|
||||||
|
|
||||||
.failure {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #e98080;
|
|
||||||
border-color: #A77272;
|
|
||||||
}
|
|
||||||
|
|
||||||
.warnings {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #ffc343;
|
|
||||||
border-color: #C29D46;
|
|
||||||
}
|
|
||||||
|
|
||||||
.never {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #f0f0e0;
|
|
||||||
border-color: #A77272;
|
|
||||||
}
|
|
||||||
|
|
||||||
.exception, .offline, .retry {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #e0b0ff;
|
|
||||||
border-color: #ACA0B3;
|
|
||||||
}
|
|
||||||
|
|
||||||
.start,.running, td.building {
|
|
||||||
color: #666666;
|
|
||||||
background-color: #fffc6c;
|
|
||||||
border-color: #C5C56D;
|
|
||||||
}
|
|
||||||
|
|
||||||
.running_failure {
|
|
||||||
color: #FFFFFF;
|
|
||||||
background-color: #fffc6c;
|
|
||||||
border-color: #ff0000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.start {
|
|
||||||
border-bottom-left-radius: 10px;
|
|
||||||
-webkit-border-bottom-left-radius: 10px;
|
|
||||||
-moz-border-radius-bottomleft: 10px;
|
|
||||||
border-bottom-right-radius: 10px;
|
|
||||||
-webkit-border-bottom-right-radius: 10px;
|
|
||||||
-moz-border-radius-bottomright: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notstarted {
|
|
||||||
border-width:1px;
|
|
||||||
border-style:solid;
|
|
||||||
border-color:#aaa;
|
|
||||||
}
|
|
||||||
|
|
||||||
.closed {
|
|
||||||
background-color: #ff0000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.closed .large {
|
|
||||||
font-size: 1.5em;
|
|
||||||
font-weight: bolder;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.Project a:hover, td.start a:hover {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mini-box {
|
|
||||||
text-align:center;
|
|
||||||
height:20px;
|
|
||||||
padding:0 2px;
|
|
||||||
line-height:0;
|
|
||||||
white-space:nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mini-box a {
|
|
||||||
border-radius: 0;
|
|
||||||
-webkit-border-radius: 0;
|
|
||||||
-moz-border-radius: 0;
|
|
||||||
display:block;
|
|
||||||
width:100%;
|
|
||||||
height:20px;
|
|
||||||
line-height:20px;
|
|
||||||
margin-top:-30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mini-closed {
|
|
||||||
-box-sizing:border-box;
|
|
||||||
-webkit-box-sizing:border-box;
|
|
||||||
border:4px solid red;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* grid styles */
|
|
||||||
|
|
||||||
table.Grid {
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.Grid tr td {
|
|
||||||
padding: 0.2em;
|
|
||||||
margin: 0px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.Grid tr td.title {
|
|
||||||
font-size: 90%;
|
|
||||||
border-right: 1px gray solid;
|
|
||||||
border-bottom: 1px gray solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.Grid tr td.sourcestamp {
|
|
||||||
font-size: 90%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.Grid tr td.builder {
|
|
||||||
text-align: right;
|
|
||||||
font-size: 90%;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.Grid tr td.build {
|
|
||||||
border: 1px gray solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.data {
|
|
||||||
font-family: "Courier New", courier, monotype;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.stdout, span.stderr, span.header {
|
|
||||||
font-family: "Courier New", courier, monotype;
|
|
||||||
font-size: 16px;
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.stderr {
|
|
||||||
color: red;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.header {
|
|
||||||
color: blue;
|
|
||||||
}
|
|
Binary file not shown.
Before Width: | Height: | Size: 1.1 KiB |
@ -1,199 +0,0 @@
|
|||||||
#!/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.
|
|
||||||
|
|
||||||
|
|
||||||
def linux():
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'Linux64DBG',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-1',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'Linux32Release',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-2',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'ChromeOS',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-3',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'Linux32DBG',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-4',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'Linux64Release',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-5',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'LinuxMemcheck',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-6',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'Android',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-7',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'LinuxClang',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-8',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'Linux64DBG-GCC4.6',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-9',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'AndroidNDK',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-10',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'LinuxTsan',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-15',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'LinuxAsan',
|
|
||||||
'hostname': 'webrtc-cb-linux-slave-16',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'LinuxLargeTests',
|
|
||||||
'hostname': 'webrtc-build-bot-se',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'linux',
|
|
||||||
'version': 'lucid',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': ['LinuxChrome', 'LinuxChromeBloat'],
|
|
||||||
'hostname': 'webrtc-chrome',
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
def mac():
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'mac',
|
|
||||||
'version': '10.7',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'MacOS32DBG',
|
|
||||||
'hostname': 'dhcp-172-28-249-144',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'mac',
|
|
||||||
'version': '10.7',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'MacOS32Release',
|
|
||||||
'hostname': 'dhcp-172-28-249-167',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'mac',
|
|
||||||
'version': '10.7',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'MacLargeTests',
|
|
||||||
'hostname': 'dhcp-172-28-249-168',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'mac',
|
|
||||||
'version': '10.7',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'MacChrome',
|
|
||||||
'hostname': 'dhcp-172-28-249-146',
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
def windows():
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'win',
|
|
||||||
'version': 'server2008',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'Win32Debug',
|
|
||||||
'hostname': 'webrtc-win2k8-1',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'win',
|
|
||||||
'version': 'server2008',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'Win32Release',
|
|
||||||
'hostname': 'webrtc-win2k8-2',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'win',
|
|
||||||
'version': 'win7',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'WinLargeTests',
|
|
||||||
'hostname': 'webrtc-test-w',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'master': 'WebRTC',
|
|
||||||
'os': 'win',
|
|
||||||
'version': 'win7',
|
|
||||||
'bits': '64',
|
|
||||||
'builder': 'WinChrome',
|
|
||||||
'hostname': 'webrtc-chrome-w',
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
slaves = linux() + mac() + windows()
|
|
@ -1,136 +0,0 @@
|
|||||||
#!/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 script will prune sufficiently old files and empty directories.
|
|
||||||
|
|
||||||
The algorithm is to look into the provided directory and delete any files
|
|
||||||
that is older than x days, recursively. Then all empty directories will be
|
|
||||||
deleted (we can't look at timestamps there since the act of deleting a file
|
|
||||||
will refresh the directory's timestamp).
|
|
||||||
|
|
||||||
Note: This script has only been tested on Linux.
|
|
||||||
"""
|
|
||||||
|
|
||||||
from optparse import OptionParser
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import time
|
|
||||||
|
|
||||||
# The path is considered whitelisted if any of these entries appear
|
|
||||||
# at some point in the path
|
|
||||||
WHITELIST = ['buildbot', 'buildbot.tac', 'Makefile', 'master.cfg',
|
|
||||||
'public_html', 'slaves.cfg', 'state.sqlite', 'twistd.pid']
|
|
||||||
|
|
||||||
|
|
||||||
def is_whitelisted(path):
|
|
||||||
'''Check if file is whitelisted.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
path: file path.
|
|
||||||
'''
|
|
||||||
for entry in WHITELIST:
|
|
||||||
if entry in path:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def delete_directory(directory):
|
|
||||||
try:
|
|
||||||
os.rmdir(directory)
|
|
||||||
return True
|
|
||||||
except OSError as exception:
|
|
||||||
if 'not empty' in str(exception):
|
|
||||||
# This is normal, ignore it
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
print >> sys.stderr, ('Could not remove directory %s: reason %s.' %
|
|
||||||
(directory, exception))
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def delete_file(file):
|
|
||||||
try:
|
|
||||||
os.remove(file)
|
|
||||||
except OSError as exception:
|
|
||||||
print >> sys.stderr, ('Unexpectedly failed to remove file %s: reason %s.' %
|
|
||||||
(file, exception))
|
|
||||||
|
|
||||||
|
|
||||||
def log_removal(file_or_directory, time_stamp, verbose):
|
|
||||||
if verbose:
|
|
||||||
str_stamp = time.strftime('%a, %d %b %Y %H:%M:%S +0000',
|
|
||||||
time.gmtime(time_stamp))
|
|
||||||
print 'Removing [%s], stamped on %s' % (file_or_directory, str_stamp)
|
|
||||||
|
|
||||||
|
|
||||||
def remove_old_files_and_directories(path, num_days, verbose, skip_dirs):
|
|
||||||
'''Removes all files under path that are older than num_days days.
|
|
||||||
The algorithm also tried to delete all directories, except for those who
|
|
||||||
contain files that are sufficiently new.
|
|
||||||
|
|
||||||
Implementation note: it doesn't make sense to look at timestamps for
|
|
||||||
directories since their timestamps are updated when a file is deleted.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
path: The starting point.
|
|
||||||
num_days: days limit for removal.
|
|
||||||
verbose: print every cmd?
|
|
||||||
'''
|
|
||||||
current_time = time.time()
|
|
||||||
limit = 60 * 60 * 24 * num_days
|
|
||||||
|
|
||||||
# Walk bottom-up so directories are deleted in the right order.
|
|
||||||
for root, directories, files in os.walk(path, topdown=False):
|
|
||||||
for file in files:
|
|
||||||
current_file = os.path.join(root, file)
|
|
||||||
time_stamp = os.stat(current_file).st_mtime
|
|
||||||
|
|
||||||
if is_whitelisted(current_file):
|
|
||||||
continue
|
|
||||||
|
|
||||||
if (current_time - time_stamp) > limit:
|
|
||||||
delete_file(current_file)
|
|
||||||
log_removal(current_file, time_stamp, verbose)
|
|
||||||
|
|
||||||
if not skip_dirs:
|
|
||||||
for directory in directories:
|
|
||||||
current_directory = os.path.join(root, directory)
|
|
||||||
time_stamp = os.stat(current_directory).st_mtime
|
|
||||||
if delete_directory(current_directory):
|
|
||||||
log_removal(current_directory, time_stamp, verbose)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
usage = 'usage: %prog -p <base path> -n <number of days> [-q] [-d]'
|
|
||||||
parser = OptionParser(usage)
|
|
||||||
parser.add_option('-p', '--path', dest='cleanup_path', help='base directory')
|
|
||||||
parser.add_option('-n', '--num_days', dest='num_days', help='number of days')
|
|
||||||
parser.add_option('-q', '--quiet',
|
|
||||||
action='store_false', dest='verbose', default=True,
|
|
||||||
help='do not print status messages to stdout')
|
|
||||||
parser.add_option('-d', '--delete-dirs-too',
|
|
||||||
action='store_false', dest='skip_dirs', default=True,
|
|
||||||
help='number of days')
|
|
||||||
|
|
||||||
options, unused_args = parser.parse_args()
|
|
||||||
if not options.cleanup_path:
|
|
||||||
sys.exit('You must specify base directory')
|
|
||||||
if not options.num_days:
|
|
||||||
sys.exit('You must specify number of days old')
|
|
||||||
|
|
||||||
if options.verbose:
|
|
||||||
print 'Cleaning up everything in %s older than %s days' % (
|
|
||||||
options.cleanup_path, options.num_days)
|
|
||||||
remove_old_files_and_directories(options.cleanup_path, int(options.num_days),
|
|
||||||
options.verbose, options.skip_dirs)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
@ -1,13 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
# This script removes all .gcda files from third_party in order to work around
|
|
||||||
# a bug in LCOV (this should also increase the bot speed).
|
|
||||||
find . -name "*.gcda" -path "*/third_party/*" | xargs rm -f
|
|
@ -1,18 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
# Generates a LCOV error report and makes the results readable to all.
|
|
||||||
|
|
||||||
genhtml $1 --output-directory $2
|
|
||||||
if [ "$?" -ne "0" ]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
chmod -R 777 $2
|
|
@ -1,8 +0,0 @@
|
|||||||
#!/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.
|
|
File diff suppressed because it is too large
Load Diff
@ -1,74 +0,0 @@
|
|||||||
#!/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.
|
|
||||||
|
|
||||||
"""Unit tests for helper functions in utils.py."""
|
|
||||||
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
from webrtc_buildbot import utils
|
|
||||||
|
|
||||||
|
|
||||||
class Test(unittest.TestCase):
|
|
||||||
|
|
||||||
def testGetEnabledTests(self):
|
|
||||||
tests = {
|
|
||||||
# Name Linux Mac Windows
|
|
||||||
'test_1': (True, True, False),
|
|
||||||
'test_2': (True, False, False),
|
|
||||||
}
|
|
||||||
result = utils.GetEnabledTests(tests, 'Linux')
|
|
||||||
self.assertEqual(2, len(result))
|
|
||||||
self.assertEqual('test_1', result[0])
|
|
||||||
self.assertEqual('test_2', result[1])
|
|
||||||
|
|
||||||
result = utils.GetEnabledTests(tests, 'Mac')
|
|
||||||
self.assertEqual(1, len(result))
|
|
||||||
self.assertEqual('test_1', result[0])
|
|
||||||
|
|
||||||
result = utils.GetEnabledTests(tests, 'Windows')
|
|
||||||
self.assertEqual(0, len(result))
|
|
||||||
|
|
||||||
self.assertRaises(utils.UnsupportedPlatformError,
|
|
||||||
utils.GetEnabledTests, tests, 'BeOS')
|
|
||||||
|
|
||||||
def testEmptyListExitQuietly(self):
|
|
||||||
factory = utils.WebRTCFactory()
|
|
||||||
self.assertEqual([], factory._WrapLongLines([]))
|
|
||||||
|
|
||||||
def testShortLinesShallNotWrap(self):
|
|
||||||
factory = utils.WebRTCFactory()
|
|
||||||
self.assertEqual(['a'], factory._WrapLongLines(['a']))
|
|
||||||
|
|
||||||
string_25_len = '12345678901234567890123_5'
|
|
||||||
result = factory._WrapLongLines([string_25_len, string_25_len])
|
|
||||||
self.assertEqual(string_25_len, result[0])
|
|
||||||
self.assertEqual(string_25_len, result[1])
|
|
||||||
|
|
||||||
def testLinesWithMoreThan25CharactersWithNoWrapCharacterIsUnchanged(self):
|
|
||||||
factory = utils.WebRTCFactory()
|
|
||||||
string_26_len = '12345678901234567890123456'
|
|
||||||
result = factory._WrapLongLines([string_26_len, string_26_len])
|
|
||||||
self.assertEqual(string_26_len, result[0])
|
|
||||||
self.assertEqual(string_26_len, result[1])
|
|
||||||
|
|
||||||
def testLinesWithMoreThan25CharactersShallWrapOnWrapCharacter(self):
|
|
||||||
factory = utils.WebRTCFactory()
|
|
||||||
string_26_len = '123456789012345678901234_6'
|
|
||||||
test_list = [string_26_len, string_26_len]
|
|
||||||
result = factory._WrapLongLines(test_list)
|
|
||||||
expected_result = '123456789012345678901234 _6'
|
|
||||||
self.assertEqual(expected_result, result[0])
|
|
||||||
self.assertEqual(expected_result, result[1])
|
|
||||||
# Verify the original test_list was not modified too.
|
|
||||||
self.assertEqual(string_26_len, test_list[0])
|
|
||||||
self.assertEqual(string_26_len, test_list[1])
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
unittest.main()
|
|
@ -1,57 +0,0 @@
|
|||||||
#!/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.
|
|
||||||
|
|
||||||
"""Utility class to build Chromium with the latest WebRTC.
|
|
||||||
|
|
||||||
Based on chromium_factory.py and adds WebRTC-specific custom_deps."""
|
|
||||||
|
|
||||||
from master.factory import chromium_factory
|
|
||||||
from webrtc_buildbot import webrtc_commands
|
|
||||||
|
|
||||||
|
|
||||||
class ChromiumWebRTCFactory(chromium_factory.ChromiumFactory):
|
|
||||||
|
|
||||||
# gclient additional custom deps
|
|
||||||
CUSTOM_DEPS_WEBRTC_LATEST = ('src/third_party/webrtc',
|
|
||||||
'http://webrtc.googlecode.com/svn/stable/src')
|
|
||||||
|
|
||||||
def ChromiumWebRTCLatestFactory(self, target='Release', clobber=False,
|
|
||||||
tests=None, mode=None,
|
|
||||||
slave_type='BuilderTester', options=None,
|
|
||||||
compile_timeout=1200, build_url=None,
|
|
||||||
project=None, factory_properties=None,
|
|
||||||
custom_deps_list=[]):
|
|
||||||
custom_deps_list.append(self.CUSTOM_DEPS_WEBRTC_LATEST)
|
|
||||||
self._solutions[0].custom_deps_list = custom_deps_list
|
|
||||||
factory = self.ChromiumFactory(target, clobber, tests, mode, slave_type,
|
|
||||||
options, compile_timeout, build_url, project,
|
|
||||||
factory_properties)
|
|
||||||
webrtc_cmd_obj = webrtc_commands.WebRTCCommands(factory, target,
|
|
||||||
self._build_dir,
|
|
||||||
self._target_platform)
|
|
||||||
webrtc_cmd_obj.AddCompilePeerConnectionServerStep()
|
|
||||||
webrtc_cmd_obj.AddPyAutoTests(factory_properties)
|
|
||||||
return factory
|
|
||||||
|
|
||||||
def ChromiumWebRTCBloatFactory(self, target='Release', clobber=False,
|
|
||||||
tests=None, mode=None,
|
|
||||||
slave_type='BuilderTester', options=None,
|
|
||||||
compile_timeout=1200, build_url=None,
|
|
||||||
project=None, factory_properties=None,
|
|
||||||
custom_deps_list=[]):
|
|
||||||
custom_deps_list.append(self.CUSTOM_DEPS_WEBRTC_LATEST)
|
|
||||||
self._solutions[0].custom_deps_list = custom_deps_list
|
|
||||||
factory = self.ChromiumFactory(target, clobber, tests, mode, slave_type,
|
|
||||||
options, compile_timeout, build_url, project,
|
|
||||||
factory_properties)
|
|
||||||
webrtc_cmd_obj = webrtc_commands.WebRTCCommands(factory, target,
|
|
||||||
self._build_dir,
|
|
||||||
self._target_platform)
|
|
||||||
webrtc_cmd_obj.AddBloatCalculationStep(factory_properties)
|
|
||||||
return factory
|
|
@ -1,145 +0,0 @@
|
|||||||
#!/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.
|
|
||||||
|
|
||||||
"""Set of utilities to add commands to a buildbot factory.
|
|
||||||
|
|
||||||
This is based on chromium_commands.py and adds WebRTC-specific commands."""
|
|
||||||
|
|
||||||
from buildbot.steps.shell import ShellCommand
|
|
||||||
from master.factory import chromium_commands
|
|
||||||
from master.log_parser import cl_command
|
|
||||||
from webrtc_buildbot import utils
|
|
||||||
|
|
||||||
DEFAULT_BLOAT_DIR = '/var/www/bloat'
|
|
||||||
DEFAULT_BLOAT_URL = 'http://webrtc-chrome.lul/bloat/webrtc_bloat.html'
|
|
||||||
|
|
||||||
|
|
||||||
class PlatformNotSupportedException(Exception): pass
|
|
||||||
class MissingGypDefineException(Exception): pass
|
|
||||||
|
|
||||||
|
|
||||||
class WebRTCCommands(chromium_commands.ChromiumCommands):
|
|
||||||
"""Encapsulates methods to add WebRTC commands to a buildbot factory."""
|
|
||||||
|
|
||||||
def __init__(self, factory=None, target=None, build_dir=None,
|
|
||||||
target_platform=None, target_arch=None):
|
|
||||||
chromium_commands.ChromiumCommands.__init__(self, factory, target,
|
|
||||||
build_dir, target_platform)
|
|
||||||
|
|
||||||
self._arch = target_arch
|
|
||||||
self._factory = factory
|
|
||||||
|
|
||||||
def AddPyAutoTests(self, factory_properties=None, timeout=1200):
|
|
||||||
"""Adds WebRTC PyAuto test steps."""
|
|
||||||
# The WEBRTC group lists the PyAuto tests we have written for WebRTC.
|
|
||||||
# It's located at: src/chrome/test/functional/PYAUTO_TESTS
|
|
||||||
self.AddPyAutoFunctionalTest('WebRTC functional PyAuto test',
|
|
||||||
suite='WEBRTC', timeout=timeout, perf=False,
|
|
||||||
factory_properties=factory_properties)
|
|
||||||
|
|
||||||
def AddCompilePeerConnectionServerStep(self):
|
|
||||||
# Add platform dependent peerconnection_server compilation:
|
|
||||||
solution = None
|
|
||||||
options = None
|
|
||||||
if self._target_platform.startswith('linux'):
|
|
||||||
options=['peerconnection_server']
|
|
||||||
elif self._target_platform.startswith('win'):
|
|
||||||
solution=r'..\third_party\libjingle\libjingle.sln;peerconnection_server'
|
|
||||||
elif self._target_platform is 'mac':
|
|
||||||
options=['--', '-project', '../third_party/libjingle/libjingle.xcodeproj',
|
|
||||||
'-target', 'peerconnection_server'],
|
|
||||||
else:
|
|
||||||
raise PlatformNotSupportedException(
|
|
||||||
'Platform "%s" is not currently supported.' % self._target_platform)
|
|
||||||
self.AddCompileStep(solution=solution,
|
|
||||||
options=options,
|
|
||||||
description='compiling peerconnection_server',
|
|
||||||
descriptionDone='compile peerconnection_server')
|
|
||||||
|
|
||||||
def AddBloatCalculationStep(self, factory_properties):
|
|
||||||
"""Runs a bloat calculation, which will yield a size breakdown for Chrome.
|
|
||||||
|
|
||||||
If running in Release mode, you should also run with profiling to get the
|
|
||||||
symbols right. Running this on Debug mode will work but it will probably
|
|
||||||
take hours.
|
|
||||||
|
|
||||||
This step command is only supported on Linux platforms.
|
|
||||||
"""
|
|
||||||
if self._target is 'Release':
|
|
||||||
factory = factory_properties
|
|
||||||
if not (factory.has_key('gclient_env') and
|
|
||||||
factory['gclient_env'].has_key('GYP_DEFINES') and
|
|
||||||
factory['gclient_env']['GYP_DEFINES'].find('profiling=1') != -1):
|
|
||||||
raise MissingGypDefineException(
|
|
||||||
'You must add a dictionary to the gclient_env factory property'
|
|
||||||
'containing a key GYP_DEFINES and a value containing profiling=1.')
|
|
||||||
|
|
||||||
bloat_path = self.PathJoin(utils.WEBRTC_BUILD_DIR, '..', '..', '..', '..',
|
|
||||||
'..', '..', 'build_internal', 'symsrc',
|
|
||||||
'calculate_bloat.py')
|
|
||||||
output_filename = self.PathJoin(DEFAULT_BLOAT_DIR, 'bloat_latest.json')
|
|
||||||
chrome_binary = self.PathJoin('out', self._target, 'chrome')
|
|
||||||
cmd = [bloat_path, '--binary', chrome_binary, '--source-path', '.',
|
|
||||||
'--output-file', output_filename]
|
|
||||||
self._factory.addStep(ShellCommandWithUrl(command=cmd,
|
|
||||||
url=DEFAULT_BLOAT_URL,
|
|
||||||
description='calculate bloat',
|
|
||||||
warnOnFailure=True,
|
|
||||||
workdir='build/src',
|
|
||||||
timeout=7200))
|
|
||||||
|
|
||||||
def AddTestStep(self, command_class, test_name, test_command,
|
|
||||||
test_description='', timeout=10*60, max_time=8*60*60,
|
|
||||||
workdir=None, env=None, locks=None, halt_on_failure=False,
|
|
||||||
do_step_if=True):
|
|
||||||
"""This override is a hack to get the step to warn instead of failing."""
|
|
||||||
assert timeout <= max_time
|
|
||||||
do_step_if = do_step_if or self.TestStepFilter
|
|
||||||
self._factory.addStep(
|
|
||||||
command_class,
|
|
||||||
name=test_name,
|
|
||||||
timeout=timeout,
|
|
||||||
maxTime=max_time,
|
|
||||||
doStepIf=do_step_if,
|
|
||||||
workdir=workdir,
|
|
||||||
env=env,
|
|
||||||
description='running %s%s' % (test_name, test_description),
|
|
||||||
descriptionDone='%s%s' % (test_name, test_description),
|
|
||||||
haltOnFailure=halt_on_failure,
|
|
||||||
warnOnFailure=True,
|
|
||||||
flunkOnFailure=False,
|
|
||||||
command=test_command)
|
|
||||||
|
|
||||||
|
|
||||||
def AddCompileStep(self, solution, clobber=False, description='compiling',
|
|
||||||
descriptionDone='compile', timeout=600, mode=None,
|
|
||||||
options=None):
|
|
||||||
"""This override is a hack to get the step to warn instead of failing."""
|
|
||||||
self._factory.addStep(cl_command.CLCommand,
|
|
||||||
enable_warnings=0,
|
|
||||||
timeout=timeout,
|
|
||||||
description=description,
|
|
||||||
descriptionDone=descriptionDone,
|
|
||||||
warnOnFailure=True,
|
|
||||||
flunkOnFailure=False,
|
|
||||||
command=self.GetBuildCommand(clobber,
|
|
||||||
solution,
|
|
||||||
mode,
|
|
||||||
options))
|
|
||||||
|
|
||||||
|
|
||||||
class ShellCommandWithUrl(ShellCommand):
|
|
||||||
"""A regular shell command which posts a link when it's done."""
|
|
||||||
def __init__(self, url, **kwargs):
|
|
||||||
ShellCommand.__init__(self, **kwargs)
|
|
||||||
self.addFactoryArguments(url=url)
|
|
||||||
self.url = url
|
|
||||||
|
|
||||||
def createSummary(self, log):
|
|
||||||
self.addURL('click here', self.url)
|
|
@ -1,164 +0,0 @@
|
|||||||
#!/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.
|
|
||||||
|
|
||||||
# This file is based on the Chromium config.py located at
|
|
||||||
# /trunk/tools/build/site_config/config_default.py of the Chromium tools.
|
|
||||||
|
|
||||||
import socket
|
|
||||||
|
|
||||||
class Master(object):
|
|
||||||
# Repository URLs used by the SVNPoller and 'gclient config'.
|
|
||||||
webrtc_root_url = 'http://webrtc.googlecode.com/svn'
|
|
||||||
|
|
||||||
# Leave Chromium's server URL intact, since we also build Chrome.
|
|
||||||
server_url = 'http://src.chromium.org'
|
|
||||||
git_server_url = 'http://src.chromium.org/git'
|
|
||||||
repo_root = '/svn'
|
|
||||||
|
|
||||||
# External repos.
|
|
||||||
googlecode_url = 'http://%s.googlecode.com/svn'
|
|
||||||
sourceforge_url = 'http://%(repo)s.svn.sourceforge.net/svnroot/%(repo)s'
|
|
||||||
|
|
||||||
# Directly fetches from anonymous webkit svn server.
|
|
||||||
webkit_root_url = 'http://svn.webkit.org/repository/webkit'
|
|
||||||
nacl_trunk_url = 'http://src.chromium.org/native_client/trunk'
|
|
||||||
|
|
||||||
llvm_url = 'http://llvm.org/svn/llvm-project'
|
|
||||||
|
|
||||||
# Other non-redistributable repositories.
|
|
||||||
repo_root_internal = None
|
|
||||||
trunk_internal_url = None
|
|
||||||
trunk_internal_url_src = None
|
|
||||||
gears_url_internal = None
|
|
||||||
o3d_url_internal = None
|
|
||||||
nacl_trunk_url_internal = None
|
|
||||||
nacl_url_internal = None
|
|
||||||
|
|
||||||
syzygy_internal_url = None
|
|
||||||
|
|
||||||
# Other non-redistributable repositories.
|
|
||||||
repo_root_internal = None
|
|
||||||
trunk_internal_url = None
|
|
||||||
trunk_internal_url_src = None
|
|
||||||
|
|
||||||
# Please change this accordingly.
|
|
||||||
master_domain = 'webrtc.org'
|
|
||||||
permitted_domains = ('webrtc.org',)
|
|
||||||
|
|
||||||
# Your smtp server to enable mail notifications.
|
|
||||||
smtp = 'smtp'
|
|
||||||
|
|
||||||
# By default, bot_password will be filled in by config.GetBotPassword();
|
|
||||||
# if the private config wants to override this, it can do so.
|
|
||||||
bot_password = None
|
|
||||||
|
|
||||||
class _Base(object):
|
|
||||||
# Master address. You should probably copy this file in another svn repo
|
|
||||||
# so you can override this value on both the slaves and the master.
|
|
||||||
master_host = 'webrtc-cb-linux-master.cbf.corp.google.com'
|
|
||||||
# If set to True, the master will do nasty stuff like closing the tree,
|
|
||||||
# sending emails or other similar behaviors. Don't change this value unless
|
|
||||||
# you modified the other settings extensively.
|
|
||||||
is_production_host = socket.getfqdn() == master_host
|
|
||||||
# Additional email addresses to send gatekeeper (automatic tree closage)
|
|
||||||
# notifications. Unnecessary for experimental masters and try servers.
|
|
||||||
tree_closing_notification_recipients = []
|
|
||||||
# 'from:' field for emails sent from the server.
|
|
||||||
from_address = 'webrtc-cb-watchlist@google.com'
|
|
||||||
# Code review site to upload results. You should setup your own Rietveld
|
|
||||||
# instance with the code at
|
|
||||||
# http://code.google.com/p/rietveld/source/browse/#svn/branches/chromium
|
|
||||||
# You can host your own private rietveld instance on Django, see
|
|
||||||
# http://code.google.com/p/google-app-engine-django and
|
|
||||||
# http://code.google.com/appengine/articles/pure_django.html
|
|
||||||
code_review_site = 'https://webrtc-codereview.appspot.com/status_listener'
|
|
||||||
|
|
||||||
# For the following values, they are used only if non-0. Do not set them
|
|
||||||
# here, set them in the actual master configuration class.
|
|
||||||
|
|
||||||
# Used for the waterfall URL and the waterfall's WebStatus object.
|
|
||||||
master_port = 0
|
|
||||||
# Which port slaves use to connect to the master.
|
|
||||||
slave_port = 0
|
|
||||||
# The alternate read-only page. Optional.
|
|
||||||
master_port_alt = 0
|
|
||||||
# HTTP port for try jobs.
|
|
||||||
try_job_port = 0
|
|
||||||
|
|
||||||
## Chrome related
|
|
||||||
|
|
||||||
class _ChromiumBase(_Base):
|
|
||||||
# Tree status urls. You should fork the code from tools/chromium-status/ and
|
|
||||||
# setup your own AppEngine instance (or use directly Django to create a
|
|
||||||
# local instance).
|
|
||||||
# Defaulting urls that are used to POST data to 'localhost' so a local dev
|
|
||||||
# server can be used for testing and to make sure nobody updates the tree
|
|
||||||
# status by error!
|
|
||||||
#
|
|
||||||
# This url is used for HttpStatusPush:
|
|
||||||
base_app_url = 'http://localhost:8080'
|
|
||||||
# HTTP url that should return 0 or 1, depending if the tree is open or
|
|
||||||
# closed. It is also used as POST to update the tree status.
|
|
||||||
tree_status_url = base_app_url + '/status'
|
|
||||||
# Used by LKGR to POST data.
|
|
||||||
store_revisions_url = base_app_url + '/revisions'
|
|
||||||
# Used by the try server to sync to the last known good revision:
|
|
||||||
last_good_url = 'http://webrtc-dashboard.appspot.com/lkgr'
|
|
||||||
|
|
||||||
class WebRTC(_ChromiumBase):
|
|
||||||
# Used by the waterfall display.
|
|
||||||
project_name = 'WebRTC'
|
|
||||||
master_port = 8010
|
|
||||||
slave_port = 9112
|
|
||||||
master_port_alt = 9014
|
|
||||||
|
|
||||||
class WebRTCMemory(_ChromiumBase):
|
|
||||||
project_name = 'WebRTC Memory'
|
|
||||||
master_port = 9014
|
|
||||||
slave_port = 9119
|
|
||||||
master_port_alt = 9047
|
|
||||||
|
|
||||||
class WebRTCPerf(_ChromiumBase):
|
|
||||||
project_name = 'WebRTC Perf'
|
|
||||||
master_port = 9050
|
|
||||||
slave_port = 9151
|
|
||||||
master_port_alt = 9052
|
|
||||||
|
|
||||||
class TryServer(_ChromiumBase):
|
|
||||||
project_name = 'WebRTC Try Server'
|
|
||||||
master_port = 9010
|
|
||||||
slave_port = 9113
|
|
||||||
master_port_alt = 9015
|
|
||||||
try_job_port = 9018
|
|
||||||
# The svn repository to poll to grab try patches. For chrome, we use a
|
|
||||||
# separate repo to put all the diff files to be tried.
|
|
||||||
svn_url = None
|
|
||||||
|
|
||||||
class Libvpx(_ChromiumBase):
|
|
||||||
# Used by the waterfall display.
|
|
||||||
project_name = 'libvpx'
|
|
||||||
master_port = 8011
|
|
||||||
slave_port = 9114
|
|
||||||
master_port_alt = 9016
|
|
||||||
|
|
||||||
class Archive(object):
|
|
||||||
archive_host = 'localhost'
|
|
||||||
# Skip any filenames (exes, symbols, etc.) starting with these strings
|
|
||||||
# entirely, typically because they're not built for this distribution.
|
|
||||||
exes_to_skip_entirely = []
|
|
||||||
# Web server base path.
|
|
||||||
www_dir_base = "\\\\" + archive_host + "\\www\\"
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def Internal():
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class Distributed(object):
|
|
||||||
"""Not much to describe."""
|
|
@ -1,88 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
#-*- coding: utf-8 -*-
|
|
||||||
# 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__ = 'phoglund@webrtc.org (Patrik Höglund)'
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
from optparse import OptionParser
|
|
||||||
|
|
||||||
"""Computes a webtreemap-compatible bloat .json file for a binary.
|
|
||||||
|
|
||||||
This will produce an overview of the binary which shows the sizes of its
|
|
||||||
constituent parts. The binary should be built with -g for symbols. If building
|
|
||||||
Chrome, you must include profiling=1 if building in Release mode.
|
|
||||||
|
|
||||||
This script only runs on Linux. It requires the nm utility (part of the binutils
|
|
||||||
package) as well as the bloat.py script. It can run from any working directory.
|
|
||||||
"""
|
|
||||||
|
|
||||||
THIS_SCRIPTS_PATH = os.path.dirname(os.path.realpath(__file__))
|
|
||||||
BLOAT_SCRIPT = THIS_SCRIPTS_PATH + '/../../../third_party/bloat/bloat.py'
|
|
||||||
|
|
||||||
|
|
||||||
def _run_nm(binary):
|
|
||||||
raw_nm_filename = 'nm.out'
|
|
||||||
raw_nm_file = open(raw_nm_filename, 'w')
|
|
||||||
subprocess.check_call(['nm', '-C', '-S', '-l', binary], stdout=raw_nm_file)
|
|
||||||
raw_nm_file.close()
|
|
||||||
return raw_nm_filename
|
|
||||||
|
|
||||||
|
|
||||||
def _run_bloat(raw_nm_filename, source_path, output_filename):
|
|
||||||
json_file = open(output_filename, 'w')
|
|
||||||
subprocess.check_call([BLOAT_SCRIPT,
|
|
||||||
'--strip-prefix=%s' % source_path,
|
|
||||||
'--nm-output=%s' % raw_nm_filename,
|
|
||||||
'syms'], stdout=json_file, stderr=None)
|
|
||||||
json_file.close()
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
if not os.path.exists(BLOAT_SCRIPT):
|
|
||||||
return 'Missing required dependency bloat (looked in %s).' % BLOAT_SCRIPT
|
|
||||||
|
|
||||||
usage = 'usage: %prog -b <binary> -s <path to source> -o <output JSON file>'
|
|
||||||
parser = OptionParser(usage)
|
|
||||||
parser.add_option('-b', '--binary', dest='binary', default=False,
|
|
||||||
help='Binary to run the bloat calculation on. ' +
|
|
||||||
'The binary should be built with -g for symbols.')
|
|
||||||
parser.add_option('-s', '--source-path', dest='source_path', default=False,
|
|
||||||
help='Where the binary\'s source code is.')
|
|
||||||
parser.add_option('-o', '--output-file', dest='output_file', default=False,
|
|
||||||
help='Where to put the resulting JSON file.')
|
|
||||||
options, unused_args = parser.parse_args()
|
|
||||||
|
|
||||||
if not options.binary:
|
|
||||||
return '%s\n\nYou must specify the binary to run on.' % usage
|
|
||||||
if not options.output_file:
|
|
||||||
return '%s\n\nYou must specify where to put the output file.' % usage
|
|
||||||
if not options.source_path:
|
|
||||||
return '%s\n\nYou must specify the binary\'s source code path.' % usage
|
|
||||||
if not os.path.exists(options.binary):
|
|
||||||
return 'Binary %s does not exist.' % options.binary
|
|
||||||
if not os.path.exists(options.source_path):
|
|
||||||
return 'Source path %s does not exist.' % options.source_path
|
|
||||||
|
|
||||||
# Convert the source path to an absolute path. The ending slash is important
|
|
||||||
# for --strip-prefix later!
|
|
||||||
options.source_path = os.path.realpath(options.source_path) + '/'
|
|
||||||
|
|
||||||
raw_nm_filename = _run_nm(options.binary)
|
|
||||||
_run_bloat(raw_nm_filename, options.source_path, options.output_file)
|
|
||||||
|
|
||||||
os.remove(raw_nm_filename)
|
|
||||||
|
|
||||||
return 0
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.exit(main())
|
|
@ -1,50 +0,0 @@
|
|||||||
#!/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__ = 'kjellander@webrtc.org (Henrik Kjellander)'
|
|
||||||
|
|
||||||
"""Clean up a build by removing just compile output or everything (nuke).
|
|
||||||
|
|
||||||
This script assumes the trunk directory is located directly below the current
|
|
||||||
working directory.
|
|
||||||
"""
|
|
||||||
|
|
||||||
from optparse import OptionParser
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from common import chromium_utils
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
usage = 'usage: %prog [--nuke]'
|
|
||||||
parser = OptionParser(usage)
|
|
||||||
parser.add_option('-n', '--nuke',
|
|
||||||
action='store_true', dest='nuke', default=False,
|
|
||||||
help='Nuke whole repository (not just build output)')
|
|
||||||
options, unused_args = parser.parse_args()
|
|
||||||
|
|
||||||
if options.nuke:
|
|
||||||
chromium_utils.RemoveDirectory('trunk')
|
|
||||||
else:
|
|
||||||
# Remove platform specific build output directories.
|
|
||||||
if chromium_utils.IsWindows():
|
|
||||||
chromium_utils.RemoveDirectory('trunk\\build\\Debug')
|
|
||||||
chromium_utils.RemoveDirectory('trunk\\build\\Release')
|
|
||||||
elif chromium_utils.IsMac():
|
|
||||||
chromium_utils.RemoveDirectory('trunk/out')
|
|
||||||
chromium_utils.RemoveDirectory('trunk/xcodebuild')
|
|
||||||
elif chromium_utils.IsLinux():
|
|
||||||
chromium_utils.RemoveDirectory('trunk/out')
|
|
||||||
else:
|
|
||||||
print 'Unknown platform: ' + sys.platform
|
|
||||||
return 1
|
|
||||||
return 0
|
|
||||||
|
|
||||||
if '__main__' == __name__:
|
|
||||||
sys.exit(main())
|
|
@ -1,44 +0,0 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
|
||||||
"http://www.w3.org/TR/html4/strict.dtd">
|
|
||||||
<html>
|
|
||||||
<!--
|
|
||||||
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.
|
|
||||||
|
|
||||||
This HTML file displays the WebRTC bloat calculation. Some code here
|
|
||||||
is based on the webtreemap demo file. Copy this file to wherever
|
|
||||||
calculate_bloat.py writes its output .json file (which should be named
|
|
||||||
bloat_latest.json) and it will automatically display the .json file.
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<title>WebRTC Binary Size Tracker</title>
|
|
||||||
<link rel="stylesheet" href="webtreemap.css">
|
|
||||||
<script src="webtreemap.js" type="text/javascript"></script>
|
|
||||||
<script src="bloat_latest.json" type="text/javascript"></script>
|
|
||||||
<style type="text/css">
|
|
||||||
#map {
|
|
||||||
width: 500px;
|
|
||||||
height: 300px;
|
|
||||||
|
|
||||||
position: relative;
|
|
||||||
cursor: pointer;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>WebRTC Binary Size Tracker</h1>
|
|
||||||
<p>Click on a box to zoom in. Click on the outermost box to zoom out.</p>
|
|
||||||
<div id="map"></div>
|
|
||||||
<script type="text/javascript">
|
|
||||||
// The kTree variable is defined by bloat_latest.json.
|
|
||||||
var map = document.getElementById("map");
|
|
||||||
appendTreemap(map, kTree);
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,8 +0,0 @@
|
|||||||
#!/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.
|
|
@ -1,66 +0,0 @@
|
|||||||
#!/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__ = 'kjellander@webrtc.org (Henrik Kjellander)'
|
|
||||||
|
|
||||||
"""Contains a customized GClient class for WebRTC use.
|
|
||||||
|
|
||||||
It is essential that this class is imported after the chromium_commands so it
|
|
||||||
can overwrite its registration of the 'gclient' command.
|
|
||||||
This should by done by adding:
|
|
||||||
|
|
||||||
from webrtc_buildbot import slave_utils
|
|
||||||
|
|
||||||
into the buildbot.tac file of the try slave.
|
|
||||||
"""
|
|
||||||
|
|
||||||
from slave import chromium_commands
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Buildbot 0.8.x
|
|
||||||
# Unable to import 'XX'
|
|
||||||
# pylint: disable=F0401
|
|
||||||
from buildslave.commands.registry import commandRegistry
|
|
||||||
except ImportError:
|
|
||||||
# Buildbot 0.7.12
|
|
||||||
# Unable to import 'XX'
|
|
||||||
# pylint: disable=E0611,E1101,F0401
|
|
||||||
from buildbot.slave.registry import registerSlaveCommand
|
|
||||||
|
|
||||||
class GClient(chromium_commands.GClient):
|
|
||||||
def doPatch(self, res):
|
|
||||||
# For some unknown reason, the patch tuple recieved only have two items:
|
|
||||||
# the patch level and the actual diff contents. The third optional root
|
|
||||||
# argument that tells which base directory to use for the patch is not
|
|
||||||
# included. Since we need this to be able to patch properly in WebRTC, we'll
|
|
||||||
# just create a new tuple with this added.
|
|
||||||
self.patch = (self.patch[0], self.patch[1], 'trunk')
|
|
||||||
return chromium_commands.GClient.doPatch(self, res)
|
|
||||||
|
|
||||||
|
|
||||||
def RegisterGclient():
|
|
||||||
try:
|
|
||||||
# This version should work on BB 8.3
|
|
||||||
|
|
||||||
# We run this code in a try because it fails with an assertion if
|
|
||||||
# the module is loaded twice.
|
|
||||||
commandRegistry['gclient'] = 'webrtc_buildbot.slave_utils.GClient'
|
|
||||||
return
|
|
||||||
except (AssertionError, NameError):
|
|
||||||
pass
|
|
||||||
|
|
||||||
try:
|
|
||||||
# This version should work on BB 7.12
|
|
||||||
# We run this code in a try because it fails with an assertion if
|
|
||||||
# the module is loaded twice.
|
|
||||||
registerSlaveCommand('gclient', GClient, commands.command_version)
|
|
||||||
except (AssertionError, NameError):
|
|
||||||
pass
|
|
||||||
|
|
||||||
RegisterGclient()
|
|
@ -1,64 +0,0 @@
|
|||||||
#!/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.
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""
|
|
||||||
Performs changes after checkout needed for WebRTC buildbot customizations.
|
|
||||||
|
|
||||||
This script performs the following tasks:
|
|
||||||
- Adds an import of the WebRTC slave_utils module in the buildbot.tac file.
|
|
||||||
It will add a comment and the import at the end of the file, if it's not
|
|
||||||
already present.
|
|
||||||
- Removes the slaves.cfg for the Libvpx waterfall on Windows platforms, since
|
|
||||||
symbolic links are not available on this platform and the resulting link
|
|
||||||
file causes a parsing error in Python when loaded during slave startup.
|
|
||||||
|
|
||||||
Using this script, we don't need to maintain our own version of the slave
|
|
||||||
scripts and can automatically stay up to date with their changes.
|
|
||||||
|
|
||||||
This script should be invoked as a hooks step in the DEPS file, like this:
|
|
||||||
hooks = [
|
|
||||||
{
|
|
||||||
# Update slave buildbot.tac to include WebRTC slave_utils import.
|
|
||||||
"pattern": ".",
|
|
||||||
"action": ["python", "tools/fix_webrtc_buildbots.py"],
|
|
||||||
},
|
|
||||||
]
|
|
||||||
"""
|
|
||||||
SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__))
|
|
||||||
|
|
||||||
# Patch buildbot.tac.
|
|
||||||
TARGET_FILE = os.path.join(SCRIPT_PATH,
|
|
||||||
'continuous_build/build/slave/buildbot.tac')
|
|
||||||
COMMENT_LINE = '# Load WebRTC custom slave script.\n'
|
|
||||||
IMPORT_LINE = 'from webrtc_buildbot import slave_utils\n'
|
|
||||||
|
|
||||||
file = open(TARGET_FILE, 'r')
|
|
||||||
if file.read().find(IMPORT_LINE) == -1:
|
|
||||||
print 'Patching %s with WebRTC imports.' % TARGET_FILE
|
|
||||||
file.close()
|
|
||||||
file = open(TARGET_FILE, 'a')
|
|
||||||
file.write(COMMENT_LINE)
|
|
||||||
file.write(IMPORT_LINE)
|
|
||||||
file.close()
|
|
||||||
|
|
||||||
# Remove Libvpx waterfall's slaves.cfg on Windows.
|
|
||||||
if sys.platform.startswith('win'):
|
|
||||||
slave_cfg = os.path.join(SCRIPT_PATH, ('continuous_build/build_internal/'
|
|
||||||
'masters/master.libvpx/slaves.cfg'))
|
|
||||||
if os.path.exists(slave_cfg):
|
|
||||||
os.remove(slave_cfg)
|
|
||||||
print 'Removed %s for Libvpx waterfall on Windows.' % slave_cfg
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
Loading…
Reference in New Issue
Block a user