|
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/" |