[jhbuild] [builbot] add support for the nightly scheduler (GNOME bug 591231)
- From: Frederic Peters <fpeters src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [jhbuild] [builbot] add support for the nightly scheduler (GNOME bug 591231)
- Date: Fri, 27 Nov 2009 14:11:05 +0000 (UTC)
commit 0f4548721255ac5172bc0cc55c5484710da0ac6b
Author: Frédéric Péters <fpeters 0d be>
Date: Fri Nov 27 15:08:22 2009 +0100
[builbot] add support for the nightly scheduler (GNOME bug 591231)
A slave can be set to use that scheduler from its configuration file, from
/config/scheduler:
<config>
<scheduler>nightly</scheduler>
</config>
And there is support for all buildbot nightly scheduler keywords (minute,
hour, dayOfWeek, month, dayOfMonth); to get a build started every xx:06:
<nightly_scheduler>
<minute>6</minute>
</nightly_scheduler>
jhbuild/buildbot/scheduler.py | 35 +++++++++++++++++++++++++++++++++--
jhbuild/commands/bot.py | 33 ++++++++++++++++++++++++++++++---
2 files changed, 63 insertions(+), 5 deletions(-)
---
diff --git a/jhbuild/buildbot/scheduler.py b/jhbuild/buildbot/scheduler.py
index 4c3749a..d7dc242 100644
--- a/jhbuild/buildbot/scheduler.py
+++ b/jhbuild/buildbot/scheduler.py
@@ -23,7 +23,7 @@ from twisted.application import service, internet
from twisted.python import log
from twisted.internet import reactor
-from buildbot.scheduler import Periodic, BaseUpstreamScheduler, Scheduler
+from buildbot.scheduler import Periodic, BaseUpstreamScheduler, Scheduler, Nightly
from buildbot.sourcestamp import SourceStamp
from buildbot import buildset, util
@@ -33,6 +33,14 @@ def SerialScheduler(name, project, builderNames, periodicBuildTimer=60*60*12,
return StartSerial(name, project, builderNames, periodicBuildTimer, branch)
return Serial(name, project, upstream, builderNames, branch)
+def NightlySerialScheduler(name, project, builderNames,
+ minute=0, hour='*', dayOfMonth='*', month='*', dayOfWeek='*',
+ upstream=None, branch=None):
+ if not upstream:
+ return NightlyStartSerial(name, project, builderNames,
+ minute, hour, dayOfMonth, month, dayOfWeek, branch)
+ return Serial(name, project, upstream, builderNames, branch)
+
class OnCommitScheduler(Scheduler):
'''
@@ -70,7 +78,6 @@ class OnCommitScheduler(Scheduler):
else:
self.addUnimportantChange(change)
-
class StartSerial(Periodic):
def __init__(self, name, project, builderNames, periodicBuildTimer,
@@ -140,3 +147,27 @@ class Serial(BaseUpstreamScheduler):
bs = buildset.BuildSet(self.builderNames, SourceStamp(branch=self.branch))
self.submitBuildSet(bs)
+
+class NightlyStartSerial(Nightly):
+ def __init__(self, name, project, builderNames,
+ minute=0, hour='*', dayOfMonth='*', month='*', dayOfWeek='*',
+ branch=None):
+ Nightly.__init__(self, name, builderNames, minute, hour, dayOfMonth,
+ month, dayOfWeek, branch)
+ self.project = project
+ self.finishedWatchers = []
+
+ def subscribeToFinishedBuilds(self, watcher):
+ self.finishedWatchers.append(watcher)
+
+ def unsubscribeToFinishedBuilds(self, watcher):
+ self.finishedWatchers.remove(watcher)
+
+ def buildSetFinished(self, bss):
+ if not self.running:
+ return
+ ss = bss.getSourceStamp()
+ for w in self.finishedWatchers:
+ w(ss)
+ Nightly.buildSetFinished(self,bss)
+
diff --git a/jhbuild/commands/bot.py b/jhbuild/commands/bot.py
index 8996056..db3de5b 100644
--- a/jhbuild/commands/bot.py
+++ b/jhbuild/commands/bot.py
@@ -279,6 +279,7 @@ class cmd_bot(Command):
version = None
max_builds = 2
+ scheduler = None
run_checks = True
run_coverage_report = False
@@ -296,6 +297,12 @@ class cmd_bot(Command):
for attribute in ('config/max_builds', 'config/missing_timeout',
'config/run_checks', 'config/run_coverage_report',
'config/run_clean_afterwards',
+ 'config/scheduler',
+ 'nightly_scheduler/minute',
+ 'nightly_scheduler/hour',
+ 'nightly_scheduler/dayOfMonth',
+ 'nightly_scheduler/month',
+ 'nightly_scheduler/dayOfWeek',
'info/contact_name', 'info/contact_email',
'info/url', 'info/distribution', 'info/architecture',
'info/version'):
@@ -303,6 +310,7 @@ class cmd_bot(Command):
try:
value = cfg.find(attribute).text
except AttributeError:
+ print 'FAILED 1'
continue
if attr_name in ('max_builds', 'missing_timeout'): # int value
@@ -314,8 +322,20 @@ class cmd_bot(Command):
if attr_name in ('run_checks', 'run_coverage_report', 'run_clean_afterwards'):
value = (value == 'yes')
+ if attr_name in ('minute', 'hour', 'dayOfMonth', 'month', 'dayOfWeek'):
+ try:
+ value = int(value)
+ except ValueError:
+ value = '*'
+
setattr(self, attr_name, value)
+ if self.scheduler == 'nightly':
+ self.nightly_kwargs = {}
+ for attr_name in ('minute', 'hour', 'dayOfMonth', 'month', 'dayOfWeek'):
+ if hasattr(self, attr_name):
+ self.nightly_kwargs[attr_name] = getattr(self, attr_name)
+
class JhBuildMaster(BuildMaster):
jhbuild_config = config
def loadConfig(self, f):
@@ -389,14 +409,21 @@ class cmd_bot(Command):
config['change_source'] = PBChangeSource()
# Schedulers
- from jhbuild.buildbot.scheduler import SerialScheduler, OnCommitScheduler
+ from jhbuild.buildbot.scheduler import SerialScheduler, NightlySerialScheduler, OnCommitScheduler
config['schedulers'] = []
for slave in config['slaves']:
s = None
for project in config['projects']:
buildername = str('%s-%s' % (project, slave.slavename))
- s = SerialScheduler(buildername, project, upstream=s,
- builderNames=[buildername])
+ scheduler_kwargs = {}
+ if slave.scheduler == 'nightly':
+ scheduler_class = NightlySerialScheduler
+ scheduler_kwargs = slave.nightly_kwargs
+ else:
+ scheduler_class = SerialScheduler
+ s = scheduler_class(buildername, project, upstream=s,
+ builderNames=[buildername],
+ **scheduler_kwargs)
config['schedulers'].append(s)
if self.jhbuild_config.jhbuildbot_svn_commits_box:
# schedulers that will launch job when receiving
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]