# -*- python -*- # ex: set syntax=python: # # Dictionary that the buildmaster pays attention to. c = BuildmasterConfig = {} # BUILD SLAVES # # We load the slaves and their passwords from a separator file, so we can have # this one in SVN. from buildbot.buildslave import BuildSlave import master_private c['slaves'] = [] for slave in master_private.slaves: c['slaves'].append(BuildSlave(slave['name'], slave['password'])) # TCP port through which slaves connect c['slavePortnum'] = 9989 # CHANGE SOURCES from buildbot.changes.svnpoller import SVNPoller c['change_source'] = SVNPoller( 'https://svn.blender.org/svnroot/bf-blender/trunk/', pollinterval=1200) # BUILDERS # # The 'builders' list defines the Builders, which tell Buildbot how to perform a build: # what steps, and which slaves can execute them. Note that any particular build will # only take place on one slave. from buildbot.process.factory import BuildFactory from buildbot.steps.source import SVN from buildbot.steps.shell import ShellCommand from buildbot.steps.shell import Compile from buildbot.steps.shell import Test from buildbot.steps.transfer import FileUpload # from buildbot.steps.transfer import FileDownload from buildbot.steps.master import MasterShellCommand from buildbot.config import BuilderConfig # add builder utility c['builders'] = [] buildernames = [] def add_builder(c, name, libdir, factory, branch=''): slavenames = [] for slave in master_private.slaves: if name in slave['builders']: slavenames.append(slave['name']) if len(slavenames) > 0: f = factory(name, libdir, branch) c['builders'].append(BuilderConfig(name=name, slavenames=slavenames, factory=f, category='blender')) buildernames.append(name) # common steps def svn_step(branch=''): if branch: return SVN(baseURL='https://svn.blender.org/svnroot/bf-blender/branches/%%BRANCH%%', mode='update', defaultBranch=branch, workdir='blender') else: return SVN(baseURL='https://svn.blender.org/svnroot/bf-blender/%%BRANCH%%/blender', mode='update', defaultBranch='trunk', workdir='blender') def lib_svn_step(libdir): return SVN(name='lib svn', baseURL='https://svn.blender.org/svnroot/bf-blender/%%BRANCH%%/lib/' + libdir, mode='update', defaultBranch='trunk', workdir='lib/' + libdir) # generic builder def generic_builder(idname, libdir='', branch=''): filename = 'buildbot_upload_' + idname + '.zip' compile_script = '../blender/build_files/buildbot/slave_compile.py' test_script = '../blender/build_files/buildbot/slave_test.py' pack_script = '../blender/build_files/buildbot/slave_pack.py' unpack_script = 'master_unpack.py' f = BuildFactory() f.addStep(svn_step(branch)) if libdir != '': f.addStep(lib_svn_step(libdir)) f.addStep(Compile(command=['python', compile_script, idname])) f.addStep(Test(command=['python', test_script, idname])) f.addStep(ShellCommand(name='package', command=['python', pack_script, idname, branch], description='packaging', descriptionDone='packaged')) if 'cmake' in idname: f.addStep(FileUpload(name='upload', slavesrc='buildbot_upload.zip', masterdest=filename, maxsize=100 * 1024 * 1024)) else: f.addStep(FileUpload(name='upload', slavesrc='buildbot_upload.zip', masterdest=filename, maxsize=100 * 1024 * 1024, workdir='install')) f.addStep(MasterShellCommand(name='unpack', command=['python', unpack_script, filename], description='unpacking', descriptionDone='unpacked')) return f # builders add_builder(c, 'mac_x86_64_scons', 'darwin-9.x.universal', generic_builder) add_builder(c, 'salad_mac_x86_64_scons', 'darwin-9.x.universal', generic_builder, 'soc-2011-salad') add_builder(c, 'mac_i386_scons', 'darwin-9.x.universal', generic_builder) add_builder(c, 'mac_ppc_scons', 'darwin-9.x.universal', generic_builder) #add_builder(c, 'linux_x86_64_cmake', '', generic_builder) add_builder(c, 'linux_i386_scons', '', generic_builder) add_builder(c, 'salad_linux_i386_scons', '', generic_builder, 'soc-2011-salad') add_builder(c, 'linux_x86_64_scons', '', generic_builder) add_builder(c, 'salad_linux_x86_64_scons', '', generic_builder, 'soc-2011-salad') add_builder(c, 'win32_scons', 'windows', generic_builder) add_builder(c, 'salad_win32_scons', 'windows', generic_builder, 'soc-2011-salad') add_builder(c, 'win64_scons', 'win64', generic_builder) add_builder(c, 'mingw_win64_scons', 'mingw64', generic_builder) add_builder(c, 'mingw_win32_scons', 'mingw32', generic_builder) #add_builder(c, 'freebsd_i386_cmake', '', generic_builder) #add_builder(c, 'freebsd_x86_64_cmake', '', generic_builder) # SCHEDULERS # # Decide how to react to incoming changes. # from buildbot.scheduler import Scheduler from buildbot.schedulers import timed c['schedulers'] = [] #c['schedulers'].append(Scheduler(name="all", branch=None, # treeStableTimer=None, # builderNames=[])) #c['schedulers'].append(timed.Periodic(name="nightly", # builderNames=buildernames, # periodicBuildTimer=24*60*60)) c['schedulers'].append(timed.Nightly( name='nightly', builderNames=buildernames, hour=3, minute=0)) # STATUS TARGETS # # 'status' is a list of Status Targets. The results of each build will be # pushed to these targets. buildbot/status/*.py has a variety to choose from, # including web pages, email senders, and IRC bots. c['status'] = [] from buildbot.status import html from buildbot.status.web import authz authz_cfg = authz.Authz( # change any of these to True to enable; see the manual for more # options gracefulShutdown=False, forceBuild=True, # use this to test your slave once it is set up forceAllBuilds=False, pingBuilder=False, stopBuild=False, stopAllBuilds=False, cancelPendingBuild=True, ) c['status'].append(html.WebStatus(http_port=8010, authz=authz_cfg)) # PROJECT IDENTITY c['projectName'] = "Blender" c['projectURL'] = "http://www.blender.org" # the 'buildbotURL' string should point to the location where the buildbot's # internal web server (usually the html.WebStatus page) is visible. This # typically uses the port number set in the Waterfall 'status' entry, but # with an externally-visible host name which the buildbot cannot figure out # without some help. c['buildbotURL'] = "http://builder.blender.org/" # 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"