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
This commit is contained in:
parent
2f54511763
commit
3ef2c16774
|
@ -51,13 +51,45 @@ c['change_source'] = [
|
|||
# case, just kick off a 'runtests' build
|
||||
|
||||
from buildbot.schedulers.basic import SingleBranchScheduler, AnyBranchScheduler
|
||||
from buildbot.schedulers.forcesched import ForceScheduler
|
||||
from buildbot.changes import filter
|
||||
c['schedulers'] = [
|
||||
AnyBranchScheduler(name="pyflakes", treeStableTimer=10, builderNames=["Check PyFlakes"]),
|
||||
AnyBranchScheduler(name="lin_test", treeStableTimer=60*5, builderNames=["Test Suite"]),
|
||||
AnyBranchScheduler(name="osx_test", treeStableTimer=60*5, builderNames=["Test Suite (OS X)"]),
|
||||
# Branch schedulers
|
||||
SingleBranchScheduler(name="pyflakes", treeStableTimer=10, builderNames=["Check PyFlakes"],
|
||||
change_filter=filter.ChangeFilter(branch='trunk')),
|
||||
SingleBranchScheduler(name="lin_test", treeStableTimer=60*5, builderNames=["Test Suite"],
|
||||
change_filter=filter.ChangeFilter(branch='trunk')),
|
||||
SingleBranchScheduler(name="osx_test", treeStableTimer=60*5, builderNames=["Test Suite (OS X)"],
|
||||
change_filter=filter.ChangeFilter(branch='trunk')),
|
||||
SingleBranchScheduler(name="crawler", treeStableTimer=60*60*4, builderNames=["Test-Crawler"],
|
||||
change_filter=filter.ChangeFilter(branch='trunk')),
|
||||
#
|
||||
AnyBranchScheduler(name="pyflakes_branch", treeStableTimer=10, builderNames=["[branch] Check PyFlakes"],
|
||||
change_filter=filter.ChangeFilter(branch_re='branch/.*')),
|
||||
AnyBranchScheduler(name="lin_test_branch", treeStableTimer=60*5, builderNames=["[branch] Test Suite"],
|
||||
change_filter=filter.ChangeFilter(branch_re='branch/.*')),
|
||||
AnyBranchScheduler(name="osx_test_branch", treeStableTimer=60*5, builderNames=["[branch] Test Suite (OS X)"],
|
||||
change_filter=filter.ChangeFilter(branch_re='branch/.*')),
|
||||
#
|
||||
AnyBranchScheduler(name="pyflakes_personal",treeStableTimer=10, builderNames=["[personal] Check PyFlakes"],
|
||||
change_filter=filter.ChangeFilter(branch_re='personal/.*')),
|
||||
AnyBranchScheduler(name="lin_test_personal",treeStableTimer=60*5, builderNames=["[personal] Test Suite"],
|
||||
change_filter=filter.ChangeFilter(branch_re='personal/.*')),
|
||||
AnyBranchScheduler(name="osx_test_personal",treeStableTimer=60*5, builderNames=["[personal] Test Suite (OS X)"],
|
||||
change_filter=filter.ChangeFilter(branch_re='personal/.*')),
|
||||
# Force schedulers
|
||||
ForceScheduler(name="Force PyFlakes", builderNames=["Check PyFlakes"]),
|
||||
ForceScheduler(name="Force Test Suite", builderNames=["Test Suite"]),
|
||||
ForceScheduler(name="Force Test Suite (OS X)", builderNames=["Test Suite (OS X)"]),
|
||||
ForceScheduler(name="Force Test-Crawler", builderNames=["Test-Crawler"]),
|
||||
#
|
||||
ForceScheduler(name="Force [branch] PyFlakes", builderNames=["[branch] Check PyFlakes"]),
|
||||
ForceScheduler(name="Force [branch] Test Suite", builderNames=["[branch] Test Suite"]),
|
||||
ForceScheduler(name="Force [branch] Test Suite (OS X)", builderNames=["[branch] Test Suite (OS X)"]),
|
||||
#
|
||||
ForceScheduler(name="Force [personal] PyFlakes", builderNames=["[personal] Check PyFlakes"]),
|
||||
ForceScheduler(name="Force [personal] Test Suite", builderNames=["[personal] Test Suite"]),
|
||||
ForceScheduler(name="Force [personal] Test Suite (OS X)", builderNames=["[personal] Test Suite (OS X)"]),
|
||||
]
|
||||
|
||||
####### BUILDERS
|
||||
|
@ -96,9 +128,9 @@ class UnitTest(WarningCountingShellCommand):
|
|||
regexPatterns = {
|
||||
"tests": "Ran (\d+) tests in [0-9.]+s",
|
||||
"time": "Ran \d+ tests in ([0-9.]+)s",
|
||||
"skipped": "(?:OK|FAILED).*\skipped=(\d+)",
|
||||
"failed": "FAILED.*failures\=(\d+)",
|
||||
"errors": "FAILED.*errors\=(\d+)",
|
||||
"skipped": "(?:OK|FAILED).*skipped=(\d+)",
|
||||
"failed": "FAILED.*failures=(\d+)",
|
||||
"errors": "FAILED.*errors=(\d+)",
|
||||
"template_coverage":" +Template coverage: +([0-9.]+%)",
|
||||
"url_coverage": " +Url coverage: +([0-9.]+%)",
|
||||
"code_coverage": " +Code coverage: +([0-9.]+%)",
|
||||
|
@ -147,6 +179,9 @@ class UnitTest(WarningCountingShellCommand):
|
|||
if name in self.step_status.statistics:
|
||||
value = self.step_status.getStatistic(name)
|
||||
displayName = name.replace('_', ' ')
|
||||
# special case. Mph.
|
||||
if displayName == 'template coverage':
|
||||
displayName = 'templ. coverage'
|
||||
if type(value) is float: # this is run-time
|
||||
description.append('%s: %.2fs' % (displayName, value))
|
||||
elif type(value) is int:
|
||||
|
@ -189,7 +224,11 @@ factory.addStep(ShellCommand(
|
|||
"propset", "--revprop", "-r", Property('got_revision'), "test:pyflakes", "passed" ],
|
||||
))
|
||||
|
||||
c['builders'].append(BuilderConfig(name="Check PyFlakes", factory=factory,
|
||||
c['builders'].append(BuilderConfig(name="Check PyFlakes", factory=factory, category="1. trunk",
|
||||
slavenames=["datatracker_lin_py27_1", "datatracker_lin_py27_2", "datatracker_lin_py27_3"]))
|
||||
c['builders'].append(BuilderConfig(name="[branch] Check PyFlakes", factory=factory, category="2. branch",
|
||||
slavenames=["datatracker_lin_py27_1", "datatracker_lin_py27_2", "datatracker_lin_py27_3"]))
|
||||
c['builders'].append(BuilderConfig(name="[personal] Check PyFlakes", factory=factory, category="3. personal",
|
||||
slavenames=["datatracker_lin_py27_1", "datatracker_lin_py27_2", "datatracker_lin_py27_3"]))
|
||||
|
||||
# --- Run tests ---
|
||||
|
@ -222,7 +261,11 @@ factory.addStep(ShellCommand(
|
|||
"propset", "--revprop", "-r", Property('got_revision'), "test:unittest", "passed" ],
|
||||
))
|
||||
|
||||
c['builders'].append(BuilderConfig(name="Test Suite", factory=factory,
|
||||
c['builders'].append(BuilderConfig(name="Test Suite", factory=factory, category="1. trunk",
|
||||
slavenames=["datatracker_lin_py27_1", "datatracker_lin_py27_2", "datatracker_lin_py27_3"]))
|
||||
c['builders'].append(BuilderConfig(name="[branch] Test Suite", factory=factory, category="2. branch",
|
||||
slavenames=["datatracker_lin_py27_1", "datatracker_lin_py27_2", "datatracker_lin_py27_3"]))
|
||||
c['builders'].append(BuilderConfig(name="[personal] Test Suite", factory=factory, category="3. personal",
|
||||
slavenames=["datatracker_lin_py27_1", "datatracker_lin_py27_2", "datatracker_lin_py27_3"]))
|
||||
|
||||
|
||||
|
@ -246,10 +289,14 @@ factory.addStep(ShellCommand(
|
|||
factory.addStep(UnitTest(
|
||||
workdir=Interpolate('build/%(src::branch)s'),
|
||||
haltOnFailure=True,
|
||||
command=["ietf/manage.py", "test", "--settings=settings_sqlitetest"],
|
||||
command=["ietf/manage.py", "test", "--settings=settings_sqlitetest", "--skip-coverage"],
|
||||
))
|
||||
|
||||
c['builders'].append(BuilderConfig(name="Test Suite (OS X)", factory=factory,
|
||||
c['builders'].append(BuilderConfig(name="Test Suite (OS X)", factory=factory, category="1. trunk",
|
||||
slavenames=["datatracker_osx_py27_4"]))
|
||||
c['builders'].append(BuilderConfig(name="[branch] Test Suite (OS X)", factory=factory, category="2. branch",
|
||||
slavenames=["datatracker_osx_py27_4"]))
|
||||
c['builders'].append(BuilderConfig(name="[personal] Test Suite (OS X)", factory=factory, category="3. personal",
|
||||
slavenames=["datatracker_osx_py27_4"]))
|
||||
|
||||
|
||||
|
@ -283,7 +330,7 @@ factory.addStep(ShellCommand(
|
|||
"propset", "--revprop", "-r", Property('got_revision'), "test:crawler", "passed" ],
|
||||
))
|
||||
|
||||
c['builders'].append(BuilderConfig(name="Test-Crawler", factory=factory,
|
||||
c['builders'].append(BuilderConfig(name="Test-Crawler", factory=factory, category="1. trunk",
|
||||
slavenames=["datatracker_lin_py27_1", ]))
|
||||
|
||||
|
||||
|
@ -295,7 +342,7 @@ c['builders'].append(BuilderConfig(name="Test-Crawler", factory=factory,
|
|||
|
||||
c['status'] = []
|
||||
|
||||
from buildbot.status import html
|
||||
from buildbot.status import html, mail
|
||||
from buildbot.status.web import authz, auth
|
||||
|
||||
authz_cfg=authz.Authz(
|
||||
|
@ -323,6 +370,22 @@ trac_template_loaders = [jinja2.FileSystemLoader(os.path.join(os.getcwd(), 'trac
|
|||
c['status'].append(html.WebStatus(http_port=8011, jinja_loaders=trac_template_loaders,
|
||||
authz=authz_cfg))
|
||||
|
||||
# Email notifications
|
||||
from zope.interface import implements
|
||||
from buildbot import interfaces
|
||||
|
||||
class UsernameIsEmailAddress():
|
||||
"This IEmailLookup provider assumes that the svn username is a valid email address."
|
||||
implements(interfaces.IEmailLookup)
|
||||
def getAddress(self, name):
|
||||
return name
|
||||
|
||||
c['status'].append(mail.MailNotifier(
|
||||
builders = ['Check Pyflakes', 'Test Suite', 'Test-Crawler', ],
|
||||
fromaddr='buildbot@tools.ietf.org',
|
||||
extraRecipients=['henrik@levkowetz.com',],
|
||||
lookup=UsernameIsEmailAddress(),
|
||||
))
|
||||
|
||||
####### PROJECT IDENTITY
|
||||
|
||||
|
|
Loading…
Reference in a new issue