From cf9d03494bb0d79a9801a307380a717ac825fedb Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sun, 20 Jul 2014 18:00:39 +0600 Subject: [PATCH] Update buildbot config to latest actual version --- build_files/buildbot/master.cfg | 169 +++++++++++++++++++++++++------- 1 file changed, 132 insertions(+), 37 deletions(-) diff --git a/build_files/buildbot/master.cfg b/build_files/buildbot/master.cfg index 6b3efb469b3..4480b7e09d9 100644 --- a/build_files/buildbot/master.cfg +++ b/build_files/buildbot/master.cfg @@ -3,6 +3,52 @@ # +""" +Stock Twisted directory lister doesn't provide any information about last file +modification time, we hack the class a bit in order to have such functionaliity +:) +""" + +from buildbot.status.web.base import DirectoryLister + + +def get_files_and_directories(self, directory): + from twisted.web.static import (getTypeAndEncoding, + formatFileSize) + import urllib + import cgi + import time + import os + files = [] + dirs = [] + for path in directory: + url = urllib.quote(path, "/") + escapedPath = cgi.escape(path) + lastmodified = time.ctime(os.path.getmtime( + os.path.join(self.path, path))) + if os.path.isdir(os.path.join(self.path, path)): + url = url + '/' + dirs.append({'text': escapedPath + "/", 'href': url, + 'size': '', 'type': '[Directory]', + 'encoding': '', + 'lastmodified': lastmodified}) + else: + mimetype, encoding = getTypeAndEncoding(path, self.contentTypes, + self.contentEncodings, + self.defaultType) + try: + size = os.stat(os.path.join(self.path, path)).st_size + except OSError: + continue + files.append({ + 'text': escapedPath, "href": url, + 'type': '[%s]' % mimetype, + 'encoding': (encoding and '[%s]' % encoding or ''), + 'size': formatFileSize(size), + 'lastmodified': lastmodified}) + return dirs, files +DirectoryLister._getFilesAndDirectories = get_files_and_directories + # Dictionary that the buildmaster pays attention to. c = BuildmasterConfig = {} @@ -37,37 +83,34 @@ c['change_source'] = GitPoller( # Decide how to react to incoming changes. # from buildbot.scheduler import Scheduler -from buildbot.schedulers import timed +from buildbot.schedulers import timed, forcesched c['schedulers'] = [] + +def schedule_force_build(name): + c['schedulers'].append(forcesched.ForceScheduler(name='force ' + name, + builderNames=[name], + branch=forcesched.FixedParameter(name="branch", default=""), + revision=forcesched.FixedParameter(name="revision", default=""), + repository=forcesched.FixedParameter(name="repository", default=""), + project=forcesched.FixedParameter(name="project", default=""), + properties=[])) + + def schedule_build(name, hour, minute=0): c['schedulers'].append(timed.Nightly(name='nightly ' + name, + branch=None, # default branch builderNames=[name], hour=hour, minute=minute)) -""" -schedule_cycle = 4 - -for i in range(0, schedule_cycle): - names = [] - for j in range(0, len(buildernames)): - if j % schedule_cycle == i: - names += [buildernames[j]] - - print(names) - c['schedulers'].append(timed.Nightly(name='nightly' + str(i), - builderNames=names, - hour=3+i, - minute=0)) -""" # 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. +# 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 @@ -76,7 +119,6 @@ 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 @@ -86,7 +128,8 @@ c['builders'] = [] buildernames = [] -def add_builder(c, name, libdir, factory, branch='', rsync=False, hour=3, minute=0): +def add_builder(c, name, libdir, factory, branch='', + rsync=False, hour=3, minute=0): slavenames = [] for slave in master_private.slaves: @@ -95,31 +138,65 @@ def add_builder(c, name, libdir, factory, branch='', rsync=False, hour=3, minute if len(slavenames) > 0: f = factory(name, libdir, branch, rsync) - c['builders'].append(BuilderConfig(name=name, slavenames=slavenames, factory=f, category='blender')) + c['builders'].append(BuilderConfig(name=name, + slavenames=slavenames, + factory=f, + category='blender')) buildernames.append(name) schedule_build(name, hour, minute) + schedule_force_build(name) # common steps + def git_submodule_step(submodule): - return Git(name=submodule+'.git', repourl='git://git.blender.org/' + submodule + '.git', mode='update', workdir=submodule + '.git') + return Git(name=submodule + '.git', + repourl='git://git.blender.org/' + submodule + '.git', + mode='update', + workdir=submodule + '.git') + def git_step(branch=''): if branch: - return Git(name='blender.git', repourl='git://git.blender.org/blender.git', mode='update', branch=branch, workdir='blender.git', submodules=True) + return Git(name='blender.git', + repourl='git://git.blender.org/blender.git', + mode='update', + branch=branch, + workdir='blender.git', + submodules=True) else: - return Git(name='blender.git', repourl='git://git.blender.org/blender.git', mode='update', workdir='blender.git', submodules=True) + return Git(name='blender.git', + repourl='git://git.blender.org/blender.git', + mode='update', + workdir='blender.git', + submodules=True) + def git_submodules_update(): - command = ['git', 'submodule', 'foreach', '--recursive', 'git', 'pull', 'origin', 'master'] - return ShellCommand(name='Submodules Update', command=command, description='updating', descriptionDone='up to date', workdir='blender.git') + command = ['git', 'submodule', 'foreach', '--recursive', + 'git', 'pull', 'origin', 'master'] + return ShellCommand(name='Submodules Update', + command=command, + description='updating', + descriptionDone='up to date', + workdir='blender.git') + def lib_svn_step(dir): - return SVN(name='lib svn', baseURL='https://svn.blender.org/svnroot/bf-blender/%%BRANCH%%/lib/' + dir, mode='update', defaultBranch='trunk', workdir='lib/' + dir) + return SVN(name='lib svn', + baseURL='https://svn.blender.org/svnroot/bf-blender/%%BRANCH%%/lib/' + dir, + mode='update', + defaultBranch='trunk', + workdir='lib/' + dir) + def rsync_step(id, branch, rsync_script): - return ShellCommand(name='rsync', command=['python', rsync_script, id, branch], description='uploading', descriptionDone='uploaded', workdir='install') + return ShellCommand(name='rsync', + command=['python', rsync_script, id, branch], + description='uploading', + descriptionDone='uploaded', + workdir='install') # generic builder @@ -136,21 +213,38 @@ def generic_builder(id, libdir='', branch='', rsync=False): if libdir != '': f.addStep(lib_svn_step(libdir)) - for submodule in ('blender-translations', 'blender-addons', 'blender-addons-contrib', 'scons'): + for submodule in ('blender-translations', + 'blender-addons', + 'blender-addons-contrib', + 'scons'): f.addStep(git_submodule_step(submodule)) + f.addStep(git_step(branch)) f.addStep(git_submodules_update()) f.addStep(Compile(command=['python', compile_script, id], timeout=3600)) f.addStep(Test(command=['python', test_script, id])) - f.addStep(ShellCommand(name='package', command=['python', pack_script, id, branch], description='packaging', descriptionDone='packaged')) + f.addStep(ShellCommand(name='package', + command=['python', pack_script, id, branch], + description='packaging', + descriptionDone='packaged')) if rsync: f.addStep(rsync_step(id, branch, rsync_script)) elif id.find('cmake') != -1: - f.addStep(FileUpload(name='upload', slavesrc='buildbot_upload.zip', masterdest=filename, maxsize=150 * 1024 * 1024)) + f.addStep(FileUpload(name='upload', + slavesrc='buildbot_upload.zip', + masterdest=filename, + maxsize=150 * 1024 * 1024)) else: - f.addStep(FileUpload(name='upload', slavesrc='buildbot_upload.zip', masterdest=filename, maxsize=150 * 1024 * 1024, workdir='install')) - f.addStep(MasterShellCommand(name='unpack', command=['python', unpack_script, filename], description='unpacking', descriptionDone='unpacked')) + f.addStep(FileUpload(name='upload', + slavesrc='buildbot_upload.zip', + masterdest=filename, + maxsize=150 * 1024 * 1024, + workdir='install')) + f.addStep(MasterShellCommand(name='unpack', + command=['python', unpack_script, filename], + description='unpacking', + descriptionDone='unpacked')) return f # builders @@ -195,15 +289,16 @@ authz_cfg = authz.Authz( # change any of these to True to enable; see the manual for more # options gracefulShutdown=False, - forceBuild='auth', # use this to test your slave once it is set up + forceBuild=True, # use this to test your slave once it is set up forceAllBuilds=False, pingBuilder=False, - stopBuild='auth', + stopBuild=True, stopAllBuilds=False, - cancelPendingBuild='auth', + cancelPendingBuild=True, ) c['status'].append(html.WebStatus(http_port=8010, authz=authz_cfg)) +#c['status'].append(html.WebStatus(http_port=8010)) # PROJECT IDENTITY