diff --git a/buildbot/masters/datatracker/master.cfg b/buildbot/masters/datatracker/master.cfg index 59c158325..1dd6acd0b 100644 --- a/buildbot/masters/datatracker/master.cfg +++ b/buildbot/masters/datatracker/master.cfg @@ -8,7 +8,7 @@ from buildbot_passwords import * # a shorter alias to save typing. c = BuildmasterConfig = {} -####### BUILDSLAVES +# -*- section BuildSlaves -*- # The 'slaves' list defines the set of recognized buildslaves. Each element is # a BuildSlave object, specifying a unique slave name and password. The same @@ -19,6 +19,7 @@ c['slaves'] = [ BuildSlave("datatracker_lin_py27_2", datatracker_lin_py27_2_pw), BuildSlave("datatracker_lin_py27_3", datatracker_lin_py27_3_pw), BuildSlave("datatracker_osx_py27_4", datatracker_osx_py27_4_pw), + BuildSlave("datatracker_lin_py27_5", datatracker_lin_py27_5_pw), ] # 'protocols' contains information about protocols which master will use for @@ -30,6 +31,7 @@ c['slaves'] = [ c['protocols'] = {'pb': {'host':'zinfandel.tools.ietf.org', 'port': 9989}} ####### CHANGESOURCES +# -*- section ChangeSources -*- # the 'change_source' setting tells the buildmaster how it should find out # about source code changes. @@ -46,12 +48,14 @@ c['change_source'] = [ ] ####### SCHEDULERS +# -*- section Schedulers -*- # Configure the Schedulers, which decide how to react to incoming changes. In this # case, just kick off a 'runtests' build from buildbot.schedulers.basic import SingleBranchScheduler, AnyBranchScheduler from buildbot.schedulers.forcesched import ForceScheduler +from buildbot.schedulers.timed import Nightly from buildbot.changes import filter c['schedulers'] = [ # Branch schedulers @@ -77,6 +81,8 @@ c['schedulers'] = [ 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/.*')), + # Periodic Schedulers + Nightly(name="lin_test_libs", hour=16, minute=42, branch="trunk", builderNames=["Verify Latest Libs"],), # Force schedulers ForceScheduler(name="Force PyFlakes", builderNames=["Check PyFlakes"]), ForceScheduler(name="Force Test Suite", builderNames=["Test Suite"]), @@ -93,6 +99,7 @@ c['schedulers'] = [ ] ####### BUILDERS +# -*- section Builders -*- # The 'builders' list defines the Builders, which tell Buildbot how to perform a build: # what steps, and which slaves can execute them. Note that any particular build will @@ -195,7 +202,8 @@ class UnitTest(WarningCountingShellCommand): c['builders'] = [] -# --- Run pyflakes --- +# -*- section Builder_Run_pyflakes -*- + factory = BuildFactory() factory.addStep(SVN( username='buildbot@tools.ietf.org', @@ -231,7 +239,8 @@ c['builders'].append(BuilderConfig(name="[branch] Check PyFlakes", factory=facto 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 --- +# -*- section Builder_TestSuite -*- + factory = BuildFactory() factory.addStep(SVN( username='buildbot@tools.ietf.org', @@ -251,7 +260,7 @@ 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", "--verbosity=2", ], )) # This should be the last action factory.addStep(ShellCommand( @@ -269,8 +278,15 @@ c['builders'].append(BuilderConfig(name="[personal] Test Suite", factory=factory slavenames=["datatracker_lin_py27_1", "datatracker_lin_py27_2", "datatracker_lin_py27_3"])) -# --- Run tests on os-x --- +# -*- section Builder_TestSuiteOSX -*- + factory = BuildFactory() +factory.addStep(ShellCommand( + descriptionDone="svn cleanup", + workdir=Interpolate('build/%(src::branch)s'), + haltOnFailure=True, + command=["svn", "cleanup"], + )) factory.addStep(SVN( username='buildbot@tools.ietf.org', descriptionDone="svn update", @@ -289,7 +305,7 @@ factory.addStep(ShellCommand( factory.addStep(UnitTest( workdir=Interpolate('build/%(src::branch)s'), haltOnFailure=True, - command=["ietf/manage.py", "test", "--settings=settings_sqlitetest", "--skip-coverage"], + command=["ietf/manage.py", "test", "--settings=settings_sqlitetest", "--skip-coverage", "--verbosity=2", ], )) c['builders'].append(BuilderConfig(name="Test Suite (OS X)", factory=factory, category="1. trunk", @@ -300,7 +316,8 @@ c['builders'].append(BuilderConfig(name="[personal] Test Suite (OS X)", factory= slavenames=["datatracker_osx_py27_4"])) -# --- Run test-crawler --- +# -*- section Builder_TestCrawler -*- + factory = BuildFactory() factory.addStep(SVN( username='buildbot@tools.ietf.org', @@ -334,7 +351,48 @@ c['builders'].append(BuilderConfig(name="Test-Crawler", factory=factory, categor slavenames=["datatracker_lin_py27_1", ])) +# -*- section Builder_Dependencies -*- + +# This build runs pip install --upgrade, to make sure that we install the latest version of all +# dependencies, in order to get an indication if/when an incompatibility turns up with a new +# version of a dependency. The other test suite builders *don't* use --upgrade, in order to not +# change the external test conditions and produce spurious errors because of version changes in +# dependencies. + +factory = BuildFactory() +factory.addStep(SVN( + username='buildbot@tools.ietf.org', + descriptionDone="svn update", + workdir=Interpolate('build/%(src::branch)s'), + haltOnFailure=True, + repourl=Interpolate('https://svn.tools.ietf.org/svn/tools/ietfdb/%(src::branch:~trunk)s'), + descriptionSuffix=[Interpolate('%(src::branch)s %(src::revision)s')], + )) +factory.addStep(RemovePYCs(workdir=Interpolate('build/%(src::branch)s'))) +factory.addStep(ShellCommand( + descriptionDone="install/upgrade requirements", + workdir=Interpolate('build/%(src::branch)s'), + haltOnFailure=True, + command=["pip", "install", "--upgrade", "-r", "requirements.txt"], + )) +factory.addStep(ShellCommand( + descriptionDone="list installed pyton modules", + workdir=Interpolate('build/%(src::branch)s'), + haltOnFailure=True, + command=["pip", "list"], + )) +factory.addStep(UnitTest( + workdir=Interpolate('build/%(src::branch)s'), + haltOnFailure=True, + command=["ietf/manage.py", "test", "--settings=settings_sqlitetest", "--verbosity=2", ], + )) + +c['builders'].append(BuilderConfig(name="Verify Latest Libs", factory=factory, category="1. trunk", + slavenames=["datatracker_lin_py27_5"])) + + ####### STATUS TARGETS +# -*- section StatusTargets -*- # 'status' is a list of Status Targets. The results of each build will be # pushed to these targets. buildbot/status/*.py has a variety to choose from, @@ -381,13 +439,20 @@ class UsernameIsEmailAddress(): return name c['status'].append(mail.MailNotifier( - builders = ['Check Pyflakes', 'Test Suite', 'Test-Crawler', ], fromaddr='buildbot@tools.ietf.org', + sendToInterestedUsers=False, extraRecipients=['henrik@levkowetz.com',], + mode="problem", + )) + +c['status'].append(mail.MailNotifier( + fromaddr='buildbot@tools.ietf.org', lookup=UsernameIsEmailAddress(), + mode="problem", )) ####### PROJECT IDENTITY +# -*- section Project -*- # the 'title' string will appear at the top of this buildbot # installation's html.WebStatus home page (linked to the