Index: zorg/trunk/buildbot/llvmlab/master/Makefile =================================================================== --- zorg/trunk/buildbot/llvmlab/master/Makefile +++ zorg/trunk/buildbot/llvmlab/master/Makefile @@ -1,34 +0,0 @@ -# -*- makefile -*- - -# This is a simple makefile which lives in a buildmaster/buildslave -# directory (next to the buildbot.tac file). It allows you to start/stop the -# master or slave in a launchd-friendly way by doing 'make start' or 'make stop' -# and includes some other targets for convenience. - -ZORGROOT := $(shell pwd)/../../.. - -start: - launchctl start org.llvm.smooshlab.master - -start-standalone: - env PYTHONPATH=$(ZORGROOT):$(ZORGROOT)/buildbot:"$$PYTHONPATH" /usr/bin/twistd \ - --nodaemon \ - --python=buildbot.tac \ - --logfile=twistd.log \ - --prefix=smooshlab - -# This stops the buildbot cleanly so launchd will not restart it, use -# 'make start' to restart it correctly via launchctl -stop: - buildbot stop . - -restart: stop start - -# Reloads the master.cfg and associated files. -sighup: - buildbot sighup . - -reconfig: sighup - -checkconfig: - env PYTHONPATH=$(ZORGROOT):$(ZORGROOT)/buildbot:"$$PYTHONPATH" buildbot checkconfig Index: zorg/trunk/buildbot/llvmlab/master/buildbot.tac =================================================================== --- zorg/trunk/buildbot/llvmlab/master/buildbot.tac +++ zorg/trunk/buildbot/llvmlab/master/buildbot.tac @@ -1,37 +0,0 @@ -# -*- Python -*- - -from twisted.application import service -from buildbot.master import BuildMaster -import os - -basedir = os.path.dirname(os.path.abspath(__file__)) -rotateLength = 10000000 -maxRotatedFiles = 10 - -# if this is a relocatable tac file, get the directory containing the TAC -if basedir == '.': - import os.path - basedir = os.path.abspath(os.path.dirname(__file__)) - -# note: this line is matched against to check that this is a buildmaster -# directory; do not edit it. -application = service.Application('buildmaster') - -try: - from twisted.python.logfile import LogFile - from twisted.python.log import ILogObserver, FileLogObserver - logfile = LogFile.fromFullPath(os.path.join(basedir, "twistd.log"), rotateLength=rotateLength, - maxRotatedFiles=maxRotatedFiles) - application.setComponent(ILogObserver, FileLogObserver(logfile).emit) -except ImportError: - # probably not yet twisted 8.2.0 and beyond, can't set log yet - pass - -configfile = r'master.cfg' - -m = BuildMaster(basedir, configfile) -m.setServiceParent(application) -m.log_rotation.rotateLength = rotateLength -m.log_rotation.maxRotatedFiles = maxRotatedFiles - - Index: zorg/trunk/buildbot/llvmlab/master/config/__init__.py =================================================================== --- zorg/trunk/buildbot/llvmlab/master/config/__init__.py +++ zorg/trunk/buildbot/llvmlab/master/config/__init__.py @@ -1,12 +0,0 @@ -# Load local options. -import os -import ConfigParser -options = ConfigParser.RawConfigParser() -options.read(os.path.join(os.path.dirname(__file__), 'local.cfg')) - -import builderconstruction -import builders -import phase_config -import schedulers -import slaves -import status Index: zorg/trunk/buildbot/llvmlab/master/config/builderconstruction.py =================================================================== --- zorg/trunk/buildbot/llvmlab/master/config/builderconstruction.py +++ zorg/trunk/buildbot/llvmlab/master/config/builderconstruction.py @@ -1,265 +0,0 @@ -#from zorg.buildbot.builders.LNTBuilder import CreateLNTNightlyFactory -from zorg.buildbot.util.artifacts import rsync_user, master_name -import zorg.buildbot.builders.ClangBuilder as ClangBuilder -from zorg.buildbot.builders.LLDBBuilder import getLLDBxcodebuildFactory -import zorg.buildbot.builders.LibCXXBuilder as LibCXXBuilder - - -""" -Helper module to handle automatically constructing builder objects from a -builder name. - -We use a relatively unambigous mangling of builder names to ensure that any -particular builder name is always descriptive of its job. -""" - -# Builder Construction Dispatch - -__all__ = ['construct'] -def construct(name): - """ - construct(name) -> builder - - Given a builder name, demangle the name and construct the appropriate - builder for it. - """ - - # First, determine the 'kind' of build we are doing. Compiler builds are a - # common case, so we specialize their names -- other builds should have - # their type delimited by '_'. - if name.startswith('clang-'): - kind,subname = 'compile',name - if 'lto' in name: - kind += '-lto' - elif 'incremental' in name: - kind += '-incremental' - else: - if '_' not in name: - raise ValueError, "invalid builder name: %r" % name - kind,subname = name.split('_', 1) - - # Dispatch based on the kind of build. - ctor = builder_kinds.get(kind) - if ctor is None: - raise ValueError, "invalid builder name: %r" % name - - # Construct the builder. - builder = ctor(subname) - - # Validate that the ctor didn't attempt to define the name, build directory, - # slaves or category. - if 'name' in builder: - raise ValueError, "name should not be defined by builder ctors!" - if 'builddir' in builder: - raise ValueError, "builddir should not be defined by builder ctors!" - if 'slavename' in builder or 'slavenames' in builder: - raise ValueError, "slaves should not be defined by builder ctors!" - if 'category' in builder: - raise ValueError, "categories should not be defined by builder ctors!" - - # The build directory is always based on the name. - try: - builder['name'] = name - except TypeError: - raise ValueError, "invalid builder name: %r" % name - builder['builddir'] = 'build.%s' % name - - return builder - -def construct_compiler_builder_from_name(name, use_lto=False, - incremental=False): - - # Compiler builds are named following: - # ---[-]. - # if is unspecified, then the most recent validated build - # for this builder will be used as - # This can be undesirable. e.g. when building a Debug+Asserts compiler - # for the time being, DA builds will bootstrap with the most recent - # validated RA build - # At the moment, if anything is specified as the build factory - # will default to host's default compiler - - # Hack around x86_64 problem for now, to avoid changing builder names yet. - # - # FIXME: Use a better mangling. - params = name.replace("x86_64", "x86$64").split('_') - if len(params) == 2: - name, branch = params - name = name.replace("x86$64", "x86_64") - params = name.replace('llvm-gcc', 'llvm$gcc').split('-') - params = [p.replace('llvm$gcc', 'llvm-gcc') - for p in params] - if len(params) == 4: - compiler,host_arch,host_os,build_style = params - build_cc = None - elif len(params) == 5: - compiler,host_arch,host_os,build_cc,build_style = params - else: - raise ValueError, "invalid builder name: %r" % name - - # Check if this is an MSVC builder. - if host_os == 'xp': - if compiler == 'clang': - # FIXME: This isn't using the host arch, build cc or - if (host_arch != 'i386' or build_cc != 'msvc9' or - build_style != 'DA'): - raise ValueError, "invalid builder name: %r" % name - # FIXME: Shouldn't have to hard code jobs or cmake path here. - return { 'factory' : ClangBuilder.getClangMSVCBuildFactory( - cmake = r"c:\Program Files\CMake 2.8\bin\cmake", - jobs = 4) } - else: - raise NotImplementedError - - target_triple = '%s-apple-%s' % (host_arch, host_os) - config_options = ['--build=%s' % target_triple, - '--host=%s' % target_triple] - - if build_style in ['DA', 'DAlto', 'DAincremental']: - build_config = "Debug+Asserts" - config_options.extend(['--disable-optimized']) - config_options.extend(['--enable-assertions']) - elif build_style in ['RA', 'RAlto', 'RAincremental']: - build_config = "Release+Asserts" - config_options.extend(['--enable-optimized']) - config_options.extend(['--enable-assertions']) - elif build_style in ['R', 'Rlto', 'Rincremental']: - build_config = "Release" - config_options.extend(['--enable-optimized']) - config_options.extend(['--disable-assertions']) - else: - raise ValueError, "invalid build style: %r" % build_style - - # Passing is_bootstrap==False will specify the stage 1 compiler as the - # latest validated apple-clang style compiler. - - # build_cc must be set for a bootstrapped compiler - if compiler == 'clang': - if host_os == 'darwin11': - config_options.extend(['--enable-libcpp']) - - return { 'factory' : ClangBuilder.phasedClang(config_options, - is_bootstrap=(build_cc is None), - use_lto=use_lto, - incremental=incremental) } - elif compiler == 'llvm-gcc': - # Currently, llvm-gcc builders do their own two-stage build, - # they don't use any prebuilt artifacts. - - # Set the gxxincludedir. - if host_os == 'darwin9': - gxxincludedir = "/usr/include/c++/4.0.0" - elif host_os == 'darwin11': - gxxincludedir = "/usr/include/c++/v1" - else: - gxxincludedir = "/usr/include/c++/4.2.1" - - # Construct the GCC style build triple: - if host_arch == "i386" and host_os.startswith("darwin"): - triple = 'i686-apple-%s' % host_os - elif host_arch == "x86_64" and host_os.startswith("darwin"): - triple = 'x86_64-apple-%s' % host_os - else: - raise ValueError, "invalid builder name: %r" % name - - dst = rsync_user + '@' + master_name + ':~/artifacts/' + name + '/' - return { - 'factory' : LLVMGCCBuilder.getLLVMGCCBuildFactory( - jobs = '%(jobs)s', triple = triple, - gxxincludedir = gxxincludedir, - stage1_config = build_config, stage2_config = build_config, - package_dst = dst) } - else: - raise NotImplementedError - -def construct_lnt_builder_from_name(name): - # LNT builds are named following: - # lnt___. - # and all options are prefixed by '-' and no '-' can appear in an option. - - # Hack around x86_64 problem for now, to avoid changing builder names yet. - # - # FIXME: Use a better mangling. - params = name.replace("x86_64", "x86$64").split('_') - params = [p.replace("x86$64", "x86_64") - for p in params] - if len(params) == 2: - cc_under_test,lnt_options_string = params - else: - raise ValueError, "invalid builder name: %r" % name - cc_path = None - cxx_path = None - # We assume that '-' will never occur in an LNT option. Sounds risky, no? - split_options = lnt_options_string.split('-') - arch = split_options[0] - lnt_options = ['-'+s - for s in split_options[1:]] - - # Create the LNT flags. - lnt_flags = [] - - # If this is llvm-gcc, don't expect it to honor -arch (that is actually the - # "driver driver"). Hard coded to support only i386 and x86_64 for now. - if name.startswith('llvm-gcc'): - if arch == 'x86_64': - lnt_flags.extend(["--cflag", "-m64"]) - elif arch == 'i386': - lnt_flags.extend(["--cflag", "-m32"]) - else: - raise ValueError, "invalid builder name: %r" % name - else: - lnt_flags.extend(["--arch", arch]) - for option in lnt_options: - # FIXME: Reorganize this. - if option in ('-g','-flto'): - lnt_flags.extend(["--cflag", option]) - else: - lnt_flags.extend(["--optimize-option", option]) - lnt_flags.append("--small") - - return { 'factory' : CreateLNTNightlyFactory(lnt_flags, cc_path, - cxx_path, - parallel = True, - jobs = "2"), - 'properties' : {'use_builder' : cc_under_test } } - -def construct_lldb_builder_from_name(name): - cc_under_test = name - params = name.split('-') - if len(params) == 4: - compiler, host_arch, host_os, kind = params - else: - raise ValueError, "invalid builder name: %r" % name - lldb_triple = '-'.join([host_arch,host_os]) - return { 'factory': getLLDBxcodebuildFactory()} - -def construct_lto_compiler_builder_from_name(name): - return construct_compiler_builder_from_name(name, use_lto=True) - -def construct_incremental_compiler_build_from_name(name): - return construct_compiler_builder_from_name(name, incremental=True) - -def construct_libcxx_builder_from_name(name): - # libcxx builds are named following: - # libcxx_ - - cc_under_test = name - return { 'factory' : LibCXXBuilder.getLibCXXBuilder(), - 'properties' : {'use_builder' : cc_under_test } } - -builder_kinds = { - 'compile' : construct_compiler_builder_from_name, - 'compile-lto' : construct_lto_compiler_builder_from_name, - 'compile-incremental' : - construct_incremental_compiler_build_from_name, - 'lnt' : construct_lnt_builder_from_name, - 'lldb' : construct_lldb_builder_from_name, - 'libcxx' : construct_libcxx_builder_from_name } - -# Testing. - -if __name__ == '__main__': - from phase_config import phases - for phase in phases: - for build in phase['builders']: - print construct(build) Index: zorg/trunk/buildbot/llvmlab/master/config/builders.py =================================================================== --- zorg/trunk/buildbot/llvmlab/master/config/builders.py +++ zorg/trunk/buildbot/llvmlab/master/config/builders.py @@ -1,40 +0,0 @@ -import config -from zorg.buildbot.util.phasedbuilderutils import getPhaseBuilderFactory, PublishGoodBuild - -# Load the phase information. -import phase_config -reload(phase_config) -from phase_config import phases - -def get_builders(): - phaseRunners = ['macpro1'] - # This builder should announce good builds and prepare potential release - # candidates. - yield { 'name' : 'Validated Build', 'factory' : PublishGoodBuild(), - 'slavenames' : phaseRunners, 'category' : 'status'} - # These builds coordinate and gate each phase as part of the staged design. - for phase in phases: - if phase is phases[-1]: - next_phase = 'GoodBuild' - else: - next_phase = 'phase%d' % (phase['number'] + 1) - # Split the phase builders into separate stages. - split_stages = config.schedulers.get_phase_stages(phase) - yield { 'name' : 'phase%d - %s' % (phase['number'], phase['name']), - 'factory' : getPhaseBuilderFactory(config, phase, next_phase, - split_stages), - 'slavenames' : phaseRunners, 'category' : 'status'} - # Add the builders for each phase. - import builderconstruction - for phase in phases: - for info in phase['builders']: - builder = builderconstruction.construct(info['name']) - builder['category'] = info['category'] - builder['slavenames'] = list(info['slaves']) - if builder.has_key('properties'): - props = builder['properties'] - props ['category'] = info['category'] - builder['properties'] = props - else: - builder['properties'] = {'category': info['category']} - yield builder Index: zorg/trunk/buildbot/llvmlab/master/config/local.cfg =================================================================== --- zorg/trunk/buildbot/llvmlab/master/config/local.cfg +++ zorg/trunk/buildbot/llvmlab/master/config/local.cfg @@ -1,26 +0,0 @@ -[Master Options] -# Set when the master is running in a production environment. -is_production=true - -# Buildbot configuration parameters. -rsync_user=buildmaster -master_name=lab.llvm.org -master_url=http://lab.llvm.org:8013 -master_protocol=http - -# Email address for sender of buildbot notifications. -from_email=llvmlab-buildmaster@lab.llvm.org - -# Someone who is automatically CC'ed on all failure messages and on -# failed email lookups. -default_email=cmatthews5@apple.com - -# Path to the LLVM authors file. -llvm_authors_path=/Users/buildmaster/llvmauthors.cfg - -# Debugging options. -debug_password= -enable_manhole=false -manhole_port=tcp:9999:interface=127.0.0.1 -manhole_user=admin -manhole_password=password Index: zorg/trunk/buildbot/llvmlab/master/config/phase_config.py =================================================================== --- zorg/trunk/buildbot/llvmlab/master/config/phase_config.py +++ zorg/trunk/buildbot/llvmlab/master/config/phase_config.py @@ -1,99 +0,0 @@ -""" -Declarative definition of the CI phase organization -""" - -def builder(name, category, slaves): - return { 'name' : name, - 'category' : category, - 'slaves' : slaves } - -def build(name, slaves): - return builder(name, 'build-public', slaves) -def test(name, slaves): - return builder(name, 'test-public', slaves) -def experimental(name, slaves): - return builder(name, 'experimental', slaves) - -# FIXME: Eliminate description from builder name? -phases = [] -phaseRunners = ['macpro1'] -# if any darwin11 slaves stop working, remember to fix the authorization settings -# so that gdb will work properly by adding to group procmod with: -# sudo dscl localhost -append /Local/Default/Groups/procmod GroupMembership [username] -# also make sure the slave is runninf with an effective group of procmod in the -# LauchDaemon plist - -phase1_slaves=['xserve5'] -phase1_builders = [] - -phase1_builders.append(build('clang-x86_64-darwin11-nobootstrap-RAincremental', phase1_slaves)) - -phases.append( - { 'number' : 1, - 'name' : 'sanity', - 'title' : 'Sanity', - 'builders' : phase1_builders, - 'description' : """\ - -The first phase is responsible for quickly testing that tree is sane -- namely -that it can be built and that the basic tests are passing. The purpose of this -phase is to make sure the tree is in good enough condition that most developers -can get work done, and that it is worth doing further testing. - -This phase is also responsible for building the initial Stage 1 compilers which -will be used to boot strap subsequent builds. - -The first phase is targeted to run on almost every commit and to react within at -most 10 to 15 minutes to failures.""" }) - -phase2_slaves=['xserve4'] -phase2_builders = [] - -phase2_builders.append(build('clang-x86_64-darwin11-DA', phase2_slaves)) -phase2_builders.append(build('clang-x86_64-darwin11-RA', phase2_slaves)) - -phases.append( - { 'number' : 2, - 'name' : 'living', - 'title' : 'Living On', - 'builders' : phase2_builders, - 'description' : """\ -The second phase is designed to test that the compiler is basically functional -and that it is suitable for living on. This means that almost all developers can -get their work done using sources which have passed this phase. - -This phase produces the majority of the compilers which are used in subsequent -testing. - -The second phase is targeted to run on most commits and to react within at most -15 to 30 minutes to failures.""" }) - -### - -# Phase 3 - -phase3_slaves = ['xserve4'] -phase3_slaves_lto = ['xserve3'] -phase3_builders = [] - -# Add an i386 build. -phase3_builders.append(build('clang-i386-darwin11-RA', phase3_slaves)) - -# Add a release (no asserts) build. -phase3_builders.append(build('clang-x86_64-darwin11-R', phase3_slaves)) - -# Add an lto release build. -phase3_builders.append(build('clang-x86_64-darwin11-Rlto', phase3_slaves_lto)) - -phases.append( - { 'number' : 3, - 'name' : 'tree health', - 'title' : 'Tree Health', - 'builders' : phase3_builders, - 'description' : """\ -The third phase is designed to check the general health of the tree across a -variety of targets and build environments. In general, all developers should be -able to work using sources which have passed this phase, and the tree should be -good enough for many users. - -The third phase is targeted to react within at most 1 to 2 hours.""" }) Index: zorg/trunk/buildbot/llvmlab/master/config/schedulers.py =================================================================== --- zorg/trunk/buildbot/llvmlab/master/config/schedulers.py +++ zorg/trunk/buildbot/llvmlab/master/config/schedulers.py @@ -1,115 +0,0 @@ -from buildbot.schedulers import basic -from buildbot.schedulers import triggerable -from buildbot.process.properties import WithProperties -from buildbot.changes.filter import ChangeFilter - -# Load the phase information. -from phase_config import phases - -def get_phase_stages(phase): - """get_phase_stages() -> [(normal builders, experimental builders), ...] - - Split a phase's builders into the list of serial stages, and separate - experimental builders from non-exerpeimntal ones.""" - - builders = dict((b['name'], b) - for b in phase['builders']) - - # Each entry in the stage parameter should be a list of builder names. - stages = [] - for stage in phase.get('stages', []): - stages.append([builders.pop(name) - for name in stage]) - - # Add any remaining builders to the final stage. - stages.append(builders.values()) - - # Split the builder types. - split_stages = [] - for stage in stages: - normal_builders = [] - experimental_builders = [] - for b in stage: - if b['category'] != 'experimental': - normal_builders.append(b) - else: - experimental_builders.append(b) - split_stages.append( (normal_builders, experimental_builders) ) - - return split_stages - -def _tracked_projects(change): - projects = ['cfe', -# 'clang-tests-external', - 'clang-tests', - 'clang-tools-extra', - 'compiler-rt', - 'debuginfo-tests', -# 'dragonegg', -# 'libcxx', -# 'libcxxabi', - 'lldb', - 'llvm', -# 'lnt', -# 'polly', - 'test-suite', - 'openmp', - ] - if change.category: - return False - if change.branch and 'trunk' not in change.branch: - return False - if change.project and change.project in projects: - return True - return False - -def get_schedulers(): - first_phase = phases[0] - last_phase = phases[-1] - - # The VC scheduler initiates the first phase. - # Each phase, in turn, triggers the next phase, - # until the final phase. - - for phase in phases: - my_filter = ChangeFilter(filter_fn=_tracked_projects) - phase_name = 'phase%d' % phase['number'] - if phase == first_phase: - delay=120 - else: - delay=15 - my_filter = ChangeFilter(category = phase_name) - - yield basic.AnyBranchScheduler( - name = phase_name, treeStableTimer=delay, - change_filter = my_filter, - builderNames = ['phase%d - %s' % (phase['number'], phase['name'])], - ) - - # Add triggers for initiating the builds in each phase. - for phase in phases: - - # Split the phase builders into separate stages. - split_stages = get_phase_stages(phase) - for i, (normal, experimental) in enumerate(split_stages): - # Add the normal trigger, if used. - if normal: - yield triggerable.Triggerable( - name = 'phase%d-stage%d' % (phase['number'], i), - builderNames = [b['name'] for b in normal]) - - # Add the experimental trigger, if used. - if experimental: - yield triggerable.Triggerable( - name = 'phase%d-stage%d-experimental' % (phase['number'], - i), - builderNames = [b['name'] for b in experimental]) - - # Add a final trigger to trigger the validated build scheduler. - phase_name = 'GoodBuild' - my_filter = ChangeFilter(category = phase_name) - yield basic.AnyBranchScheduler( - name = phase_name, treeStableTimer=5, - builderNames = ['Validated Build',], - change_filter = my_filter, - ) Index: zorg/trunk/buildbot/llvmlab/master/config/slaves.py =================================================================== --- zorg/trunk/buildbot/llvmlab/master/config/slaves.py +++ zorg/trunk/buildbot/llvmlab/master/config/slaves.py @@ -1,31 +0,0 @@ -import buildbot -import buildbot.buildslave -import os -import config - -from zorg.buildbot.util.phasedbuilderutils import set_config_option - -def create_slave(name, jobs, max_builds = None): - if max_builds is None: - max_builds = jobs // 2 - return buildbot.buildslave.BuildSlave( - name, password = 'password', - notify_on_missing = set_config_option('Master Options', - 'default_email', - 'david_dean@apple.com'), - properties = { 'jobs' : jobs }, - max_builds = max_builds) - -def get_build_slaves(): - # Phase runnner. - yield create_slave('macpro1', jobs = 1, max_builds = 8) - - # Builders. - yield create_slave('xserve3', jobs = 2, max_builds = 1) - yield create_slave('xserve4', jobs = 4, max_builds = 1) - yield create_slave('xserve5', jobs = 4, max_builds = 1) - - is_production = config.options.has_option('Master Options', 'is_production') - if not is_production: - # Test slave which can do anything. - yield create_slave('localhost', 8) Index: zorg/trunk/buildbot/llvmlab/master/config/status.py =================================================================== --- zorg/trunk/buildbot/llvmlab/master/config/status.py +++ zorg/trunk/buildbot/llvmlab/master/config/status.py @@ -1,114 +0,0 @@ -import buildbot -import buildbot.status.html -import buildbot.status.mail -import buildbot.status.words -import config -import os - -from zorg.buildbot.util.phasedbuilderutils import set_config_option -from zorg.buildbot.util.ConfigEmailLookup import ConfigEmailLookup -from zorg.buildbot.util.InformativeMailNotifier import InformativeMailNotifier - - -def get_status_targets(standard_builders): - # Get from/to email addresses. - from_email = set_config_option('Master Options', 'from_email') - default_email = set_config_option('Master Options', 'default_email') - - # Check whether we are in testing mode, if so, just add minimal and verbose - # status clients. - is_production = set_config_option('Master Options', 'is_production', False) - if not is_production: - return [ - buildbot.status.html.WebStatus( - http_port = 8013, allowForce = True), - - InformativeMailNotifier(fromaddr = from_email, - extraRecipients = ['david_dean@apple.com', - 'mgottesman@apple.com'], - sendToInterestedUsers = False, - mode = 'change', - addLogs = False, - num_lines = 15), - ] - - # Get the path to the authors file we use for email lookup. - llvm_authors_path = set_config_option('Master Options', 'llvm_authors_path') - - # Construct a lookup object to be used for public builders. - public_lookup = ConfigEmailLookup( - llvm_authors_path, default_address = 'llvm-testresults@cs.uiuc.edu') - - return [ - buildbot.status.html.WebStatus( - http_port = 8013, allowForce = True), - buildbot.status.words.IRC('irc.oftc.net', 'phased-bb-llvmlab', - port=6668, - channels=['llvm'], - allowForce=False, - password='smooshy', - notify_events=['successToFailure', 'failureToSuccess'], - categories=['status']), - - # Experimental failing build notifier. - # - # These emails only go to the catch-all list. - InformativeMailNotifier( - fromaddr = from_email, - extraRecipients = ['llvm-testresults@cs.uiuc.edu'], - sendToInterestedUsers = False, - mode = 'failing', - categories = ['experimental'], - addLogs = False, - num_lines = 15), - - # Regular problem build notifier. - # - # These emails go to the interested public_users, and the catch-all - # list. - InformativeMailNotifier( - fromaddr = from_email, - lookup = public_lookup, - extraRecipients = ['llvm-testresults@cs.uiuc.edu'], - sendToInterestedUsers = True, - mode = 'problem', - categories = ['build-public', 'test-public', 'status'], - addLogs = False, - num_lines = 15), - - # Regular failing build notifier. - # - # These emails only go to the catch-all list. - # - # FIXME: Eventually, these should also go to the current build czars. - # TODO: change subject to differentiate these from the problem emails - InformativeMailNotifier( - fromaddr = from_email, - sendToInterestedUsers = False, - extraRecipients = ['llvm-testresults@cs.uiuc.edu'], - mode = 'failing', - categories = ['build-public', 'test-public'], - addLogs = False, - num_lines = 15), - - # Phase status change notifier. - # - # These emails only go to the catch-all list. - buildbot.status.mail.MailNotifier( - fromaddr = from_email, - sendToInterestedUsers = False, - extraRecipients = ['llvm-testresults@cs.uiuc.edu'], - mode = 'change', - categories = ['status']), - - # Send email to Howard Hinnant if the libcxx builder fails. - InformativeMailNotifier( - fromaddr = from_email, - sendToInterestedUsers = False, - extraRecipients = ['hhinnant@apple.com'], - subject = "Build %(builder)s Failure", - mode = "failing", - builders = ['libcxx_clang-x86_64-darwin11-RA'], - addLogs = False, - num_lines = 15), - ] Index: zorg/trunk/buildbot/llvmlab/master/master.cfg =================================================================== --- zorg/trunk/buildbot/llvmlab/master/master.cfg +++ zorg/trunk/buildbot/llvmlab/master/master.cfg @@ -1,118 +0,0 @@ -# -*- python -*- -# ex: set syntax=python: - -""" -Top level build bot configuration file. -""" - -# Extend paths to allow loading zorg and config modules. -# handle either llvm_zorg or zorg to be checked out at the top level. -import os, sys -for zorg in ['zorg', 'llvm_zorg']: - path = os.path.join(os.environ.get('HOME'), zorg) - if path not in sys.path: - sys.path.append(path) - path = os.path.join(os.environ.get('HOME'), zorg, 'buildbot') - if path not in sys.path: - sys.path.append(path) - path = os.path.join(os.environ.get('HOME'), zorg, 'buildbot', - 'llvmlab', 'master') - if path not in sys.path: - sys.path.append(path) - -# Reload every module, so that we are more resilient to code changes -# on buildbot reconfig. -# -# There are still possible problems related to the ordering dependency -# on reloads, but this should at least help. -from zorg.buildbot.util import reloading -reloading.reload_all(only_paths = [os.environ.get('HOME'), basedir, - os.path.normpath(basedir)], - log = True) - -# This is the dictionary that the buildmaster pays attention to. We also use -# a shorter alias to save typing. -c = BuildmasterConfig = {} - -import config -import config.schedulers -import config.slaves -import config.status - -# Reload stuff automatically. -# -# FIXME: Find better way. -reload(config.slaves) -reload(config.schedulers) -reload(config.builders) -reload(config.status) -reload(config) -import config - -####### DB URL - -# This specifies what database buildbot uses to store change and scheduler -# state. -c['db_url'] = "sqlite:///state.sqlite?serialize_access=1" - -####### BUILDSLAVES - -c['slaves'] = list(config.slaves.get_build_slaves()) -c['slavePortnum'] = 9994 - -####### CHANGESOURCES - -# the 'change_source' setting tells the buildmaster how it should find out -# about source code changes. Any class which implements IChangeSource can be -# put here: there are several in buildbot/changes/*.py to choose from. - -from buildbot.changes.pb import PBChangeSource -from buildbot import revlinks -from buildbot.changes.svnpoller import SVNPoller -from buildbot.changes.svnpoller import split_file_projects_branches - -c['change_source'] = [PBChangeSource()] -c['change_source'].append(SVNPoller( - svnurl="http://10.1.1.2/svn/llvm-project/", - split_file=split_file_projects_branches, - pollinterval=2*60)) -c['revlink'] = revlinks.RevlinkMatch([r'http://10.1.1.2/svn/llvm-project.*'], - r'http://llvm.org/viewvc/llvm-project?view=rev&revision=%s') - -####### BUILDERS - -slaves_name = [s.slavename for s in c['slaves']] -c['builders'] = builders = list(config.builders.get_builders() ) - -####### STATUS TARGETS - -# Schedule builds and email for all non-experimental builders. -standard_builders = [b['name'] for b in builders - if not b['category'].endswith('.exp')] -c['status'] = config.status.get_status_targets(standard_builders) - -####### RESOURCE USAGE - -# Number of build records to maintain per builder. -c['buildHorizon'] = 4000 - -# Number of logs to maintain per builder. -c['logHorizon'] = 600 - -# Number of events (connect, disconnect, etc.) to maintain. -c['eventHorizon'] = 100 - -# Number of builds to cache in memory. -c['buildCacheSize'] = 500 - -####### SCHEDULERS - -c['schedulers'] = schedulers = list(config.schedulers.get_schedulers()) - -####### PROJECT IDENTITY - -c['projectName'] = "lab.llvm.org" -c['projectURL'] = "http://lab.llvm.org/" -c['buildbotURL'] = "http://lab.llvm.org:8013/" - -#c['prioritizeBuilders'] = config.builders.prioritizeBuilders Index: zorg/trunk/buildbot/llvmlab/master/org.llvm.lab.master.plist =================================================================== --- zorg/trunk/buildbot/llvmlab/master/org.llvm.lab.master.plist +++ zorg/trunk/buildbot/llvmlab/master/org.llvm.lab.master.plist @@ -1,46 +0,0 @@ - - - - - Label - org.llvm.lab.master - - - UserName - buildmaster - - - WorkingDirectory - /Users/buildmaster/llvm_zorg/buildbot/llvmlab/master - - ProgramArguments - - /venv/buildbot/bin/python - /usr/bin/twistd - --nodaemon - --python=buildbot.tac - --logfile=twistd.log - --prefix=llvmlab - - - KeepAlive - - SuccessfulExit - - - - RunAtLoad - - -SoftResourceLimits - - NumberOfFiles - 4096 - - HardResourceLimits - - NumberOfFiles - 4096 - - - Index: zorg/trunk/buildbot/llvmlab/master/process_changelist.py =================================================================== --- zorg/trunk/buildbot/llvmlab/master/process_changelist.py +++ zorg/trunk/buildbot/llvmlab/master/process_changelist.py @@ -1,46 +0,0 @@ -#!/usr/bin/env python - -import sys, getopt, subprocess, json, time, os - -class Usage(Exception): - def __init__(self, msg): - self.msg = msg - -def main(argv=None): - if argv is None: - argv = sys.argv - try: - try: - opts, args = getopt.getopt(argv[1:], "h", ["help"]) - except getopt.error, msg: - raise Usage(msg) - category = args[0] - filename = args[1] - changelist = [] - if not os.path.isfile(filename): - return - for line in open(filename).readlines(): - change = json.loads(line) - if not change in changelist: - print "rejected duplicate: %s" % change['revision'] - changelist.append(change) - while len(changelist) > 0: - changelist = sorted(changelist, key=lambda k: k['timestamp']) - change = changelist.pop(0) - command = ['./sendchange.py', category, json.dumps(change)] - status = subprocess.call(command) - if status: - print 'An error occurred will retry in sixty seconds' - print change - changelist.append(change) - time.sleep(60) - except Usage, err: - print >>sys.stderr, err.msg - print >>sys.stderr, "for help use --help" - return 2 - -def wait(res): - time.sleep(15) - -if __name__ == "__main__": - sys.exit(main()) \ No newline at end of file Index: zorg/trunk/buildbot/llvmlab/master/public_html/buildbot.css =================================================================== --- zorg/trunk/buildbot/llvmlab/master/public_html/buildbot.css +++ zorg/trunk/buildbot/llvmlab/master/public_html/buildbot.css @@ -1,398 +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; -} - -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; -} -.DevCommentDate { - float: right; - font-style: italic; -} - -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; -} -.success.Alt { - background-color: #6fbf3f; -} - -.failure { - color: #FFFFFF; - background-color: #e98080; - border-color: #A77272; -} -.failure.Alt { - background-color: #c96060; -} - -.warnings { - color: #FFFFFF; - background-color: #ffc343; - border-color: #C29D46; -} -.warnings.Alt { - background-color: #dfa323; -} - -.exception, td.offline { - color: #FFFFFF; - background-color: #e0b0ff; - border-color: #ACA0B3; -} -.exception.Alt { - background-color: #c090df; -} - -.start,.running, td.building { - color: #666666; - background-color: #fffc6c; - border-color: #C5C56D; -} - -.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; -} - -td.Project a:hover, td.start a:hover { - color: #000; -} - -/* 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; -} Index: zorg/trunk/buildbot/llvmlab/master/public_html/buildbot.css.default =================================================================== --- zorg/trunk/buildbot/llvmlab/master/public_html/buildbot.css.default +++ zorg/trunk/buildbot/llvmlab/master/public_html/buildbot.css.default @@ -1,78 +0,0 @@ -a:visited { - color: #800080; -} - -td.Event, td.BuildStep, td.Activity, td.Change, td.Time, td.Builder { - border-top: 1px solid; - border-right: 1px solid; -} - -td.box { - border: 1px solid; -} - -/* Activity states */ -.offline { - background-color: red; -} -.idle { - background-color: white; -} -.waiting { - background-color: yellow; -} -.building { - background-color: yellow; -} - -/* LastBuild, BuildStep states */ -.success { - background-color: #72ff75; -} -.failure { - background-color: red; -} -.warnings { - background-color: #ff8000; -} -.exception { - background-color: #c000c0; -} -.start,.running { - background-color: yellow; -} - -/* 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.footer { - font-size: 80%; -} Index: zorg/trunk/buildbot/llvmlab/master/public_html/buildbot.css.extended =================================================================== --- zorg/trunk/buildbot/llvmlab/master/public_html/buildbot.css.extended +++ zorg/trunk/buildbot/llvmlab/master/public_html/buildbot.css.extended @@ -1,382 +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; -} - -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; -} - -.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; -} - -td.Project a:hover, td.start a:hover { - color: #000; -} - -/* 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; -} Index: zorg/trunk/buildbot/llvmlab/master/public_html/buildbot.css.goog =================================================================== --- zorg/trunk/buildbot/llvmlab/master/public_html/buildbot.css.goog +++ zorg/trunk/buildbot/llvmlab/master/public_html/buildbot.css.goog @@ -1,53 +0,0 @@ -* { - font-family: Verdana, Cursor; - font-size: 10px; - font-weight: bold; -} - -a:link,a:visited,a:active { - color: #666666; -} -a:hover { - color: #FFFFFF; -} - -.table { - border-spacing: 2px; -} - -td.Event, td.Activity, td.Change, td.Time, td.Builder { - color: #333333; - border: 1px solid #666666; - background-color: #CCCCCC; -} - -/* LastBuild, BuildStep states */ -.success { - color: #FFFFFF; - border: 1px solid #2f8f0f; - background-color: #8fdf5f; -} - -.failure { - color: #FFFFFF; - border: 1px solid #f33636; - background-color: #e98080; -} - -.warnings { - color: #FFFFFF; - border: 1px solid #fc901f; - background-color: #ffc343; -} - -.exception, td.offline { - color: #FFFFFF; - border: 1px solid #8000c0; - background-color: #e0b0ff; -} - -.start,.running, td.building { - color: #666666; - border: 1px solid #ffff00; - background-color: #fffc6c; -} Index: zorg/trunk/buildbot/llvmlab/master/public_html/default.css =================================================================== --- zorg/trunk/buildbot/llvmlab/master/public_html/default.css +++ zorg/trunk/buildbot/llvmlab/master/public_html/default.css @@ -1,535 +0,0 @@ -body.interface { - margin-left: 30px; - margin-right: 30px; - margin-top: 20px; - margin-bottom: 50px; - padding: 0; - background: url(bg_gradient.jpg) repeat-x; - font-family: Verdana, Cursor; - font-size: 10px; - font-weight: bold; - background-color: #fff; - color: #333; -} - -a:link,a:visited,a:active { - color: #444; -} - -table { - border-spacing: 1px 1px; -} - -table td { - padding: 3px 2px 3px 2px; - text-align: center; -} - -.Project { - min-width: 6em; -} - -.LastBuild,.Activity { - padding: 0 0 0 4px; -} - -.LastBuild,.Activity,.Builder,.BuildStep { - width: 15em; - min-width: 15em; -} - -/* 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.DevDetails li a { - padding-right: 5px; -} - -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: #ddd; -} - -.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: #8f8; - border-color: #4F8530; -} - -.failure { - color: #FFFFFF; - background-color: #f99; - border-color: #A77272; -} - -.warnings { - color: #FFFFFF; - background-color: #ffc343; - border-color: #C29D46; -} - -.exception,.retry { - color: #FFFFFF; - background-color: #f6f; - border-color: #ACA0B3; -} - -.start,.running,.waiting,td.building { - color: #666666; - background-color: #ff6; - border-color: #C5C56D; -} - -.offline,td.offline { - color: #FFFFFF; - background-color: #777777; - border-color: #dddddd; -} - - -.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; - background-color: #fff; -} - -.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; -} - -/* column container */ -div.column { - margin: 0 2em 2em 0; - float: left; -} - -/* info tables */ -table.info { - border-spacing: 1px; -} - -table.info td { - padding: 0.1em 1em 0.1em 1em; - text-align: center; -} - -table.info th { - padding: 0.2em 1.5em 0.2em 1.5em; - text-align: center; -} - -table.info td.left { - text-align: left -} - -.alt { - background-color: #f6f6f6; -} - -li { - padding: 0.1em 1em 0.1em 1em; -} - -.result { - padding: 0.3em 1em 0.3em 1em; -} - -/* log view */ -.log * { - vlink: #800080; - font-family: "Courier New", courier, monotype; -} - -span.stdout { - color: black; -} - -span.stderr { - color: red; -} - -span.header { - color: blue; -} - -/* revision & email */ -.revision .full { - display: none; -} - -.user .email { - display: none; -} - -/* change comments (use regular colors here) */ -pre.comments>a:link,pre.comments>a:visited { - color: blue; -} - -pre.comments>a:active { - color: purple; -} Index: zorg/trunk/buildbot/llvmlab/master/public_html/robots.txt =================================================================== --- zorg/trunk/buildbot/llvmlab/master/public_html/robots.txt +++ zorg/trunk/buildbot/llvmlab/master/public_html/robots.txt @@ -1,9 +0,0 @@ -User-agent: * -Disallow: /waterfall -Disallow: /builders -Disallow: /changes -Disallow: /buildslaves -Disallow: /schedulers -Disallow: /one_line_per_build -Disallow: /one_box_per_builder -Disallow: /xmlrpc Index: zorg/trunk/buildbot/llvmlab/master/public_html/robots.txt.new =================================================================== --- zorg/trunk/buildbot/llvmlab/master/public_html/robots.txt.new +++ zorg/trunk/buildbot/llvmlab/master/public_html/robots.txt.new @@ -1,10 +0,0 @@ -User-agent: * -Disallow: /waterfall -Disallow: /builders -Disallow: /changes -Disallow: /buildslaves -Disallow: /schedulers -Disallow: /one_line_per_build -Disallow: /builders -Disallow: /grid -Disallow: /tgrid Index: zorg/trunk/buildbot/llvmlab/master/templates/build.html =================================================================== --- zorg/trunk/buildbot/llvmlab/master/templates/build.html +++ zorg/trunk/buildbot/llvmlab/master/templates/build.html @@ -1,246 +0,0 @@ -{% extends "layout.html" %} -{% import 'forms.html' as forms %} -{% from "change_macros.html" import change with context %} - -{% block content %} - -

-Builder {{ b.getBuilder().getName() }} -Build #{{ b.getNumber() }} -

- -
- -{% if not b.isFinished() %} -

Build In Progress:

- - {% if when_time %} -

ETA: {{ when_time }} [{{ when }}]

- {% endif %} - - {{ current_step }} - - {% if authz.advertiseAction('stopBuild', request) %} -

Stop Build

- {{ forms.stop_build(build_url+"/stop", authz, on_all=False, short=False, label='This Build') }} - {% endif %} -{% else %} -

Results:

- -

- {{ b.getText()|join(' ')|capitalize }} -

- - {% if b.getTestResults() %} -

- {% endif %} -{% endif %} - -

-{% if sourcestamps|count == 1 %} -SourceStamp: -{% else %} -SourceStamps: -{% endif %} -

- -{% for ss in sourcestamps %} -

{{ ss.codebase }}

- - {% set ss_class = cycler('alt','') %} - - {% if ss.project %} - - {% endif %} - - {% if ss.repository %} - - {% endif %} - - {% if ss.branch %} - - {% endif %} - - {% if ss.revision %} - - {% endif %} - - {% if got_revisions[ss.codebase] %} - - {% endif %} - - {% if ss.patch %} - - {% endif %} - - {% if ss.changes %} - - {% endif %} - - {% if not ss.branch and not ss.revision and not ss.patch and not ss.changes %} - - {% endif %} -
Project{{ ss.project|projectlink }}
Repository{{ ss.repository|repolink }}
Branch{{ ss.branch|e }}
Revision{{ ss.revision|revlink(ss.repository) }}
Got Revision{{ got_revisions[ss.codebase]|revlink(ss.repository) }}
PatchYES
Changes{{ ss.changes|count }} change{{ 's' if ss.changes|count > 1 else '' }}
Build of most recent revision
-{% endfor %} - -{# - # TODO: turn this into a table, or some other sort of definition-list - # that doesn't take up quite so much vertical space - #} - -

BuildSlave:

- -{% if slave_url %} -
{{ b.getSlavename()|e }} -{% else %} - {{ b.getSlavename()|e }} -{% endif %} - -

Reason:

-

-{{ b.getReason()|e }} -

- -

Steps and Logfiles:

- -{# - # TODO: - # urls = self.original.getURLs() - # ex_url_class = "BuildStep external" - # for name, target in urls.items(): - # text.append('[%s]' % - # (target, ex_url_class, html.escape(name))) - #} - -
    -{% for s in steps %} -
  1. -
    - {{ s.name }} - {{ s.text }} {{ '( ' + s.time_to_run + ' )' if s.time_to_run else '' }} -
    - -
      - {% set item_class = cycler('alt', '') %} - {% for l in s.logs %} -
    1. {{ l.name }}
    2. - {% else %} -
    3. - no logs -
    4. - {% endfor %} - - {% for u in s.urls %} -
    5. {{ u.logname }}
    6. - {% endfor %} -
    -
  2. -{% endfor %} -
- -
-
- -

Build Properties:

- - - - -{% for p in properties %} -{% if p.source != "Force Build Form" %} - - - {% if p.short_value %} - - {% else %} - {% if p.value is not mapping %} - {% if p.value[:4] == "http" %} - - {% else %} - - {% endif %} - {% else %} - - {% endif %} - {% endif %} - - -{% endif %} -{% endfor %} -
NameValueSource
{{ p.name|e }}{{ p.short_value|e }} .. [property value too long]{{ p.value|e|replace(" ", "%20")|urlize(200)|replace("%20"," ") }}{{ p.value|e }} - - {%- for key, value in p.value.items() recursive %} - - {% endfor %} -
{{ key|e }}{{ value|e }}
-
{{ p.source|e }}
-

Forced Build Properties:

- - - -{% for p in properties %} - {% if p.source == "Force Build Form" %} - - - - {% if p.text %} - - {% else %} - - {% endif %} - - {% endif %} -{% endfor %} -
NameLabelValue
{{ p.name|e }} - {% if p.label %} - {{ p.label }} - {% endif %} - {{ p.value|e }}
- -

Responsible Users:

- -{% if responsible_users %} -
    - {% for u in responsible_users %} -
  1. {{ u|user }}
  2. - {% endfor %} -
-{% else %} -

no responsible users

-{% endif %} - -

Timing:

- - -{% if end %} - -{% endif %} - -
Start{{ start }}
End{{ end }}
Elapsed{{ elapsed }}
- - {% if authz.advertiseAction('forceBuild', request) %} -

Resubmit Build:

- {{ forms.rebuild_build(build_url+"/rebuild", authz, exactly, sourcestamps[0]) }} - {% endif %} - -
- -
- -{% if has_changes %} -
-

All Changes:

- {% for ss in sourcestamps %} - {% if ss.changes %} -

{{ ss.codebase }}:

-
    - {% for c in ss.changes %} -
  1. Change #{{ c.number }}

    - {{ change(c.asDict()) }} -
  2. - {% endfor %} -
- {% endif %} - {% endfor %} -
-{% endif %} - -{% endblock %} Index: zorg/trunk/buildbot/llvmlab/master/templates/builder.html =================================================================== --- zorg/trunk/buildbot/llvmlab/master/templates/builder.html +++ zorg/trunk/buildbot/llvmlab/master/templates/builder.html @@ -1,147 +0,0 @@ -{% from 'build_line.html' import build_table %} -{% import 'forms.html' as forms %} - -{% extends "layout.html" %} - -{% block head %} - {{ super() }} - - -{% endblock %} - -{% block content %} - -

Builder {{ name }}

- -

(view in waterfall)

- -
- -{% if current %} -

Current Builds:

-
    - {% for b in current %} -
  • {{ b.num }} - {% if b.when %} - ETA: {{ b.when_time }} [{{ b.when }}] - {% endif %} - - {{ b.current_step }} - - {% if authz.advertiseAction('stopBuild', request) %} - {{ forms.stop_build(b.stop_url, authz, on_all=False, short=True, label='Build') }} - {% endif %} -
  • - {% endfor %} -
-{% else %} -

No current builds

-{% endif %} - -{% if pending %} -

Pending Build Requests:

-
    - {% for b in pending %} -
  • ({{ b.when }}, waiting {{ b.delay }}) - - {% if authz.advertiseAction('cancelPendingBuild', request) %} - {{ forms.cancel_pending_build(builder_url+"/cancelbuild", authz, short=True, id=b.id) }} - {% endif %} - - {% if b.num_changes < 4 %} - {% for c in b.changes %}{{ c.revision|shortrev(c.repo) }} - ({{ c.who|email }}){% if not loop.last %},{% endif %} - {% endfor %} - {% else %} - ({{ b.num_changes }} changes) - {% endif %} - - {% if 'owner' in b.properties %} - Forced build - by {{b.properties['owner'][0]}} - {{b.properties['reason'][0]}} - {% endif %} -
  • - {% endfor %} -
- - {% if authz.advertiseAction('cancelPendingBuild', request) %} - {{ forms.cancel_pending_build(builder_url+"/cancelbuild", authz, short=False, id='all') }} - {% endif %} - -{% else %} -

No Pending Build Requests

-{% endif %} - -

Recent Builds:

- -{{ build_table(recent) }} - -
-
- -

Buildslaves:

- -{% if slaves %} - - - - - -{% endif %} -{% for s in slaves %} - - - {% if s.connected %} - - - {% else %} - - -{% else %} - -{% endfor %} -
NameStatusAdmin
{{ s.name|e }}connected{{ s.admin|email if s.admin else ""}}offline - {% endif %} -
no slaves attached
- -{% if authz.advertiseAction('pingBuilder', request) %} -

Ping slaves

- {{ forms.ping_builder(builder_url+"/ping", authz) }} -{% endif %} - -{% if authz.advertiseAction('forceBuild', request) and force_schedulers != {} %} -

Force build

- {{ forms.force_build(builder_url+"/force", authz, request, False, force_schedulers=force_schedulers,default_props=default_props) }} -{% endif %} - -

Utility

-
- - -
- -
- -{% endblock %}