tools/buildbot/master.cfg
author Nicholas Hastings <skamonkey@gmail.com>
Mon Jul 29 10:03:18 2013 -0400 (2013-07-29)
changeset 3960 d50b36dc6821
parent 2269 a0b54dcc11f9
permissions -rw-r--r--
Updated for latest hl2sdk-dota changes.
dvander@2269
     1
# -*- python -*-
dvander@2269
     2
# ex: set syntax=python:
dvander@2269
     3
dvander@2269
     4
# This is a sample buildmaster config file. It must be installed as
dvander@2269
     5
# 'master.cfg' in your buildmaster's base directory (although the filename
dvander@2269
     6
# can be changed with the --basedir option to 'mktap buildbot master').
dvander@2269
     7
dvander@2269
     8
# It has one job: define a dictionary named BuildmasterConfig. This
dvander@2269
     9
# dictionary has a variety of keys to control different aspects of the
dvander@2269
    10
# buildmaster. They are documented in docs/config.xhtml .
dvander@2269
    11
dvander@2269
    12
dvander@2269
    13
# This is the dictionary that the buildmaster pays attention to. We also use
dvander@2269
    14
# a shorter alias to save typing.
dvander@2269
    15
c = BuildmasterConfig = {}
dvander@2269
    16
dvander@2269
    17
####### BUILDSLAVES
dvander@2269
    18
dvander@2269
    19
# the 'slaves' list defines the set of allowable buildslaves. Each element is
dvander@2269
    20
# a tuple of bot-name and bot-password. These correspond to values given to
dvander@2269
    21
# the buildslave's mktap invocation.
dvander@2269
    22
from buildbot.buildslave import BuildSlave
dvander@2269
    23
c['slaves'] = [
dvander@2269
    24
                BuildSlave("linux",     "***"),
dvander@2269
    25
                BuildSlave("win32",     "***")
dvander@2269
    26
              ]
dvander@2269
    27
	
dvander@2269
    28
dvander@2269
    29
# to limit to two concurrent builds on a slave, use
dvander@2269
    30
#  c['slaves'] = [BuildSlave("bot1name", "bot1passwd", max_builds=2)]
dvander@2269
    31
dvander@2269
    32
dvander@2269
    33
# 'slavePortnum' defines the TCP port to listen on. This must match the value
dvander@2269
    34
# configured into the buildslaves (with their --master option)
dvander@2269
    35
dvander@2269
    36
c['slavePortnum'] = 0000
dvander@2269
    37
dvander@2269
    38
####### CHANGESOURCES
dvander@2269
    39
dvander@2269
    40
# the 'change_source' setting tells the buildmaster how it should find out
dvander@2269
    41
# about source code changes. Any class which implements IChangeSource can be
dvander@2269
    42
# put here: there are several in buildbot/changes/*.py to choose from.
dvander@2269
    43
dvander@2269
    44
from buildbot.changes.pb import PBChangeSource
dvander@2269
    45
c['change_source'] = PBChangeSource()
dvander@2269
    46
dvander@2269
    47
# For example, if you had CVSToys installed on your repository, and your
dvander@2269
    48
# CVSROOT/freshcfg file had an entry like this:
dvander@2269
    49
#pb = ConfigurationSet([
dvander@2269
    50
#    (None, None, None, PBService(userpass=('foo', 'bar'), port=4519)),
dvander@2269
    51
#    ])
dvander@2269
    52
dvander@2269
    53
# then you could use the following buildmaster Change Source to subscribe to
dvander@2269
    54
# the FreshCVS daemon and be notified on every commit:
dvander@2269
    55
#
dvander@2269
    56
#from buildbot.changes.freshcvs import FreshCVSSource
dvander@2269
    57
#fc_source = FreshCVSSource("cvs.example.com", 4519, "foo", "bar")
dvander@2269
    58
#c['change_source'] = fc_source
dvander@2269
    59
dvander@2269
    60
# or, use a PBChangeSource, and then have your repository's commit script run
dvander@2269
    61
# 'buildbot sendchange', or use contrib/svn_buildbot.py, or
dvander@2269
    62
# contrib/arch_buildbot.py :
dvander@2269
    63
#
dvander@2269
    64
#from buildbot.changes.pb import PBChangeSource
dvander@2269
    65
#c['change_source'] = PBChangeSource()
dvander@2269
    66
dvander@2269
    67
dvander@2269
    68
####### SCHEDULERS
dvander@2269
    69
dvander@2269
    70
## configure the Schedulers
dvander@2269
    71
dvander@2269
    72
from buildbot.scheduler import Scheduler
dvander@2269
    73
dvander@2269
    74
schedTrunk = Scheduler(
dvander@2269
    75
        name            = "1.1-trunk",
dvander@2269
    76
        branch          = "trunk",
dvander@2269
    77
        treeStableTimer = 1*60,
dvander@2269
    78
        builderNames    = ["linux-trunk", "win32-trunk"]
dvander@2269
    79
        )
dvander@2269
    80
schedStable = Scheduler(
dvander@2269
    81
        name            = "1.0-stable",
dvander@2269
    82
        branch          = "branches/sourcemod-1.0.x",
dvander@2269
    83
        treeStableTimer = 1*60,
dvander@2269
    84
        builderNames    = ["linux-stable", "win32-stable"]
dvander@2269
    85
        )
dvander@2269
    86
dvander@2269
    87
c['schedulers'] = [schedStable, schedTrunk]
dvander@2269
    88
dvander@2269
    89
dvander@2269
    90
####### BUILDERS
dvander@2269
    91
dvander@2269
    92
# the 'builders' list defines the Builders. Each one is configured with a
dvander@2269
    93
# dictionary, using the following keys:
dvander@2269
    94
#  name (required): the name used to describe this bilder
dvander@2269
    95
#  slavename (required): which slave to use, must appear in c['bots']
dvander@2269
    96
#  builddir (required): which subdirectory to run the builder in
dvander@2269
    97
#  factory (required): a BuildFactory to define how the build is run
dvander@2269
    98
#  periodicBuildTime (optional): if set, force a build every N seconds
dvander@2269
    99
dvander@2269
   100
# buildbot/process/factory.py provides several BuildFactory classes you can
dvander@2269
   101
# start with, which implement build processes for common targets (GNU
dvander@2269
   102
# autoconf projects, CPAN perl modules, etc). The factory.BuildFactory is the
dvander@2269
   103
# base class, and is configured with a series of BuildSteps. When the build
dvander@2269
   104
# is run, the appropriate buildslave is told to execute each Step in turn.
dvander@2269
   105
dvander@2269
   106
# the first BuildStep is typically responsible for obtaining a copy of the
dvander@2269
   107
# sources. There are source-obtaining Steps in buildbot/steps/source.py for
dvander@2269
   108
# CVS, SVN, and others.
dvander@2269
   109
dvander@2269
   110
from buildbot.process import factory
dvander@2269
   111
from buildbot.steps.shell import Compile
dvander@2269
   112
from buildbot.steps.shell import ShellCommand
dvander@2269
   113
from buildbot.steps.transfer import FileDownload
dvander@2269
   114
from buildbot.steps.source import SVN
dvander@2269
   115
from buildbot.process.properties import WithProperties
dvander@2269
   116
from buildbot.steps.python_twisted import Trial
dvander@2269
   117
from buildbot import locks
dvander@2269
   118
dvander@2269
   119
pdb_lock = locks.MasterLock("symbolstore")
dvander@2269
   120
dvander@2269
   121
def create_factory(sep, os):
dvander@2269
   122
    f1 = factory.BuildFactory()
dvander@2269
   123
    f1.addStep(SVN(baseURL          = "svn://svn.alliedmods.net/am/sourcemod/",
dvander@2269
   124
                   mode             = "copy"
dvander@2269
   125
                  )
dvander@2269
   126
              )
dvander@2269
   127
    f1.addStep(ShellCommand(
dvander@2269
   128
            haltOnFailure           = 1,
dvander@2269
   129
            name                    = "bootstrap",
dvander@2269
   130
            command                 = ["tools" + sep + "buildbot" + sep + "bootstrap.pl"],
dvander@2269
   131
            description             = "bootstrapping",
dvander@2269
   132
            descriptionDone         = "bootstrapped"
dvander@2269
   133
            ))
dvander@2269
   134
    f1.addStep(ShellCommand(
dvander@2269
   135
            haltOnFailure           = 1,
dvander@2269
   136
            name                    = "build",
dvander@2269
   137
            command                 = ["tools" + sep + "buildbot" + sep + "startbuild.pl"],
dvander@2269
   138
            description             = "compiling",
dvander@2269
   139
            descriptionDone         = "compiled"
dvander@2269
   140
            ))
dvander@2269
   141
    f1.addStep(ShellCommand(
dvander@2269
   142
            haltOnFailure           = 1,
dvander@2269
   143
            name                    = "upload",
dvander@2269
   144
            command                 = ["tools" + sep + "buildbot" + sep + "package.pl", 
dvander@2269
   145
                                       ".." + sep + ".." + sep + "smdrop_info"
dvander@2269
   146
                                      ],
dvander@2269
   147
            description             = "packaging",
dvander@2269
   148
            descriptionDone         = "uploaded"
dvander@2269
   149
            ))
dvander@2269
   150
    if os == "win32":
dvander@2269
   151
        f1.addStep(ShellCommand(
dvander@2269
   152
            haltOnFailure           = 1,
dvander@2269
   153
            locks                   = [pdb_lock],
dvander@2269
   154
            name                    = "symstore",
dvander@2269
   155
            command                 = ["tools" + sep + "buildbot" + sep + "symstore.pl"],
dvander@2269
   156
            description             = "symstore",
dvander@2269
   157
            descriptionDone         = "symstore"
dvander@2269
   158
            ))
dvander@2269
   159
    return f1
dvander@2269
   160
dvander@2269
   161
facWin = create_factory("\\", "win32")
dvander@2269
   162
facLinux = create_factory("/", "linux")
dvander@2269
   163
dvander@2269
   164
buildLinuxStable = {
dvander@2269
   165
        'name':         'linux-stable',
dvander@2269
   166
        'slavename':    'linux',
dvander@2269
   167
        'builddir':     'linux-stable',
dvander@2269
   168
        'factory':      facLinux
dvander@2269
   169
      }
dvander@2269
   170
buildLinuxTrunk = {
dvander@2269
   171
        'name':         "linux-trunk",
dvander@2269
   172
        'slavename':    "linux",
dvander@2269
   173
        'builddir':     "linux-trunk",
dvander@2269
   174
        'factory':      facLinux
dvander@2269
   175
      }
dvander@2269
   176
buildWindowsStable = {
dvander@2269
   177
        'name':         'win32-stable',
dvander@2269
   178
        'slavename':    'win32',
dvander@2269
   179
        'builddir':     'win32-stable',
dvander@2269
   180
        'factory':      facWin
dvander@2269
   181
      }
dvander@2269
   182
buildWindowsTrunk = {
dvander@2269
   183
        'name':         "win32-trunk",
dvander@2269
   184
        'slavename':    "win32",
dvander@2269
   185
        'builddir':     "win32-trunk",
dvander@2269
   186
        'factory':      facWin
dvander@2269
   187
      }
dvander@2269
   188
c['builders'] = [buildLinuxTrunk, buildWindowsTrunk, buildLinuxStable, buildWindowsStable]
dvander@2269
   189
dvander@2269
   190
dvander@2269
   191
####### STATUS TARGETS
dvander@2269
   192
dvander@2269
   193
# 'status' is a list of Status Targets. The results of each build will be
dvander@2269
   194
# pushed to these targets. buildbot/status/*.py has a variety to choose from,
dvander@2269
   195
# including web pages, email senders, and IRC bots.
dvander@2269
   196
dvander@2269
   197
c['status'] = []
dvander@2269
   198
dvander@2269
   199
from buildbot.status import html
dvander@2269
   200
c['status'].append(html.WebStatus(http_port=8010))
dvander@2269
   201
dvander@2269
   202
# from buildbot.status import mail
dvander@2269
   203
# c['status'].append(mail.MailNotifier(fromaddr="buildbot@localhost",
dvander@2269
   204
#                                      extraRecipients=["[email protected]"],
dvander@2269
   205
#                                      sendToInterestedUsers=False))
dvander@2269
   206
#
dvander@2269
   207
# from buildbot.status import words
dvander@2269
   208
# c['status'].append(words.IRC(host="irc.example.com", nick="bb",
dvander@2269
   209
#                              channels=["#example"]))
dvander@2269
   210
#
dvander@2269
   211
# from buildbot.status import client
dvander@2269
   212
# c['status'].append(client.PBListener(9988))
dvander@2269
   213
dvander@2269
   214
dvander@2269
   215
####### DEBUGGING OPTIONS
dvander@2269
   216
dvander@2269
   217
# if you set 'debugPassword', then you can connect to the buildmaster with
dvander@2269
   218
# the diagnostic tool in contrib/debugclient.py . From this tool, you can
dvander@2269
   219
# manually force builds and inject changes, which may be useful for testing
dvander@2269
   220
# your buildmaster without actually commiting changes to your repository (or
dvander@2269
   221
# before you have a functioning 'sources' set up). The debug tool uses the
dvander@2269
   222
# same port number as the slaves do: 'slavePortnum'.
dvander@2269
   223
dvander@2269
   224
#c['debugPassword'] = "debugpassword"
dvander@2269
   225
dvander@2269
   226
# if you set 'manhole', you can ssh into the buildmaster and get an
dvander@2269
   227
# interactive python shell, which may be useful for debugging buildbot
dvander@2269
   228
# internals. It is probably only useful for buildbot developers. You can also
dvander@2269
   229
# use an authorized_keys file, or plain telnet.
dvander@2269
   230
#from buildbot import manhole
dvander@2269
   231
#c['manhole'] = manhole.PasswordManhole("tcp:9999:interface=127.0.0.1",
dvander@2269
   232
#                                       "admin", "password")
dvander@2269
   233
dvander@2269
   234
dvander@2269
   235
####### PROJECT IDENTITY
dvander@2269
   236
dvander@2269
   237
# the 'projectName' string will be used to describe the project that this
dvander@2269
   238
# buildbot is working on. For example, it is used as the title of the
dvander@2269
   239
# waterfall HTML page. The 'projectURL' string will be used to provide a link
dvander@2269
   240
# from buildbot HTML pages to your project's home page.
dvander@2269
   241
dvander@2269
   242
c['projectName'] = "SourceMod"
dvander@2269
   243
c['projectURL'] = "http://www.sourcemod.net/"
dvander@2269
   244
dvander@2269
   245
# the 'buildbotURL' string should point to the location where the buildbot's
dvander@2269
   246
# internal web server (usually the html.Waterfall page) is visible. This
dvander@2269
   247
# typically uses the port number set in the Waterfall 'status' entry, but
dvander@2269
   248
# with an externally-visible host name which the buildbot cannot figure out
dvander@2269
   249
# without some help.
dvander@2269
   250
dvander@2269
   251
c['buildbotURL'] = "http://localhost:8010/"