diff options
| author | Andi Albrecht <albrecht.andi@gmail.com> | 2011-08-13 21:38:00 +0200 |
|---|---|---|
| committer | Andi Albrecht <albrecht.andi@gmail.com> | 2011-08-13 21:38:00 +0200 |
| commit | 1ad1131f2f7f702df4a4018a97a5d5b08e64ea90 (patch) | |
| tree | c38e35274f115034ef4f9e9a9f593685fe2f5275 | |
| parent | 530da46905753a1e950bcc7e736d72a7309033c6 (diff) | |
| download | sqlparse-1ad1131f2f7f702df4a4018a97a5d5b08e64ea90.tar.gz | |
Add buildbot configuration.
| -rw-r--r-- | extras/buildbot/master.cfg | 264 |
1 files changed, 264 insertions, 0 deletions
diff --git a/extras/buildbot/master.cfg b/extras/buildbot/master.cfg new file mode 100644 index 0000000..92403fe --- /dev/null +++ b/extras/buildbot/master.cfg @@ -0,0 +1,264 @@ +# -*- python -*- +# ex: set syntax=python: + +# This is a sample buildmaster config file. It must be installed as +# 'master.cfg' in your buildmaster's base directory (although the filename +# can be changed with the --basedir option to 'mktap buildbot master'). + +# It has one job: define a dictionary named BuildmasterConfig. This +# dictionary has a variety of keys to control different aspects of the +# buildmaster. They are documented in docs/config.xhtml . + +PYTHON_VERSIONS = ('2.4', '2.5', '2.6', '2.7', '3.2') + + +# This is the dictionary that the buildmaster pays attention to. We also use +# a shorter alias to save typing. +c = BuildmasterConfig = {} + +####### DB URL + +# This specifies what database buildbot uses to store change and scheduler +# state +c['db_url'] = "sqlite:///state.sqlite" + +####### BUILDSLAVES + +# the 'slaves' list defines the set of allowable buildslaves. Each element is +# a BuildSlave object, which is created with bot-name, bot-password. These +# correspond to values given to the buildslave's mktap invocation. +from buildbot.buildslave import BuildSlave +c['slaves'] = [BuildSlave("bot1linux", "imtheslave")] + +# to limit to two concurrent builds on a slave, use +# c['slaves'] = [BuildSlave("bot1name", "bot1passwd", max_builds=2)] + + +# 'slavePortnum' defines the TCP port to listen on. This must match the value +# configured into the buildslaves (with their --master option) + +c['slavePortnum'] = 9989 + +####### CHANGESOURCES + +# the 'change_source' setting tells the buildmaster how it should find out +# about source code changes. Any class which implements IChangeSource can be +# put here: there are several in buildbot/changes/*.py to choose from. + +from buildbot.changes.pb import PBChangeSource +c['change_source'] = PBChangeSource() + +from googlecode_atom import GoogleCodeAtomPoller +poller = GoogleCodeAtomPoller( + feedurl="http://code.google.com/feeds/p/python-sqlparse/hgchanges/basic", + pollinterval=600) +c['change_source'] = [ poller ] + +# For example, if you had CVSToys installed on your repository, and your +# CVSROOT/freshcfg file had an entry like this: +#pb = ConfigurationSet([ +# (None, None, None, PBService(userpass=('foo', 'bar'), port=4519)), +# ]) + +# then you could use the following buildmaster Change Source to subscribe to +# the FreshCVS daemon and be notified on every commit: +# +#from buildbot.changes.freshcvs import FreshCVSSource +#fc_source = FreshCVSSource("cvs.example.com", 4519, "foo", "bar") +#c['change_source'] = fc_source + +# or, use a PBChangeSource, and then have your repository's commit script run +# 'buildbot sendchange', or use contrib/svn_buildbot.py, or +# contrib/arch_buildbot.py : +# +#from buildbot.changes.pb import PBChangeSource +#c['change_source'] = PBChangeSource() + +# If you wat to use SVNPoller, it might look something like +# # Where to get source code changes +# from buildbot.changes.svnpoller import SVNPoller +# source_code_svn_url='https://svn.myproject.org/bluejay/trunk' +# svn_poller = SVNPoller( +# svnurl=source_code_svn_url, +# pollinterval=60*60, # seconds +# histmax=10, +# svnbin='/usr/bin/svn', +## ) +# c['change_source'] = [ svn_poller ] + +####### SCHEDULERS + +## configure the Schedulers + +from buildbot.scheduler import Scheduler +c['schedulers'] = [] +for py_ver in PYTHON_VERSIONS: + c['schedulers'].append( + Scheduler(name="py%s" % py_ver, branch=None, + treeStableTimer=2*60, + builderNames=["builder-%s" % py_ver])) + + +####### BUILDERS + +# the 'builders' list defines the Builders. Each one is configured with a +# dictionary, using the following keys: +# name (required): the name used to describe this builder +# slavename or slavenames (required): which slave(s) to use (must appear in c['slaves']) +# factory (required): a BuildFactory to define how the build is run +# builddir (optional): which subdirectory to run the builder in + +# buildbot/process/factory.py provides several BuildFactory classes you can +# start with, which implement build processes for common targets (GNU +# autoconf projects, CPAN perl modules, etc). The factory.BuildFactory is the +# base class, and is configured with a series of BuildSteps. When the build +# is run, the appropriate buildslave is told to execute each Step in turn. + +# the first BuildStep is typically responsible for obtaining a copy of the +# sources. There are source-obtaining Steps in buildbot/steps/source.py for +# CVS, SVN, and others. + +cvsroot = ":pserver:anonymous@cvs.sourceforge.net:/cvsroot/buildbot" +cvsmodule = "buildbot" + +from buildbot.process import factory +from buildbot.steps.source import CVS, Mercurial +from buildbot.steps.shell import Compile, ShellCommand +from buildbot.steps.python_twisted import Trial +f1 = factory.BuildFactory() +f1.addStep(CVS(cvsroot=cvsroot, cvsmodule=cvsmodule, login="", mode="copy")) +f1.addStep(Compile(command=["python", "./setup.py", "build"])) +f1.addStep(Trial(testChanges=True, testpath=".")) + +from buildbot.config import BuilderConfig + +def _mk_factory(py_ver): + py_bin = "/home/build/python/python%(ver)s/bin/python%(ver)s" % {"ver": py_ver} + py2to3 = "/home/build/python/python%(ver)s/bin/2to3" % {"ver": py_ver} + site_pkgs = "/home/build/python/python%(ver)s/lib/site-packages/sqlparse" % {"ver": py_ver} + is_py3k = bool(py_ver.startswith("3")) + workdir = "build/" + f = factory.BuildFactory() + f.addStep(Mercurial(repourl="http://python-sqlparse.googlecode.com/hg/")) + f.addStep(ShellCommand(command=["rm", "-rf", site_pkgs], + description="removing installed package", + descriptionDone="site-pkgs clean")) + if is_py3k: + workdir = "build/extras/py3k/" + f.addStep(ShellCommand(command=["make", "clean"], + workdir=workdir, + description="cleaning up", + descriptionDone="cleaned up")) + f.addStep(ShellCommand(command=["make", "2TO3=%s" % py2to3], + workdir=workdir, + description="creating py3 version", + descriptionDone="py3 version created")) + f.addStep(Compile(command=[py_bin, "setup.py", "build"], + workdir=workdir)) + f.addStep(ShellCommand(command=[py_bin, "setup.py", "install"], + description="installing module", + descriptionDone="module installed", + workdir=workdir)) + f.addStep(ShellCommand(command=["mv", "sqlparse", "_sqlparse"], + description="moving local module", + descriptionDone="local module moved", + workdir=workdir)) + f.addStep(ShellCommand(command=[py_bin, "tests/run_tests.py"], + description="running tests", + descriptionDone="tests done", + workdir=workdir)) + f.addStep(ShellCommand(command=["mv", "_sqlparse", "sqlparse"], + description="restoring local module", + descriptionDone="local module restored", + workdir=workdir)) + return f + +def _mk_builder(py_ver): + return BuilderConfig( + name="builder-%s" % py_ver, + slavename="bot1linux", + builddir="full-%s" % py_ver, + factory=_mk_factory(py_ver)) + +c['builders'] = [] +for py_ver in PYTHON_VERSIONS: + c['builders'].append(_mk_builder(py_ver)) + + +####### 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 auth, authz +authz_cfg=authz.Authz( + # change any of these to True to enable; see the manual for more + # options + gracefulShutdown = False, + forceBuild = True, + forceAllBuilds = True, + pingBuilder = True, + stopBuild = False, + stopAllBuilds = False, + cancelPendingBuild = True, +) +c['status'].append(html.WebStatus(http_port=8010, authz=authz_cfg)) + +from buildbot.status import mail +c['status'].append(mail.MailNotifier( + fromaddr="buildbot@andialbrecht.de", + extraRecipients=["albrecht.andi@gmail.com"], + sendToInterestedUsers=False, + mode="failing")) +# +# from buildbot.status import words +# c['status'].append(words.IRC(host="irc.example.com", nick="bb", +# channels=["#example"])) +# c['status'].append(words.IRC(host="irc.example.com", nick="bb", +# channels=["#example"], useSSL=True)) +# +# from buildbot.status import client +# c['status'].append(client.PBListener(9988)) + + +####### DEBUGGING OPTIONS + +# if you set 'debugPassword', then you can connect to the buildmaster with +# the diagnostic tool in contrib/debugclient.py . From this tool, you can +# manually force builds and inject changes, which may be useful for testing +# your buildmaster without actually committing changes to your repository (or +# before you have a functioning 'sources' set up). The debug tool uses the +# same port number as the slaves do: 'slavePortnum'. + +#c['debugPassword'] = "debugpassword" + +# if you set 'manhole', you can ssh into the buildmaster and get an +# interactive python shell, which may be useful for debugging buildbot +# internals. It is probably only useful for buildbot developers. You can also +# use an authorized_keys file, or plain telnet. +#from buildbot import manhole +#c['manhole'] = manhole.PasswordManhole("tcp:9999:interface=127.0.0.1", +# "admin", "password") + + +####### PROJECT IDENTITY + +# the 'projectName' string will be used to describe the project that this +# buildbot is working on. For example, it is used as the title of the +# waterfall HTML page. The 'projectURL' string will be used to provide a link +# from buildbot HTML pages to your project's home page. + +c['projectName'] = "python-sqlparse" +c['projectURL'] = "http://python-sqlparse.googlecode.com" + +# 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://buildbot.andialbrecht.de" |
