diff options
| author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-08-05 16:22:51 +0000 |
|---|---|---|
| committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-08-05 16:22:51 +0000 |
| commit | cf46733632c7279a9fd0fe6ce26f9185a4ae82a9 (patch) | |
| tree | da27775a2161723ef342e91af41a8b51fedef405 /tools/buildbot/master | |
| parent | bb0ef45f7c46b0ae221b26265ef98a768c33f820 (diff) | |
| download | subversion-tarball-master.tar.gz | |
subversion-1.9.7HEADsubversion-1.9.7master
Diffstat (limited to 'tools/buildbot/master')
| -rw-r--r-- | tools/buildbot/master/Feeder.py | 391 | ||||
| -rw-r--r-- | tools/buildbot/master/README | 7 | ||||
| -rw-r--r-- | tools/buildbot/master/SVNMailNotifier.py | 210 | ||||
| -rw-r--r-- | tools/buildbot/master/master.cfg | 258 | ||||
| -rw-r--r-- | tools/buildbot/master/private-sample.py | 32 | ||||
| -rw-r--r-- | tools/buildbot/master/public_html/buildbot.css | 68 | ||||
| -rw-r--r-- | tools/buildbot/master/public_html/index.html | 53 | ||||
| -rw-r--r-- | tools/buildbot/master/public_html/robots.txt | 9 |
8 files changed, 7 insertions, 1021 deletions
diff --git a/tools/buildbot/master/Feeder.py b/tools/buildbot/master/Feeder.py deleted file mode 100644 index 59e79b9..0000000 --- a/tools/buildbot/master/Feeder.py +++ /dev/null @@ -1,391 +0,0 @@ -# -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# -# This file is part of the Buildbot configuration for the Subversion project. -# The original file was created by Lieven Govaerts -# -# Minor changes made by API (apinheiro@igalia.com) in order to fit with our -# configuration and last buildbot changes -# -# Minor whitespace clean up, clean up imports, adapted to buildbot 0.7.7, -# and finally attempt to create valid atom and RSS feeds. -# Changes by Chandan-Dutta Chowdhury <chandan-dutta chowdhury @ hp com> and -# Gareth Armstrong <gareth armstrong @ hp com> -# Also integrate changes from -# http://code.google.com/p/pybots/source/browse/trunk/master/Feeder.py -# which adds ability to filter RSS feeds to specific builders. -# e.g. http://localhost:8012/rss?builder=builder-log4c-rhel-4-i386 - -import time -import os -import re -import sys - -from twisted.web.resource import Resource - -from buildbot.status.web import baseweb -from buildbot.status.builder import FAILURE, SUCCESS, WARNINGS - -class XmlResource(Resource): - contentType = "text/xml; charset=UTF-8" - def render(self, request): - data = self.content(request) - request.setHeader("content-type", self.contentType) - if request.method == "HEAD": - request.setHeader("content-length", len(data)) - return '' - return data - docType = '' - def header (self, request): - data = ('<?xml version="1.0"?>\n') - return data - def footer(self, request): - data = '' - return data - def content(self, request): - data = self.docType - data += self.header(request) - data += self.body(request) - data += self.footer(request) - return data - def body(self, request): - return '' - -class FeedResource(XmlResource): - title = 'Dummy' - link = 'http://dummylink' - language = 'en-us' - description = 'Dummy rss' - status = None - - def __init__(self, status, categories=None): - self.status = status - self.categories = categories - self.link = self.status.getBuildbotURL() - self.title = 'Build status of ' + status.getProjectName() - self.description = 'List of FAILED builds' - self.pubdate = time.gmtime(int(time.time())) - - def getBuilds(self, request): - builds = [] - # THIS is lifted straight from the WaterfallStatusResource Class in - # status/web/waterfall.py - # - # we start with all Builders available to this Waterfall: this is - # limited by the config-file -time categories= argument, and defaults - # to all defined Builders. - allBuilderNames = self.status.getBuilderNames(categories=self.categories) - builders = [self.status.getBuilder(name) for name in allBuilderNames] - - # but if the URL has one or more builder= arguments (or the old show= - # argument, which is still accepted for backwards compatibility), we - # use that set of builders instead. We still don't show anything - # outside the config-file time set limited by categories=. - showBuilders = request.args.get("show", []) - showBuilders.extend(request.args.get("builder", [])) - if showBuilders: - builders = [b for b in builders if b.name in showBuilders] - - # now, if the URL has one or category= arguments, use them as a - # filter: only show those builders which belong to one of the given - # categories. - showCategories = request.args.get("category", []) - if showCategories: - builders = [b for b in builders if b.category in showCategories] - - maxFeeds = 25 - - # Copy all failed builds in a new list. - # This could clearly be implemented much better if we had - # access to a global list of builds. - for b in builders: - lastbuild = b.getLastFinishedBuild() - if lastbuild is None: - continue - - lastnr = lastbuild.getNumber() - - totalbuilds = 0 - i = lastnr - while i >= 0: - build = b.getBuild(i) - i -= 1 - if not build: - continue - - results = build.getResults() - - # only add entries for failed builds! - if results == FAILURE: - totalbuilds += 1 - builds.append(build) - - # stop for this builder when our total nr. of feeds is reached - if totalbuilds >= maxFeeds: - break - - # Sort build list by date, youngest first. - if sys.version_info[:3] >= (2,4,0): - builds.sort(key=lambda build: build.getTimes(), reverse=True) - else: - # If you need compatibility with python < 2.4, use this for - # sorting instead: - # We apply Decorate-Sort-Undecorate - deco = [(build.getTimes(), build) for build in builds] - deco.sort() - deco.reverse() - builds = [build for (b1, build) in deco] - - if builds: - builds = builds[:min(len(builds), maxFeeds)] - return builds - - def body (self, request): - data = '' - builds = self.getBuilds(request) - - for build in builds: - start, finished = build.getTimes() - finishedTime = time.gmtime(int(finished)) - projectName = self.status.getProjectName() - link = re.sub(r'index.html', "", self.status.getURLForThing(build)) - - # title: trunk r862265 (plus patch) failed on 'i686-debian-sarge1 shared gcc-3.3.5' - ss = build.getSourceStamp() - source = "" - if ss.branch: - source += "Branch %s " % ss.branch - if ss.revision: - source += "Revision %s " % str(ss.revision) - if ss.patch: - source += " (plus patch)" - if ss.changes: - pass - if (ss.branch is None and ss.revision is None and ss.patch is None - and not ss.changes): - source += "Latest revision " - got_revision = None - try: - got_revision = build.getProperty("got_revision") - except KeyError: - pass - if got_revision: - got_revision = str(got_revision) - if len(got_revision) > 40: - got_revision = "[revision string too long]" - source += "(Got Revision: %s)" % got_revision - title = ('%s failed on "%s"' % - (source, build.getBuilder().getName())) - - # get name of the failed step and the last 30 lines of its log. - if build.getLogs(): - log = build.getLogs()[-1] - laststep = log.getStep().getName() - try: - lastlog = log.getText() - except IOError: - # Probably the log file has been removed - lastlog='<b>log file not available</b>' - - lines = re.split('\n', lastlog) - lastlog = '' - for logline in lines[max(0, len(lines)-30):]: - lastlog = lastlog + logline + '<br/>' - lastlog = lastlog.replace('\n', '<br/>') - - description = '' - description += ('Date: %s<br/><br/>' % - time.strftime("%a, %d %b %Y %H:%M:%S GMT", - finishedTime)) - description += ('Full details available here: <a href="%s">%s</a><br/>' % (self.link, projectName)) - builder_summary_link = ('%s/builders/%s' % - (re.sub(r'/index.html', '', self.link), - build.getBuilder().getName())) - description += ('Build summary: <a href="%s">%s</a><br/><br/>' % - (builder_summary_link, - build.getBuilder().getName())) - description += ('Build details: <a href="%s">%s</a><br/><br/>' % - (link, self.link + link[1:])) - description += ('Author list: <b>%s</b><br/><br/>' % - ",".join(build.getResponsibleUsers())) - description += ('Failed step: <b>%s</b><br/><br/>' % laststep) - description += 'Last lines of the build log:<br/>' - - data += self.item(title, description=description, lastlog=lastlog, - link=link, pubDate=finishedTime) - - return data - - def item(self, title='', link='', description='', pubDate=''): - """Generates xml for one item in the feed.""" - -class Rss20StatusResource(FeedResource): - def __init__(self, status, categories=None): - FeedResource.__init__(self, status, categories) - contentType = 'application/rss+xml' - - def header(self, request): - data = FeedResource.header(self, request) - data += ('<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">\n') - data += (' <channel>\n') - if self.title is not None: - data += (' <title>%s</title>\n' % self.title) - if self.link is not None: - data += (' <link>%s</link>\n' % self.link) - link = re.sub(r'/index.html', '', self.link) - data += (' <atom:link href="%s/rss" rel="self" type="application/rss+xml"/>\n' % link) - if self.language is not None: - data += (' <language>%s</language>\n' % self.language) - if self.description is not None: - data += (' <description>%s</description>\n' % self.description) - if self.pubdate is not None: - rfc822_pubdate = time.strftime("%a, %d %b %Y %H:%M:%S GMT", - self.pubdate) - data += (' <pubDate>%s</pubDate>\n' % rfc822_pubdate) - return data - - def item(self, title='', link='', description='', lastlog='', pubDate=''): - data = (' <item>\n') - data += (' <title>%s</title>\n' % title) - if link is not None: - data += (' <link>%s</link>\n' % link) - if (description is not None and lastlog is not None): - lastlog = re.sub(r'<br/>', "\n", lastlog) - lastlog = re.sub(r'&', "&", lastlog) - lastlog = re.sub(r"'", "'", lastlog) - lastlog = re.sub(r'"', """, lastlog) - lastlog = re.sub(r'<', '<', lastlog) - lastlog = re.sub(r'>', '>', lastlog) - lastlog = lastlog.replace('\n', '<br/>') - content = '<![CDATA[' - content += description - content += lastlog - content += ']]>' - data += (' <description>%s</description>\n' % content) - if pubDate is not None: - rfc822pubDate = time.strftime("%a, %d %b %Y %H:%M:%S GMT", - pubDate) - data += (' <pubDate>%s</pubDate>\n' % rfc822pubDate) - # Every RSS item must have a globally unique ID - guid = ('tag:%s@%s,%s:%s' % (os.environ['USER'], - os.environ['HOSTNAME'], - time.strftime("%Y-%m-%d", pubDate), - time.strftime("%Y%m%d%H%M%S", - pubDate))) - data += (' <guid isPermaLink="false">%s</guid>\n' % guid) - data += (' </item>\n') - return data - - def footer(self, request): - data = (' </channel>\n' - '</rss>') - return data - -class Atom10StatusResource(FeedResource): - def __init__(self, status, categories=None): - FeedResource.__init__(self, status, categories) - contentType = 'application/atom+xml' - - def header(self, request): - data = FeedResource.header(self, request) - data += '<feed xmlns="http://www.w3.org/2005/Atom">\n' - data += (' <id>%s</id>\n' % self.status.getBuildbotURL()) - if self.title is not None: - data += (' <title>%s</title>\n' % self.title) - if self.link is not None: - link = re.sub(r'/index.html', '', self.link) - data += (' <link rel="self" href="%s/atom"/>\n' % link) - data += (' <link rel="alternate" href="%s/"/>\n' % link) - if self.description is not None: - data += (' <subtitle>%s</subtitle>\n' % self.description) - if self.pubdate is not None: - rfc3339_pubdate = time.strftime("%Y-%m-%dT%H:%M:%SZ", - self.pubdate) - data += (' <updated>%s</updated>\n' % rfc3339_pubdate) - data += (' <author>\n') - data += (' <name>Build Bot</name>\n') - data += (' </author>\n') - return data - - def item(self, title='', link='', description='', lastlog='', pubDate=''): - data = (' <entry>\n') - data += (' <title>%s</title>\n' % title) - if link is not None: - data += (' <link href="%s"/>\n' % link) - if (description is not None and lastlog is not None): - lastlog = re.sub(r'<br/>', "\n", lastlog) - lastlog = re.sub(r'&', "&", lastlog) - lastlog = re.sub(r"'", "'", lastlog) - lastlog = re.sub(r'"', """, lastlog) - lastlog = re.sub(r'<', '<', lastlog) - lastlog = re.sub(r'>', '>', lastlog) - data += (' <content type="xhtml">\n') - data += (' <div xmlns="http://www.w3.org/1999/xhtml">\n') - data += (' %s\n' % description) - data += (' <pre xml:space="preserve">%s</pre>\n' % lastlog) - data += (' </div>\n') - data += (' </content>\n') - if pubDate is not None: - rfc3339pubDate = time.strftime("%Y-%m-%dT%H:%M:%SZ", - pubDate) - data += (' <updated>%s</updated>\n' % rfc3339pubDate) - # Every Atom entry must have a globally unique ID - # http://diveintomark.org/archives/2004/05/28/howto-atom-id - guid = ('tag:%s@%s,%s:%s' % (os.environ['USER'], - os.environ['HOSTNAME'], - time.strftime("%Y-%m-%d", pubDate), - time.strftime("%Y%m%d%H%M%S", - pubDate))) - data += (' <id>%s</id>\n' % guid) - data += (' <author>\n') - data += (' <name>Build Bot</name>\n') - data += (' </author>\n') - data += (' </entry>\n') - return data - - def footer(self, request): - data = ('</feed>') - return data - -class WebStatusWithFeeds(baseweb.WebStatus): - """Override the standard WebStatus class to add RSS and Atom feeds. - - This adds the following web resources in addition to /waterfall: - /rss - /atom - - The same "branch" and "category" query arguments can be passed - as with /waterfall - e.g. http://mybot.buildbot.com:8012/rss?branch=&builder=builder-log4c-rhel-4-i386 - or - http://mybot.buildbot.com:8012/rss?branch=&category=log4c - """ - - def setupSite(self): - baseweb.WebStatus.setupSite(self) - - status = self.parent.getStatus() - sr = self.site.resource - - rss = Rss20StatusResource(status, categories=None) - sr.putChild("rss", rss) - atom = Atom10StatusResource(status, categories=None) - sr.putChild("atom", atom) - diff --git a/tools/buildbot/master/README b/tools/buildbot/master/README new file mode 100644 index 0000000..35fbff0 --- /dev/null +++ b/tools/buildbot/master/README @@ -0,0 +1,7 @@ +The BuildBot Master is managed by the ASF Infrastructure team. + +This was announced per this email: +https://mail-archives.apache.org/mod_mbox/subversion-dev/201005.mbox/%3CAANLkTilvSpSwJHLlJVpKpGVAI2-JQyGqLqCn1Sjgo-Qf@mail.gmail.com%3E + +The new BuildBot Master configuration is maintained here: +https://svn.apache.org/repos/infra/infrastructure/buildbot/aegis/buildmaster/master1/ diff --git a/tools/buildbot/master/SVNMailNotifier.py b/tools/buildbot/master/SVNMailNotifier.py deleted file mode 100644 index 1dfe839..0000000 --- a/tools/buildbot/master/SVNMailNotifier.py +++ /dev/null @@ -1,210 +0,0 @@ -# -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# -import os -import urllib -import re - -from email.Message import Message -from email.Utils import formatdate -from email.MIMEText import MIMEText - -from twisted.internet import defer -from twisted.application import service - -from buildbot.status.builder import FAILURE, SUCCESS, WARNINGS -from buildbot.status.mail import MailNotifier - -class SVNMailNotifier(MailNotifier): - """Implement custom status mails for the Subversion project""" - - def __init__(self, fromaddr, mode="all", categories=None, builders=None, - addLogs=False, relayhost="localhost", - subject="buildbot %(result)s in %(builder)s", - lookup=None, extraRecipients=[], - sendToInterestedUsers=True, - body="", - replytoaddr=""): - """ - @type body: string - @param body: a string to be used as the body of the message. - - @type replytoaddr: string - @param replytoaddr: the email address to be used in the 'Reply-To' header. - """ - - self.body = body - self.replytoaddr = replytoaddr - - # pass the rest of the parameters to our parent. - MailNotifier.__init__(self, fromaddr, mode, categories, builders, - addLogs, relayhost, subject, lookup, extraRecipients, - sendToInterestedUsers) - - def buildMessage(self, name, build, results): - if self.mode == "all": - intro = "The Buildbot has finished a build of %s.\n" % name - elif self.mode == "failing": - intro = "The Buildbot has detected a failed build of %s.\n" % name - else: - intro = "The Buildbot has detected a new failure of %s.\n" % name - - # buildurl - buildurl = self.status.getURLForThing(build) -# lgo: url's are already quoted now. -# if buildurl: -# buildurl = urllib.quote(buildurl, '/:') - - # buildboturl - buildboturl = self.status.getBuildbotURL() -# if url: -# buildboturl = urllib.quote(url, '/:') - - # reason of build - buildreason = build.getReason() - - # source stamp - patch = None - ss = build.getSourceStamp() - if ss is None: - source = "unavailable" - else: - if build.getChanges(): - revision = max([int(c.revision) for c in build.getChanges()]) - - source = "" - if ss.branch is None: - ss.branch = "trunk" - source += "[branch %s] " % ss.branch - if revision: - source += str(revision) - else: - source += "HEAD" - if ss.patch is not None: - source += " (plus patch)" - - # actual buildslave - buildslave = build.getSlavename() - - # TODO: maybe display changes here? or in an attachment? - - # status - t = build.getText() - if t: - t = ": " + " ".join(t) - else: - t = "" - - if results == SUCCESS: - status = "Build succeeded!\n" - res = "PASS" - elif results == WARNINGS: - status = "Build Had Warnings%s\n" % t - res = "WARN" - else: - status = "BUILD FAILED%s\n" % t - res = "FAIL" - - if build.getLogs(): - log = build.getLogs()[-1] - laststep = log.getStep().getName() - lastlog = log.getText() - - # only give me the last lines of the log files. - lines = re.split('\n', lastlog) - lastlog = '' - for logline in lines[max(0, len(lines)-100):]: - lastlog = lastlog + logline - - # TODO: it would be nice to provide a URL for the specific build - # here. That involves some coordination with html.Waterfall . - # Ideally we could do: - # helper = self.parent.getServiceNamed("html") - # if helper: - # url = helper.getURLForBuild(build) - - text = self.body % { 'result': res, - 'builder': name, - 'revision': revision, - 'branch': ss.branch, - 'blamelist': ",".join(build.getResponsibleUsers()), - 'buildurl': buildurl, - 'buildboturl': buildboturl, - 'reason': buildreason, - 'source': source, - 'intro': intro, - 'status': status, - 'slave': buildslave, - 'laststep': laststep, - 'lastlog': lastlog, - } - - haveAttachments = False - if ss.patch or self.addLogs: - haveAttachments = True - if not canDoAttachments: - log.msg("warning: I want to send mail with attachments, " - "but this python is too old to have " - "email.MIMEMultipart . Please upgrade to python-2.3 " - "or newer to enable addLogs=True") - - if haveAttachments and canDoAttachments: - m = MIMEMultipart() - m.attach(MIMEText(text)) - else: - m = Message() - m.set_payload(text) - - m['Date'] = formatdate(localtime=True) - m['Subject'] = self.subject % { 'result': res, - 'builder': name, - 'revision': revision, - 'branch': ss.branch - } - m['From'] = self.fromaddr - # m['To'] is added later - m['Reply-To'] = self.replytoaddr - - if ss.patch: - a = MIMEText(patch) - a.add_header('Content-Disposition', "attachment", - filename="source patch") - m.attach(a) - if self.addLogs: - for log in build.getLogs(): - name = "%s.%s" % (log.getStep().getName(), - log.getName()) - a = MIMEText(log.getText()) - a.add_header('Content-Disposition', "attachment", - filename=name) - m.attach(a) - - # now, who is this message going to? - dl = [] - recipients = self.extraRecipients[:] - if self.sendToInterestedUsers and self.lookup: - for u in build.getInterestedUsers(): - d = defer.maybeDeferred(self.lookup.getAddress, u) - d.addCallback(recipients.append) - dl.append(d) - d = defer.DeferredList(dl) - d.addCallback(self._gotRecipients, recipients, m) - return d - diff --git a/tools/buildbot/master/master.cfg b/tools/buildbot/master/master.cfg deleted file mode 100644 index 96b0037..0000000 --- a/tools/buildbot/master/master.cfg +++ /dev/null @@ -1,258 +0,0 @@ -# -*- python -*- -# -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# - -import os, os.path, re - -from buildbot.scheduler import Scheduler -from buildbot.process import factory -from buildbot.steps import source, shell -from buildbot.status.html import WebStatus -from buildbot.scheduler import AnyBranchScheduler -#from buildbot.twcompat import implements -from buildbot.scheduler import Try_Userpass -from buildbot.scheduler import Nightly -from buildbot.changes.svnpoller import SVNPoller, split_file_branches -from buildbot.buildslave import BuildSlave - -#import TigrisMailSource -import SVNMailNotifier -from Feeder import WebStatusWithFeeds -import private - -REPO="http://svn.apache.org/repos/asf/subversion/" - -s = factory.s - -# This is the dictionary that the buildmaster pays attention to. We also use -# a shorter alias to save typing. -c = BuildmasterConfig = {} - -# slaves -c['slaves'] = [BuildSlave("fc1-gcc3.3.2-ia32", private.slavePwd), - BuildSlave("osx10.4-gcc4.0.1-ia32", private.slavePwd), - BuildSlave("xp-vs2003-ia32", private.slavePwd), - BuildSlave("dlr-fc3", private.slavePwd), - BuildSlave("eh-debsarge1", private.slavePwd), - BuildSlave("x64-ubuntu", private.hwrightPwd), - BuildSlave("x64-centos", private.wandPwd), -] - -# sources -c['change_source'] = SVNPoller(REPO, - split_file=split_file_branches, - svnbin=private.svnbin, - pollinterval=300) - -excludes = ["COMMITTERS", "STATUS", "CHANGES", "README", "INSTALL", "COPYING", "HACKING", "TRANSLATING", "BUGS", "www", "notes", "packages", "subversion/LICENSE", "subversion/po", "doc", "contrib", "tools", "dist.sh"] - -# function checks if this revision is interesting enough to trigger the builds. -def isImportant(change): - if not excludes: - return True - - for file in change.files: - triggerBuild = True - for pattern in excludes: - match = re.match(pattern, file) - if match: - triggerBuild = False - break - if triggerBuild: - return True - -# schedulers -bs1 = AnyBranchScheduler("main", - [None, "branches/1.3.x", "branches/1.4.x", "branches/1.5.x", - "branches/1.6.x"], - 5*60, ["x86-macosx-gnu shared", - "debian-x86_64-32 shared gcc", - "x64-ubuntu gcc", - "x64-centos gcc", - ], - fileIsImportant=isImportant) - -ps1 = Nightly('daily-2pm-cet', ['x86-macosx-gnu shared daily ra_serf'], hour=14, minute=0) - -ts = Try_Userpass("try", ["x86-macosx-gnu shared", "debian-x86_64-32 shared gcc"], - port=private.tryPort, userpass=[(private.tryUser,private.tryPwd)] ) -c['schedulers'] = [bs1, ps1, ts] - -# steps and builders - -# define default set of steps, all under masters control. -defSteps = [shell.ShellCommand(name="Cleanup", command=["../svnclean.sh"], timeout=3600), - source.SVN(baseURL=REPO,defaultBranch='trunk', timeout=3600), - shell.ShellCommand(name="Build", command=["../svnbuild.sh"], logfiles={"configlog": "config.log"}, timeout=3600, haltOnFailure=True), - shell.ShellCommand(name="Test fsfs+ra_neon", command=["../svncheck.sh", "fsfs", "ra_neon"], logfiles={"testlog": "tests.log"}, timeout=3600, flunkOnFailure=True), - ] - -defFact = factory.BuildFactory(defSteps) - -# define Windows custom steps -winSteps = [source.SVN(baseURL=REPO,defaultBranch='trunk', timeout=3600), - shell.ShellCommand(name="Build", command=["..\svnbuild.bat"], timeout=3600, haltOnFailure=True), - shell.ShellCommand(name="Test fsfs+ra_local", command=["..\svncheck.bat","fsfs","ra_local"], timeout=3600, flunkOnFailure=True), - shell.ShellCommand(name="Test fsfs+ra_dav", command=["..\svncheck.bat","fsfs","ra_dav"], timeout=3600, flunkOnFailure=True), - shell.ShellCommand(name="Test fsfs+ra_svn", command=["..\svncheck.bat","fsfs","ra_svn"], timeout=3600, flunkOnFailure=True), - shell.ShellCommand(name="Cleanup", command=["..\svnclean.bat"], timeout=3600), - ] -winFact = factory.BuildFactory(winSteps) - -# define Windows 6 way steps -win6wSteps = [source.SVN(baseURL=REPO,defaultBranch='trunk', timeout=3600), - shell.ShellCommand(name="Cleanup", command=["..\svnclean.bat"], timeout=3600), - shell.ShellCommand(name="Build", command=["..\svnbuild.bat", "%(branch)"], timeout=3600, haltOnFailure=True), - shell.ShellCommand(name="Test fsfs+ra_local", command=["..\svncheck.bat","fsfs","ra_local"], logfiles={"testlog": "tests.log"}, timeout=3600, flunkOnFailure=True), - ] -win6wFact = factory.BuildFactory(win6wSteps) - -# define set of steps for eh-x84_64-32, clean step comes first. -ehSteps = [shell.ShellCommand(name="Cleanup", command=["../svnclean.sh"], workdir='', timeout=3600), - source.SVN(baseURL=REPO,defaultBranch='trunk', timeout=3600), - shell.ShellCommand(name="Build", command=["../svnbuild.sh"], logfiles={"configlog": "config.log"}, timeout=3600, haltOnFailure=True), - shell.ShellCommand(name="Test fsfs+ra_svn", command=["../svncheck.sh","fsfs","ra_svn"], logfiles={"testlog": "tests.log"}, timeout=3600, flunkOnFailure=True), - ] -ehFact = factory.BuildFactory(ehSteps) - -# nightly build ra_serf -serfSteps = [shell.ShellCommand(name="Cleanup", command=["../svnclean.sh"], timeout=3600), - source.SVN(baseURL=REPO,defaultBranch='trunk', timeout=3600), - shell.ShellCommand(name="Build", command=["../svnbuild.sh"], logfiles={"configlog": "config.log"}, timeout=3600, haltOnFailure=True), - shell.ShellCommand(name="Test fsfs+ra_serf", command=["../svncheck.sh", "fsfs", "ra_serf"], logfiles={"testlog": "tests.log"}, timeout=3600, flunkOnFailure=True), - ] -serfFact = factory.BuildFactory(serfSteps) - -# define set of steps for x64-ubuntu, clean step comes first. -x64ubSteps = [shell.ShellCommand(name="Cleanup", command=["../svnclean.sh"], workdir='', timeout=3600), - source.SVN(baseURL=REPO,defaultBranch='trunk', timeout=3600), - shell.ShellCommand(name="Build", command=["../svnbuild.sh"], logfiles={"configlog": "config.log"}, timeout=3600, haltOnFailure=True), - shell.ShellCommand(name="Test fsfs+ra_local", command=["../svncheck.sh","fsfs","ra_local"], logfiles={"testlog": "tests.log"}, timeout=3600, flunkOnFailure=False), - shell.ShellCommand(name="Test bindings", command=["../svncheck-bindings.sh","fsfs","ra_local"], logfiles={"testlog": "tests.log"}, timeout=3600, flunkOnFailure=True), - ] -x64ubFact = factory.BuildFactory(x64ubSteps) - -x64coSteps = [shell.ShellCommand(name="Cleanup", command=["../svnclean.sh"], timeout=3600), - source.SVN(baseURL=REPO,defaultBranch='trunk', timeout=3600), - shell.ShellCommand(name="Build", command=["../svnbuild.sh"], logfiles={"configlog": "config.log"}, timeout=3600, haltOnFailure=True), - shell.ShellCommand(name="Test fsfs+ra_local", command=["../svncheck.sh", "fsfs", "ra_neon"], logfiles={"testlog": "tests.log"}, timeout=3600, flunkOnFailure=True), - shell.ShellCommand(name="Test bindings", command=["../svncheck-bindings.sh","fsfs","ra_neon"], logfiles={"testlog": "tests.log"}, timeout=3600, flunkOnFailure=True), - ] -x64coFact = factory.BuildFactory(x64coSteps) - - -c['builders'] = [ - {'name': "x86-macosx-gnu shared", - 'slavename': "osx10.4-gcc4.0.1-ia32", - 'builddir': "osx10.4-gcc4.0.1-ia32", - 'factory': defFact, - 'category': "prod", - }, - {'name': "debian-x86_64-32 shared gcc", - 'slavename': "eh-debsarge1", - 'builddir': "eh-debsarge1", - 'factory': ehFact, - 'category': "prod", - }, - {'name': "x86-macosx-gnu shared daily ra_serf", - 'slavename': "osx10.4-gcc4.0.1-ia32", - 'builddir': "osx10.4-gcc4.0.1-ia32-serf", - 'factory': serfFact, - 'category': "prod", - }, - {'name': "x64-ubuntu gcc", - 'slavename': "x64-ubuntu", - 'builddir': "x64-ubuntu", - 'factory': x64ubFact, - 'category': "prod", - }, - {'name': "x64-centos gcc", - 'slavename': "x64-centos", - 'builddir': "x64-centos", - 'factory': x64coFact, - 'category': "prod", - }, -] - -# 'slavePortnum' defines the TCP port to listen on. This must match the value -# configured into the buildslaves (with their --master option) - -c['slavePortnum'] = private.slavePortnum - -# show webpage -c['status'] = [] -c['status'].append(WebStatusWithFeeds(http_port="tcp:"+str(private.htmlPort)+":interface=127.0.0.1", allowForce=True)) - -# send emails -from buildbot.status import mail -mailbody = 'Full details are available at: \n%(buildurl)s\n\n'\ - 'Author list: %(blamelist)s\n\n'\ - 'Build Slave: %(slave)s\n\n\n'\ - 'Subversion Buildbot\n'\ - '%(buildboturl)s\n\n\n'\ - 'Last 100 lines of the build log (step: %(laststep)s ):\n\n %(lastlog)s' - - -c['status'].append(SVNMailNotifier.SVNMailNotifier( - fromaddr="buildbot@mobsol.be", - extraRecipients=["notifications@subversion.apache.org"], - sendToInterestedUsers=False, - subject="svn %(branch)s r%(revision)s: %(result)s (%(builder)s)", - body=mailbody, - replytoaddr="dev@subversion.apache.org", - categories=["prod"], - relayhost=private.smtp)) - -# from buildbot.status import words -# c['status'].append(words.IRC(host="irc.example.com", nick="bb", -# channels=["#example"])) - - -# 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 commiting 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 telnet 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. -# from buildbot.master import Manhole -#c['manhole'] = Manhole(9999, "admin", "password") - -# 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'] = "Subversion" -c['projectURL'] = "http://subversion.apache.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://crest.ics.uci.edu/buildbot/" diff --git a/tools/buildbot/master/private-sample.py b/tools/buildbot/master/private-sample.py deleted file mode 100644 index 2d2cd8c..0000000 --- a/tools/buildbot/master/private-sample.py +++ /dev/null @@ -1,32 +0,0 @@ -# -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# -# -*- python -*- - -svnbin="svn" -smtp="smtp.example.com" -htmlPort = 8010 -slavePortnum = 9989 -tryPort = 8031 -tryUser = "xxxx" -tryPwd = "xxxx" -slavePwd = "xxxx" -hwrightPwd = "xxxx" -aholst_slavePwd = "xxxx" diff --git a/tools/buildbot/master/public_html/buildbot.css b/tools/buildbot/master/public_html/buildbot.css deleted file mode 100644 index edf51f9..0000000 --- a/tools/buildbot/master/public_html/buildbot.css +++ /dev/null @@ -1,68 +0,0 @@ -/* Copied from buildbot.ethereal.com. Thanks! */ - -* { - font-family: verdana, arial, helvetica, sans-serif; - font-size: 12px; - font-weight: bold; -} - -a:link,a:visited,a:active { - color: #333; -} -a:hover { - color: #999; -} - -.table { - border-spacing: 2px; -} - -td.Project { - color: #000; - border: 1px solid #666666; - background-color: #fff; -} - -td.Event, td.Activity, td.Time, td.Builder { -/* color: #333333; */ - border: 1px solid #666666; - background-color: #eee; - font-weight: normal; -} - -td.Change { - color: #fff; - border: 1px solid #666666; - background-color: #aaf; -} - -/* LastBuild, BuildStep states */ -.success { - color: #FFFFFF; - border: 1px solid #666666; - background-color: #3b0; -} - -.failure { - color: #FFFFFF; - border: 1px solid #666666; - background-color: #d33; -} - -.warnings { - color: #FFFFFF; - border: 1px solid #666666; - background-color: #fa2; -} - -.exception, td.offline { - color: #FFFFFF; - border: 1px solid #666666; - background-color: #e0b0ff; -} - -.start,.running, td.building { - color: #555; - border: 1px solid #666666; - background-color: #fffc6c; -} diff --git a/tools/buildbot/master/public_html/index.html b/tools/buildbot/master/public_html/index.html deleted file mode 100644 index c2b419f..0000000 --- a/tools/buildbot/master/public_html/index.html +++ /dev/null @@ -1,53 +0,0 @@ -<!-- - - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - ---> - -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15"> -<title>Welcome to the Buildbot</title> -</head> - -<body> -<h1>Welcome to the Buildbot!</h1> - -<ul> - <li>the <a href="waterfall">Waterfall Display</a> will give you a - time-oriented summary of recent buildbot activity.</li> - - <li>the <a href="grid">Grid Display</a> will give you a - developer-oriented summary of recent buildbot activity.</li> - - <li>The <a href="one_box_per_builder">Latest Build</a> for each builder is - here.</li> - - <li><a href="one_line_per_build">Recent Builds</a> are summarized here, one - per line.</li> - - <li><a href="buildslaves">Buildslave</a> information</li> - <li><a href="changes">ChangeSource</a> information.</li> - - <br /> - <li><a href="about">About this Buildbot</a></li> -</ul> - - -</body> </html> diff --git a/tools/buildbot/master/public_html/robots.txt b/tools/buildbot/master/public_html/robots.txt deleted file mode 100644 index 47a9d27..0000000 --- a/tools/buildbot/master/public_html/robots.txt +++ /dev/null @@ -1,9 +0,0 @@ -User-agent: * -Disallow: /waterfall -Disallow: /builders -Disallow: /changes -Disallow: /buildslaves -Disallow: /schedulers -Disallow: /one_line_per_build -Disallow: /one_box_per_builder -Disallow: /xmlrpc |
