summaryrefslogtreecommitdiff
path: root/tools/buildbot/master
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-08-05 16:22:51 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-08-05 16:22:51 +0000
commitcf46733632c7279a9fd0fe6ce26f9185a4ae82a9 (patch)
treeda27775a2161723ef342e91af41a8b51fedef405 /tools/buildbot/master
parentbb0ef45f7c46b0ae221b26265ef98a768c33f820 (diff)
downloadsubversion-tarball-master.tar.gz
Diffstat (limited to 'tools/buildbot/master')
-rw-r--r--tools/buildbot/master/Feeder.py391
-rw-r--r--tools/buildbot/master/README7
-rw-r--r--tools/buildbot/master/SVNMailNotifier.py210
-rw-r--r--tools/buildbot/master/master.cfg258
-rw-r--r--tools/buildbot/master/private-sample.py32
-rw-r--r--tools/buildbot/master/public_html/buildbot.css68
-rw-r--r--tools/buildbot/master/public_html/index.html53
-rw-r--r--tools/buildbot/master/public_html/robots.txt9
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'&', "&amp;", lastlog)
- lastlog = re.sub(r"'", "&apos;", lastlog)
- lastlog = re.sub(r'"', "&quot;", lastlog)
- lastlog = re.sub(r'<', '&lt;', lastlog)
- lastlog = re.sub(r'>', '&gt;', 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'&', "&amp;", lastlog)
- lastlog = re.sub(r"'", "&apos;", lastlog)
- lastlog = re.sub(r'"', "&quot;", lastlog)
- lastlog = re.sub(r'<', '&lt;', lastlog)
- lastlog = re.sub(r'>', '&gt;', 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