dvander@2269: # -*- python -*- dvander@2269: # ex: set syntax=python: dvander@2269: dvander@2269: # This is a sample buildmaster config file. It must be installed as dvander@2269: # 'master.cfg' in your buildmaster's base directory (although the filename dvander@2269: # can be changed with the --basedir option to 'mktap buildbot master'). dvander@2269: dvander@2269: # It has one job: define a dictionary named BuildmasterConfig. This dvander@2269: # dictionary has a variety of keys to control different aspects of the dvander@2269: # buildmaster. They are documented in docs/config.xhtml . dvander@2269: dvander@2269: dvander@2269: # This is the dictionary that the buildmaster pays attention to. We also use dvander@2269: # a shorter alias to save typing. dvander@2269: c = BuildmasterConfig = {} dvander@2269: dvander@2269: ####### BUILDSLAVES dvander@2269: dvander@2269: # the 'slaves' list defines the set of allowable buildslaves. Each element is dvander@2269: # a tuple of bot-name and bot-password. These correspond to values given to dvander@2269: # the buildslave's mktap invocation. dvander@2269: from buildbot.buildslave import BuildSlave dvander@2269: c['slaves'] = [ dvander@2269: BuildSlave("linux", "***"), dvander@2269: BuildSlave("win32", "***") dvander@2269: ] dvander@2269: dvander@2269: dvander@2269: # to limit to two concurrent builds on a slave, use dvander@2269: # c['slaves'] = [BuildSlave("bot1name", "bot1passwd", max_builds=2)] dvander@2269: dvander@2269: dvander@2269: # 'slavePortnum' defines the TCP port to listen on. This must match the value dvander@2269: # configured into the buildslaves (with their --master option) dvander@2269: dvander@2269: c['slavePortnum'] = 0000 dvander@2269: dvander@2269: ####### CHANGESOURCES dvander@2269: dvander@2269: # the 'change_source' setting tells the buildmaster how it should find out dvander@2269: # about source code changes. Any class which implements IChangeSource can be dvander@2269: # put here: there are several in buildbot/changes/*.py to choose from. dvander@2269: dvander@2269: from buildbot.changes.pb import PBChangeSource dvander@2269: c['change_source'] = PBChangeSource() dvander@2269: dvander@2269: # For example, if you had CVSToys installed on your repository, and your dvander@2269: # CVSROOT/freshcfg file had an entry like this: dvander@2269: #pb = ConfigurationSet([ dvander@2269: # (None, None, None, PBService(userpass=('foo', 'bar'), port=4519)), dvander@2269: # ]) dvander@2269: dvander@2269: # then you could use the following buildmaster Change Source to subscribe to dvander@2269: # the FreshCVS daemon and be notified on every commit: dvander@2269: # dvander@2269: #from buildbot.changes.freshcvs import FreshCVSSource dvander@2269: #fc_source = FreshCVSSource("cvs.example.com", 4519, "foo", "bar") dvander@2269: #c['change_source'] = fc_source dvander@2269: dvander@2269: # or, use a PBChangeSource, and then have your repository's commit script run dvander@2269: # 'buildbot sendchange', or use contrib/svn_buildbot.py, or dvander@2269: # contrib/arch_buildbot.py : dvander@2269: # dvander@2269: #from buildbot.changes.pb import PBChangeSource dvander@2269: #c['change_source'] = PBChangeSource() dvander@2269: dvander@2269: dvander@2269: ####### SCHEDULERS dvander@2269: dvander@2269: ## configure the Schedulers dvander@2269: dvander@2269: from buildbot.scheduler import Scheduler dvander@2269: dvander@2269: schedTrunk = Scheduler( dvander@2269: name = "1.1-trunk", dvander@2269: branch = "trunk", dvander@2269: treeStableTimer = 1*60, dvander@2269: builderNames = ["linux-trunk", "win32-trunk"] dvander@2269: ) dvander@2269: schedStable = Scheduler( dvander@2269: name = "1.0-stable", dvander@2269: branch = "branches/sourcemod-1.0.x", dvander@2269: treeStableTimer = 1*60, dvander@2269: builderNames = ["linux-stable", "win32-stable"] dvander@2269: ) dvander@2269: dvander@2269: c['schedulers'] = [schedStable, schedTrunk] dvander@2269: dvander@2269: dvander@2269: ####### BUILDERS dvander@2269: dvander@2269: # the 'builders' list defines the Builders. Each one is configured with a dvander@2269: # dictionary, using the following keys: dvander@2269: # name (required): the name used to describe this bilder dvander@2269: # slavename (required): which slave to use, must appear in c['bots'] dvander@2269: # builddir (required): which subdirectory to run the builder in dvander@2269: # factory (required): a BuildFactory to define how the build is run dvander@2269: # periodicBuildTime (optional): if set, force a build every N seconds dvander@2269: dvander@2269: # buildbot/process/factory.py provides several BuildFactory classes you can dvander@2269: # start with, which implement build processes for common targets (GNU dvander@2269: # autoconf projects, CPAN perl modules, etc). The factory.BuildFactory is the dvander@2269: # base class, and is configured with a series of BuildSteps. When the build dvander@2269: # is run, the appropriate buildslave is told to execute each Step in turn. dvander@2269: dvander@2269: # the first BuildStep is typically responsible for obtaining a copy of the dvander@2269: # sources. There are source-obtaining Steps in buildbot/steps/source.py for dvander@2269: # CVS, SVN, and others. dvander@2269: dvander@2269: from buildbot.process import factory dvander@2269: from buildbot.steps.shell import Compile dvander@2269: from buildbot.steps.shell import ShellCommand dvander@2269: from buildbot.steps.transfer import FileDownload dvander@2269: from buildbot.steps.source import SVN dvander@2269: from buildbot.process.properties import WithProperties dvander@2269: from buildbot.steps.python_twisted import Trial dvander@2269: from buildbot import locks dvander@2269: dvander@2269: pdb_lock = locks.MasterLock("symbolstore") dvander@2269: dvander@2269: def create_factory(sep, os): dvander@2269: f1 = factory.BuildFactory() dvander@2269: f1.addStep(SVN(baseURL = "svn://svn.alliedmods.net/am/sourcemod/", dvander@2269: mode = "copy" dvander@2269: ) dvander@2269: ) dvander@2269: f1.addStep(ShellCommand( dvander@2269: haltOnFailure = 1, dvander@2269: name = "bootstrap", dvander@2269: command = ["tools" + sep + "buildbot" + sep + "bootstrap.pl"], dvander@2269: description = "bootstrapping", dvander@2269: descriptionDone = "bootstrapped" dvander@2269: )) dvander@2269: f1.addStep(ShellCommand( dvander@2269: haltOnFailure = 1, dvander@2269: name = "build", dvander@2269: command = ["tools" + sep + "buildbot" + sep + "startbuild.pl"], dvander@2269: description = "compiling", dvander@2269: descriptionDone = "compiled" dvander@2269: )) dvander@2269: f1.addStep(ShellCommand( dvander@2269: haltOnFailure = 1, dvander@2269: name = "upload", dvander@2269: command = ["tools" + sep + "buildbot" + sep + "package.pl", dvander@2269: ".." + sep + ".." + sep + "smdrop_info" dvander@2269: ], dvander@2269: description = "packaging", dvander@2269: descriptionDone = "uploaded" dvander@2269: )) dvander@2269: if os == "win32": dvander@2269: f1.addStep(ShellCommand( dvander@2269: haltOnFailure = 1, dvander@2269: locks = [pdb_lock], dvander@2269: name = "symstore", dvander@2269: command = ["tools" + sep + "buildbot" + sep + "symstore.pl"], dvander@2269: description = "symstore", dvander@2269: descriptionDone = "symstore" dvander@2269: )) dvander@2269: return f1 dvander@2269: dvander@2269: facWin = create_factory("\\", "win32") dvander@2269: facLinux = create_factory("/", "linux") dvander@2269: dvander@2269: buildLinuxStable = { dvander@2269: 'name': 'linux-stable', dvander@2269: 'slavename': 'linux', dvander@2269: 'builddir': 'linux-stable', dvander@2269: 'factory': facLinux dvander@2269: } dvander@2269: buildLinuxTrunk = { dvander@2269: 'name': "linux-trunk", dvander@2269: 'slavename': "linux", dvander@2269: 'builddir': "linux-trunk", dvander@2269: 'factory': facLinux dvander@2269: } dvander@2269: buildWindowsStable = { dvander@2269: 'name': 'win32-stable', dvander@2269: 'slavename': 'win32', dvander@2269: 'builddir': 'win32-stable', dvander@2269: 'factory': facWin dvander@2269: } dvander@2269: buildWindowsTrunk = { dvander@2269: 'name': "win32-trunk", dvander@2269: 'slavename': "win32", dvander@2269: 'builddir': "win32-trunk", dvander@2269: 'factory': facWin dvander@2269: } dvander@2269: c['builders'] = [buildLinuxTrunk, buildWindowsTrunk, buildLinuxStable, buildWindowsStable] dvander@2269: dvander@2269: dvander@2269: ####### STATUS TARGETS dvander@2269: dvander@2269: # 'status' is a list of Status Targets. The results of each build will be dvander@2269: # pushed to these targets. buildbot/status/*.py has a variety to choose from, dvander@2269: # including web pages, email senders, and IRC bots. dvander@2269: dvander@2269: c['status'] = [] dvander@2269: dvander@2269: from buildbot.status import html dvander@2269: c['status'].append(html.WebStatus(http_port=8010)) dvander@2269: dvander@2269: # from buildbot.status import mail dvander@2269: # c['status'].append(mail.MailNotifier(fromaddr="buildbot@localhost", dvander@2269: # extraRecipients=["builds@example.com"], dvander@2269: # sendToInterestedUsers=False)) dvander@2269: # dvander@2269: # from buildbot.status import words dvander@2269: # c['status'].append(words.IRC(host="irc.example.com", nick="bb", dvander@2269: # channels=["#example"])) dvander@2269: # dvander@2269: # from buildbot.status import client dvander@2269: # c['status'].append(client.PBListener(9988)) dvander@2269: dvander@2269: dvander@2269: ####### DEBUGGING OPTIONS dvander@2269: dvander@2269: # if you set 'debugPassword', then you can connect to the buildmaster with dvander@2269: # the diagnostic tool in contrib/debugclient.py . From this tool, you can dvander@2269: # manually force builds and inject changes, which may be useful for testing dvander@2269: # your buildmaster without actually commiting changes to your repository (or dvander@2269: # before you have a functioning 'sources' set up). The debug tool uses the dvander@2269: # same port number as the slaves do: 'slavePortnum'. dvander@2269: dvander@2269: #c['debugPassword'] = "debugpassword" dvander@2269: dvander@2269: # if you set 'manhole', you can ssh into the buildmaster and get an dvander@2269: # interactive python shell, which may be useful for debugging buildbot dvander@2269: # internals. It is probably only useful for buildbot developers. You can also dvander@2269: # use an authorized_keys file, or plain telnet. dvander@2269: #from buildbot import manhole dvander@2269: #c['manhole'] = manhole.PasswordManhole("tcp:9999:interface=127.0.0.1", dvander@2269: # "admin", "password") dvander@2269: dvander@2269: dvander@2269: ####### PROJECT IDENTITY dvander@2269: dvander@2269: # the 'projectName' string will be used to describe the project that this dvander@2269: # buildbot is working on. For example, it is used as the title of the dvander@2269: # waterfall HTML page. The 'projectURL' string will be used to provide a link dvander@2269: # from buildbot HTML pages to your project's home page. dvander@2269: dvander@2269: c['projectName'] = "SourceMod" dvander@2269: c['projectURL'] = "http://www.sourcemod.net/" dvander@2269: dvander@2269: # the 'buildbotURL' string should point to the location where the buildbot's dvander@2269: # internal web server (usually the html.Waterfall page) is visible. This dvander@2269: # typically uses the port number set in the Waterfall 'status' entry, but dvander@2269: # with an externally-visible host name which the buildbot cannot figure out dvander@2269: # without some help. dvander@2269: dvander@2269: c['buildbotURL'] = "http://localhost:8010/"