← Back to team overview

yade-dev team mailing list archive

[Branch ~yade-dev/yade/trunk] Rev 2713: Added buildbot master.cfg file in scripts dir

 

------------------------------------------------------------
revno: 2713
committer: remche <remche@solveig>
branch nick: yade
timestamp: Mon 2011-02-07 15:50:22 +0100
message:
  Added buildbot master.cfg file in scripts dir
added:
  scripts/master.cfg


--
lp:yade
https://code.launchpad.net/~yade-dev/yade/trunk

Your team Yade developers is subscribed to branch lp:yade.
To unsubscribe from this branch go to https://code.launchpad.net/~yade-dev/yade/trunk/+edit-subscription
=== added file 'scripts/master.cfg'
--- scripts/master.cfg	1970-01-01 00:00:00 +0000
+++ scripts/master.cfg	2011-02-07 14:50:22 +0000
@@ -0,0 +1,255 @@
+# -*- python -*-
+# ex: set syntax=python:
+
+# This is a sample buildmaster config file. It must be installed as
+# 'master.cfg' in your buildmaster's base directory (although the filename
+# can be changed with the --basedir option to 'mktap buildbot master').
+
+# It has one job: define a dictionary named BuildmasterConfig. This
+# dictionary has a variety of keys to control different aspects of the
+# buildmaster. They are documented in docs/config.xhtml .
+
+
+# This is the dictionary that the buildmaster pays attention to. We also use
+# a shorter alias to save typing.
+c = BuildmasterConfig = {}
+
+####### BUILDSLAVES
+
+# the 'slaves' list defines the set of allowable buildslaves. Each element is
+# a BuildSlave object, which is created with bot-name, bot-password.  These
+# correspond to values given to the buildslave's mktap invocation.
+from buildbot.buildslave import BuildSlave
+c['slaves'] = [BuildSlave("r0calcul5", "1MotDePasse!"),
+               BuildSlave("r0calcul6", "1MotDePasse!"),
+               BuildSlave("r0calcul7", "1MotDePasse!"),
+               BuildSlave("r0calcul8", "1MotDePasse!"),
+               BuildSlave("r0calcul9", "1MotDePasse!"),
+               BuildSlave("r0calcul10", "1MotDePasse!")]
+
+c['slavePortnum'] = 9989
+
+####### CHANGESOURCES
+#bm = {'lp:yade' : 'defaultBranch' }
+from buildbot.changes.mail import BzrLaunchpadEmailMaildirSource
+c['change_source'] = BzrLaunchpadEmailMaildirSource("/var/lib/buildbot/Maildir",
+                                                    defaultBranch = None)
+
+
+####### SCHEDULERS
+
+## configure the Schedulers
+
+from buildbot.scheduler import Scheduler, Nightly
+c['schedulers'] = []
+c['schedulers'].append(Scheduler(name="full", branch=None,
+                                 treeStableTimer=5*60,
+                                 builderNames=["yade-full"]))
+
+c['schedulers'].append(Nightly(name="nightly", branch=None,
+                                 hour=01,minute=23,
+                                 builderNames=["yade-full"]))
+
+
+#c['schedulers'].append(Nightly(name="nightly", branch=None,
+#                                 hour=16,minute=55,
+#                                 builderNames=["yade-full-test"]))
+
+#c['schedulers'].append(Nightly(name="lucid64", branch=None,
+#                                 hour=01,minute=23,
+#                                 builderNames=["yade-full-lucid64"]))
+
+####### BUILDERS
+
+# the 'builders' list defines the Builders. Each one is configured with a
+# dictionary, using the following keys:
+#  name (required): the name used to describe this builder
+#  slavename (required): which slave to use (must appear in c['bots'])
+#  builddir (required): which subdirectory to run the builder in
+#  factory (required): a BuildFactory to define how the build is run
+#  periodicBuildTime (optional): if set, force a build every N seconds
+
+from buildbot.process import factory
+from buildbot.process.properties import WithProperties
+from buildbot.steps.source import Bzr
+from buildbot.steps.python_twisted import Trial
+from buildbot.steps.shell import Compile
+from buildbot.steps.shell import ShellCommand, RemoteCommand
+from buildbot.steps.shell import Test
+from buildbot.steps.transfer import DirectoryUpload, FileUpload
+from buildbot.steps.master import MasterShellCommand
+
+## nextSlave : choose the best buildslave
+## we use nagios probe do determine which hosts is the bets.
+import os
+import subprocess
+
+
+def nextSlave(builder, slaves):
+    best = 0
+    for slave in slaves:
+        print slave
+        mem = float(subprocess.Popen(["/usr/local/bin/check_nrpe", "-H", slave.slave.slavename, "-c", "check_freemem"],
+                    stdout=subprocess.PIPE).communicate()[0].split()[2].lstrip("(").rstrip("M)"))
+        load = float(subprocess.Popen(["/usr/local/bin/check_nrpe", "-H", slave.slave.slavename, "-c", "check_load_buildbot"],
+                    stdout=subprocess.PIPE).communicate()[0].split()[1].rstrip(',')) + 0.01
+        score = mem/load
+        if score > best :
+            best = score
+            selected = slave
+    return selected
+
+
+bzrurl = "lp:yade"
+
+f1 = factory.BuildFactory()
+prefix = "/var/lib/buildbot/yade/yade-full"
+f1.addStep(Bzr(repourl=bzrurl, mode="update"))
+f1.addStep(Compile(command=["scons", "features=opengl,gts,openmp,vtk,qt4,cgal,log4cxx",
+            "chunkSize=20", "jobs=4", "PREFIX=" + prefix]))
+f1.addStep(Test(command=[WithProperties(prefix + "/bin/yade-bzr%(got_revision)s"), "--test"]))
+f1.addStep(Test(command=[WithProperties(prefix + "/bin/yade-bzr%(got_revision)s"), "--checks"], 
+			description="checking", descriptionDone="checks done"))
+# doc
+wdir = prefix + "/build/doc/sphinx/"
+texdir = wdir+"_build/latex/"
+f1.addStep(ShellCommand(workdir=wdir, env={'PYTHONPATH':wdir},
+                        command=[WithProperties(prefix + "/bin/yade-bzr%(got_revision)s"), "yadeSphinx.py"],
+                       description="compiling html doc", descriptionDone="html doc", haltOnFailure=True))
+f1.addStep(ShellCommand(workdir= texdir, command=["xelatex", "Yade.tex"],
+                        description="compiling pdf doc", descriptionDone="pdf doc", haltOnFailure=True))
+f1.addStep(DirectoryUpload(slavesrc="doc/sphinx/_build/html",
+                           masterdest=WithProperties("/var/www/doc")))
+f1.addStep(DirectoryUpload(slavesrc="doc/sphinx/_build/html",
+                           masterdest=WithProperties("/var/www/doc/%(got_revision)s")))
+f1.addStep(FileUpload(slavesrc=texdir+"Yade.pdf",
+                      masterdest="/var/www/doc/Yade.pdf"))
+f1.addStep(MasterShellCommand(command="chmod -R a-x+rX /var/www/doc"))
+# clean
+f1.addStep(ShellCommand(command=["rm","-rf", WithProperties(prefix + "/build-bzr%(got_revision)s"),
+                                WithProperties(prefix + "/bin/yade-bzr%(got_revision)s"),
+                                WithProperties(prefix + "/bin/yade-bzr%(got_revision)s-batch"),
+                                WithProperties(prefix + "/lib/yade-bzr%(got_revision)s")],
+                        alwaysRun=True,
+                        description="cleaning", descriptionDone="clean"))
+
+b1 = {'name': "yade-full",
+      'slavenames': ["r0calcul5", "r0calcul8", "r0calcul9", "r0calcul10"],
+      'builddir': "yade-full",
+      'factory': f1,
+      'nextSlave': nextSlave,
+      }
+
+#b1-test =   {'name': "yade-full-test",
+#            'slavenames': ["r0calcul5", "r0calcul8", "r0calcul9", "r0calcul10"],
+#            'builddir': "yade-full-test",
+#            'factory': f2,
+#            'nextSlave': nextSlave,
+#            }
+#
+
+c['builders'] = [b1]
+
+
+####### STATUS TARGETS
+
+# '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,
+# including web pages, email senders, and IRC bots.
+
+c['status'] = []
+
+# Use allowForce=True (boolean, not a string. ie: not 'True') to allow
+# Forcing Builds in the Web User Interface. The default is False.
+# from buildbot.status import html
+# c['status'].append(html.WebStatus(http_port=8010,allowForce=True))
+
+from buildbot.status import html
+c['status'].append(html.WebStatus(http_port=8010))
+
+from zope.interface import implements
+from buildbot.interfaces import IEmailLookup
+import re
+class MailLookup():
+    implements(IEmailLookup)
+
+    def getAddress(self,user):
+        found = set()
+        mailsrch =  re.compile("[a-zA-Z0-9\.\_\%\-\+]+@[a-zA-Z0-9\.\_\%\-]+.[a-zA-Z]{2,6}")
+        found.update(mailsrch.findall(user))
+        if len(found) : return found.pop()
+        else : return None
+
+email_lookup = MailLookup()
+
+from buildbot.status import mail
+c['status'].append(mail.MailNotifier(fromaddr="buildbot@xxxxxxxxxxxx",
+                                     extraRecipients=["remi.cailletaud@xxxxxxxxxxx"],
+                                     sendToInterestedUsers=True, lookup=email_lookup))
+
+c['status'].append(mail.MailNotifier(fromaddr="buildbot@xxxxxxxxxxxx",
+                                     mode="failing",
+                                     extraRecipients=["yade-dev@xxxxxxxxxxxxxxxxxxx"],
+                                     sendToInterestedUsers=False))
+
+from buildbot.status import words
+irc = words.IRC("chat.eu.freenode.net", "ybb",
+                channels=["#yade-dev"],
+                port=8000,
+                password="1MotDePasse!",
+                notify_events={
+                'started': 1,
+                'finished': 1,
+                'exception': 1,
+                'successToFailure': 1,
+                'failureToSuccess': 1,
+                })
+c['status'].append(irc)
+
+
+#c['status'].append(mail.MailNotifier(fromaddr="buildbot@xxxxxxxxxxxx",builders=["yade-full-test"],
+#                                     extraRecipients=["remi.cailletaud@xxxxxxxxxxx"],
+#                                     sendToInterestedUsers=True))
+
+
+# from buildbot.status import client
+# c['status'].append(client.PBListener(9988))
+
+
+####### DEBUGGING OPTIONS
+
+# if you set 'debugPassword', then you can connect to the buildmaster with
+# the diagnostic tool in contrib/debugclient.py . From this tool, you can
+# manually force builds and inject changes, which may be useful for testing
+# your buildmaster without actually committing changes to your repository (or
+# before you have a functioning 'sources' set up). The debug tool uses the
+# same port number as the slaves do: 'slavePortnum'.
+
+#c['debugPassword'] = "debugpassword"
+
+# if you set 'manhole', you can ssh into the buildmaster and get an
+# interactive python shell, which may be useful for debugging buildbot
+# internals. It is probably only useful for buildbot developers. You can also
+# use an authorized_keys file, or plain telnet.
+#from buildbot import manhole
+#c['manhole'] = manhole.PasswordManhole("tcp:9999:interface=127.0.0.1",
+#                                       "admin", "password")
+
+
+####### PROJECT IDENTITY
+
+# the 'projectName' string will be used to describe the project that this
+# buildbot is working on. For example, it is used as the title of the
+# waterfall HTML page. The 'projectURL' string will be used to provide a link
+# from buildbot HTML pages to your project's home page.
+
+c['projectName'] = "Yade"
+c['projectURL'] = "http://yade-dem.org";
+
+# the 'buildbotURL' string should point to the location where the buildbot's
+# internal web server (usually the html.Waterfall page) is visible. This
+# typically uses the port number set in the Waterfall 'status' entry, but
+# with an externally-visible host name which the buildbot cannot figure out
+# without some help.
+
+c['buildbotURL'] = "http://yade-dem.org/buildbot/";


Follow ups