Skip to content

Commit 3ef2c16

Browse files
author
buildbot
committed
Separated out schedulers for trunk, personal/* and branch/*.
Corrected regex patterns which extract unittest details. Added a first tentative email notifier. Added ForceSchedulers, in order to be able to force builds. - Legacy-Id: 9350
1 parent 2f54511 commit 3ef2c16

1 file changed

Lines changed: 76 additions & 13 deletions

File tree

buildbot/masters/datatracker/master.cfg

Lines changed: 76 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,45 @@ c['change_source'] = [
5151
# case, just kick off a 'runtests' build
5252

5353
from buildbot.schedulers.basic import SingleBranchScheduler, AnyBranchScheduler
54+
from buildbot.schedulers.forcesched import ForceScheduler
5455
from buildbot.changes import filter
5556
c['schedulers'] = [
56-
AnyBranchScheduler(name="pyflakes", treeStableTimer=10, builderNames=["Check PyFlakes"]),
57-
AnyBranchScheduler(name="lin_test", treeStableTimer=60*5, builderNames=["Test Suite"]),
58-
AnyBranchScheduler(name="osx_test", treeStableTimer=60*5, builderNames=["Test Suite (OS X)"]),
59-
SingleBranchScheduler(name="crawler", treeStableTimer=60*60*4, builderNames=["Test-Crawler"],
57+
# Branch schedulers
58+
SingleBranchScheduler(name="pyflakes", treeStableTimer=10, builderNames=["Check PyFlakes"],
6059
change_filter=filter.ChangeFilter(branch='trunk')),
60+
SingleBranchScheduler(name="lin_test", treeStableTimer=60*5, builderNames=["Test Suite"],
61+
change_filter=filter.ChangeFilter(branch='trunk')),
62+
SingleBranchScheduler(name="osx_test", treeStableTimer=60*5, builderNames=["Test Suite (OS X)"],
63+
change_filter=filter.ChangeFilter(branch='trunk')),
64+
SingleBranchScheduler(name="crawler", treeStableTimer=60*60*4, builderNames=["Test-Crawler"],
65+
change_filter=filter.ChangeFilter(branch='trunk')),
66+
#
67+
AnyBranchScheduler(name="pyflakes_branch", treeStableTimer=10, builderNames=["[branch] Check PyFlakes"],
68+
change_filter=filter.ChangeFilter(branch_re='branch/.*')),
69+
AnyBranchScheduler(name="lin_test_branch", treeStableTimer=60*5, builderNames=["[branch] Test Suite"],
70+
change_filter=filter.ChangeFilter(branch_re='branch/.*')),
71+
AnyBranchScheduler(name="osx_test_branch", treeStableTimer=60*5, builderNames=["[branch] Test Suite (OS X)"],
72+
change_filter=filter.ChangeFilter(branch_re='branch/.*')),
73+
#
74+
AnyBranchScheduler(name="pyflakes_personal",treeStableTimer=10, builderNames=["[personal] Check PyFlakes"],
75+
change_filter=filter.ChangeFilter(branch_re='personal/.*')),
76+
AnyBranchScheduler(name="lin_test_personal",treeStableTimer=60*5, builderNames=["[personal] Test Suite"],
77+
change_filter=filter.ChangeFilter(branch_re='personal/.*')),
78+
AnyBranchScheduler(name="osx_test_personal",treeStableTimer=60*5, builderNames=["[personal] Test Suite (OS X)"],
79+
change_filter=filter.ChangeFilter(branch_re='personal/.*')),
80+
# Force schedulers
81+
ForceScheduler(name="Force PyFlakes", builderNames=["Check PyFlakes"]),
82+
ForceScheduler(name="Force Test Suite", builderNames=["Test Suite"]),
83+
ForceScheduler(name="Force Test Suite (OS X)", builderNames=["Test Suite (OS X)"]),
84+
ForceScheduler(name="Force Test-Crawler", builderNames=["Test-Crawler"]),
85+
#
86+
ForceScheduler(name="Force [branch] PyFlakes", builderNames=["[branch] Check PyFlakes"]),
87+
ForceScheduler(name="Force [branch] Test Suite", builderNames=["[branch] Test Suite"]),
88+
ForceScheduler(name="Force [branch] Test Suite (OS X)", builderNames=["[branch] Test Suite (OS X)"]),
89+
#
90+
ForceScheduler(name="Force [personal] PyFlakes", builderNames=["[personal] Check PyFlakes"]),
91+
ForceScheduler(name="Force [personal] Test Suite", builderNames=["[personal] Test Suite"]),
92+
ForceScheduler(name="Force [personal] Test Suite (OS X)", builderNames=["[personal] Test Suite (OS X)"]),
6193
]
6294

6395
####### BUILDERS
@@ -96,9 +128,9 @@ class UnitTest(WarningCountingShellCommand):
96128
regexPatterns = {
97129
"tests": "Ran (\d+) tests in [0-9.]+s",
98130
"time": "Ran \d+ tests in ([0-9.]+)s",
99-
"skipped": "(?:OK|FAILED).*\skipped=(\d+)",
100-
"failed": "FAILED.*failures\=(\d+)",
101-
"errors": "FAILED.*errors\=(\d+)",
131+
"skipped": "(?:OK|FAILED).*skipped=(\d+)",
132+
"failed": "FAILED.*failures=(\d+)",
133+
"errors": "FAILED.*errors=(\d+)",
102134
"template_coverage":" +Template coverage: +([0-9.]+%)",
103135
"url_coverage": " +Url coverage: +([0-9.]+%)",
104136
"code_coverage": " +Code coverage: +([0-9.]+%)",
@@ -147,6 +179,9 @@ class UnitTest(WarningCountingShellCommand):
147179
if name in self.step_status.statistics:
148180
value = self.step_status.getStatistic(name)
149181
displayName = name.replace('_', ' ')
182+
# special case. Mph.
183+
if displayName == 'template coverage':
184+
displayName = 'templ. coverage'
150185
if type(value) is float: # this is run-time
151186
description.append('%s: %.2fs' % (displayName, value))
152187
elif type(value) is int:
@@ -189,7 +224,11 @@ factory.addStep(ShellCommand(
189224
"propset", "--revprop", "-r", Property('got_revision'), "test:pyflakes", "passed" ],
190225
))
191226

192-
c['builders'].append(BuilderConfig(name="Check PyFlakes", factory=factory,
227+
c['builders'].append(BuilderConfig(name="Check PyFlakes", factory=factory, category="1. trunk",
228+
slavenames=["datatracker_lin_py27_1", "datatracker_lin_py27_2", "datatracker_lin_py27_3"]))
229+
c['builders'].append(BuilderConfig(name="[branch] Check PyFlakes", factory=factory, category="2. branch",
230+
slavenames=["datatracker_lin_py27_1", "datatracker_lin_py27_2", "datatracker_lin_py27_3"]))
231+
c['builders'].append(BuilderConfig(name="[personal] Check PyFlakes", factory=factory, category="3. personal",
193232
slavenames=["datatracker_lin_py27_1", "datatracker_lin_py27_2", "datatracker_lin_py27_3"]))
194233

195234
# --- Run tests ---
@@ -222,7 +261,11 @@ factory.addStep(ShellCommand(
222261
"propset", "--revprop", "-r", Property('got_revision'), "test:unittest", "passed" ],
223262
))
224263

225-
c['builders'].append(BuilderConfig(name="Test Suite", factory=factory,
264+
c['builders'].append(BuilderConfig(name="Test Suite", factory=factory, category="1. trunk",
265+
slavenames=["datatracker_lin_py27_1", "datatracker_lin_py27_2", "datatracker_lin_py27_3"]))
266+
c['builders'].append(BuilderConfig(name="[branch] Test Suite", factory=factory, category="2. branch",
267+
slavenames=["datatracker_lin_py27_1", "datatracker_lin_py27_2", "datatracker_lin_py27_3"]))
268+
c['builders'].append(BuilderConfig(name="[personal] Test Suite", factory=factory, category="3. personal",
226269
slavenames=["datatracker_lin_py27_1", "datatracker_lin_py27_2", "datatracker_lin_py27_3"]))
227270

228271

@@ -246,10 +289,14 @@ factory.addStep(ShellCommand(
246289
factory.addStep(UnitTest(
247290
workdir=Interpolate('build/%(src::branch)s'),
248291
haltOnFailure=True,
249-
command=["ietf/manage.py", "test", "--settings=settings_sqlitetest"],
292+
command=["ietf/manage.py", "test", "--settings=settings_sqlitetest", "--skip-coverage"],
250293
))
251294

252-
c['builders'].append(BuilderConfig(name="Test Suite (OS X)", factory=factory,
295+
c['builders'].append(BuilderConfig(name="Test Suite (OS X)", factory=factory, category="1. trunk",
296+
slavenames=["datatracker_osx_py27_4"]))
297+
c['builders'].append(BuilderConfig(name="[branch] Test Suite (OS X)", factory=factory, category="2. branch",
298+
slavenames=["datatracker_osx_py27_4"]))
299+
c['builders'].append(BuilderConfig(name="[personal] Test Suite (OS X)", factory=factory, category="3. personal",
253300
slavenames=["datatracker_osx_py27_4"]))
254301

255302

@@ -283,7 +330,7 @@ factory.addStep(ShellCommand(
283330
"propset", "--revprop", "-r", Property('got_revision'), "test:crawler", "passed" ],
284331
))
285332

286-
c['builders'].append(BuilderConfig(name="Test-Crawler", factory=factory,
333+
c['builders'].append(BuilderConfig(name="Test-Crawler", factory=factory, category="1. trunk",
287334
slavenames=["datatracker_lin_py27_1", ]))
288335

289336

@@ -295,7 +342,7 @@ c['builders'].append(BuilderConfig(name="Test-Crawler", factory=factory,
295342

296343
c['status'] = []
297344

298-
from buildbot.status import html
345+
from buildbot.status import html, mail
299346
from buildbot.status.web import authz, auth
300347

301348
authz_cfg=authz.Authz(
@@ -323,6 +370,22 @@ trac_template_loaders = [jinja2.FileSystemLoader(os.path.join(os.getcwd(), 'trac
323370
c['status'].append(html.WebStatus(http_port=8011, jinja_loaders=trac_template_loaders,
324371
authz=authz_cfg))
325372

373+
# Email notifications
374+
from zope.interface import implements
375+
from buildbot import interfaces
376+
377+
class UsernameIsEmailAddress():
378+
"This IEmailLookup provider assumes that the svn username is a valid email address."
379+
implements(interfaces.IEmailLookup)
380+
def getAddress(self, name):
381+
return name
382+
383+
c['status'].append(mail.MailNotifier(
384+
builders = ['Check Pyflakes', 'Test Suite', 'Test-Crawler', ],
385+
fromaddr='buildbot@tools.ietf.org',
386+
extraRecipients=['henrik@levkowetz.com',],
387+
lookup=UsernameIsEmailAddress(),
388+
))
326389

327390
####### PROJECT IDENTITY
328391

0 commit comments

Comments
 (0)