comparison README.txt @ 288:b6d0ce3cf430

dereference + repurposes (round1)
author Jeff Hammel <k0scist@gmail.com>
date Tue, 15 Apr 2014 21:27:32 -0700
parents 268349e6c941
children
comparison
equal deleted inserted replaced
287:3a4b11d4fdf0 288:b6d0ce3cf430
1 autobot 1 autobot
2 ======= 2 =======
3 3
4 buildbot for the A*Team 4 buildbot automation
5 5
6 6
7 What is autobot? 7 What is autobot?
8 ---------------- 8 ----------------
9 9
10 autobot is a continuous integration solution for the Automation and 10 autobot is a continuous integration solution built as a front-end to
11 Tools Team. We have a lot of software. We're really talented, so 11 buildbot. We have a lot of software. We're talented, so
12 usually it doesn't break. But we're not infalliable. Our robot ally, 12 usually it doesn't break. But we're not infalliable. Our robot ally,
13 autobot, is there to test things for us. Let's meet autobot! 13 autobot, is there to test things for us. Let's meet autobot!
14 14
15 15
16 Installing autobot 16 Installing autobot
17 ------------------ 17 ------------------
18 18
19 autobot may be installed using the install script:: 19 autobot may be installed using the install script::
20 20
21 curl http://k0s.org/mozilla/hg/autobot/raw-file/tip/INSTALL.sh | bash 21 curl http://k0s.org/hg/autobot/raw-file/tip/INSTALL.sh | bash
22 22
23 This will create a virtualenv and install autobot for development 23 This will create a virtualenv and install autobot for development
24 ($VIRTUAL_ENV/src/autobot). You can also use the script as 24 ($VIRTUAL_ENV/src/autobot). You can also use the script as
25 instructions and install it in the same manner as any other python package. 25 instructions and install it in the same manner as any other python package.
26 26
161 Currently, this is a dict with a single key, ``os``, but more may be 161 Currently, this is a dict with a single key, ``os``, but more may be
162 added as needed. As noted in the TODO below, ideally this would be 162 added as needed. As noted in the TODO below, ideally this would be
163 deprecated entirely by MozInfo but such is the interim solution. 163 deprecated entirely by MozInfo but such is the interim solution.
164 164
165 165
166 Projects
167 --------
168
169 What does autobot test?
170
171 * mozbase [WORKING]
172 * logparser [WORKING]
173 * profilemanager [IN FLIGHT]
174 * mozmill [IN FLIGHT]
175 * talos [IN FLIGHT]
176 * firebug [TODO]
177 * jetpack [TODO]
178
179 The projects are obtained from any factories in subdirectories of
180 ``autobot.projects`` (use
181 ``python -c 'from autobot import projects; print projects.__file__'``
182 to see this location).
183
184
185 Sources 166 Sources
186 ------- 167 -------
187 168
188 ``autobot.process.factory:SourceFactory`` is an abstract base class 169 ``autobot.process.factory:SourceFactory`` is an abstract base class
189 for specifying sources. Sources live as a member on the instance, named 170 for specifying sources. Sources live as a member on the instance, named
195 item being the URL of the source and the second item being the 176 item being the URL of the source and the second item being the
196 branch. If the branch is ``None`` or not specified, this is assumed 177 branch. If the branch is ``None`` or not specified, this is assumed
197 to equate to ``master`` for git or ``default`` for hg. However, you 178 to equate to ``master`` for git or ``default`` for hg. However, you
198 may also use a string in the form of ``URL#branch``. In addition, you 179 may also use a string in the form of ``URL#branch``. In addition, you
199 may specify a whitespace separated source, which ``SourceFactory`` 180 may specify a whitespace separated source, which ``SourceFactory``
200 will split into a list of sources. So all of these translate into the 181 will split into a list of sources.
201 same source::
202
203 sources = {'hg': 'http://hg.mozilla.org/automation/logparser'}
204
205 sources = {'hg': ['http://hg.mozilla.org/automation/logparser#default']}
206
207 sources = {'hg': [('http://hg.mozilla.org/automation/logparser', None)]
208 182
209 The generated ``master.cfg`` polls for changes on the given source, 183 The generated ``master.cfg`` polls for changes on the given source,
210 then uses ``buildbot.schedulers.filter:Changefilter`` in conjunction 184 then uses ``buildbot.schedulers.filter:Changefilter`` in conjunction
211 with a ``Scheduler`` to trigger the appropriate builds. This is done 185 with a ``Scheduler`` to trigger the appropriate builds. This is done
212 by ``GitPoller`` and ``HgPoller`` in 186 by ``GitPoller`` and ``HgPoller`` in
259 treats *all* (for now, can be changed) sources as sources of python 233 treats *all* (for now, can be changed) sources as sources of python
260 packages. In addition to checking them out in 234 packages. In addition to checking them out in
261 ``%(virtualenv)s/src``, it will also install them (using 235 ``%(virtualenv)s/src``, it will also install them (using
262 ``%(python)s setup.py install``) 236 ``%(python)s setup.py install``)
263 237
264 * ``FirefoxDownloaderFactory``: downloads and unpacks a Firefox
265 bundle, using
266 `GetLatestTinderbox <http://hg.mozilla.org/automation/getlatest-tinderbox>`_ .
267 It also provides three properties: ``%(firefox_url)s``,
268 ``%(firefox_bundle)s``, and ``%(firefox)s`` -- the last, and most
269 interesting, being the absolute path to the Firefox executable. You
270 (currently) *must* pass a ``platform`` argument with
271 ``platform['os']`` set to "linux", "win", or "mac" in order for
272 ``FirefoxDownloaderFactory`` to figure out what to do with the thing
273 that it downloads (though see TODO, in the future it should/could
274 use MozInfo or guess the OS from the bundle extension...maybe).
275 Currently, mac is *NOT* supported, though its on my list of things
276 to do (I'd love advice/help!).
277
278 See the ``autobot.process.factory`` file for more details. These 238 See the ``autobot.process.factory`` file for more details. These
279 classes are intended as mix-ins (not my favorite pattern, but it seems 239 classes are intended as mix-ins (not my favorite pattern, but it seems
280 to basically be what buildbot wants you to do). More work needs to be 240 to basically be what buildbot wants you to do). More work needs to be
281 done to provide for the breadth of use-cases, but what exists now is 241 done to provide for the breadth of use-cases, but what exists now is
282 considered a "good start" versus a "final form". More factories may 242 considered a "good start" versus a "final form". More factories may
287 ----------------------------- 247 -----------------------------
288 248
289 Let me know! I'd like to make autobot a solution that works for all 249 Let me know! I'd like to make autobot a solution that works for all
290 stake-holders, and if you're reading this, that means you! 250 stake-holders, and if you're reading this, that means you!
291 251
292 jhammel@mozilla.com 252 k0scist@gmail.com
293 253
294 254
295 TODO 255 TODO
296 ---- 256 ----
297 257
298 No software of any size is ever finished. Here are a few things I 258 No software of any size is ever finished. Here are a few things I
299 would like to add: 259 would like to add:
300 260
301 * post to autolog:
302 http://hg.mozilla.org/users/jgriffin_mozilla.com/mozautolog/
303 Example code can be found at
304 http://hg.mozilla.org/services/services-central/file/9f29daaecbcc/testing/tps/tps/testrunner.py#l491
305 add a 'server' keyword to the AutologTestGroup constructor, set to
306 10.2.76.100:9200, that will cause the data to be written to
307 brasstacks test server. you can omit the restserver keyword, it will
308 use the correct default if you skip it
309
310 * email notifications 261 * email notifications
311
312 * get FirefoxDownloaderFactory working on Mac with .dmg files!
313 262
314 * singular checkout of repos on slaves: the slaves should have a 263 * singular checkout of repos on slaves: the slaves should have a
315 singular master repo that is checked out once for each repo URL, 264 singular master repo that is checked out once for each repo URL,
316 branch pair. It is then updated as the slaves need and (e.g.) 265 branch pair. It is then updated as the slaves need and (e.g.)
317 cloned from there. This should effectively minimize fetch time. 266 cloned from there. This should effectively minimize fetch time.