diff --git a/mozilla/tools/buildbot-configs/tryserver/master.cfg b/mozilla/tools/buildbot-configs/tryserver/master.cfg new file mode 100644 index 00000000000..bed02b11be9 --- /dev/null +++ b/mozilla/tools/buildbot-configs/tryserver/master.cfg @@ -0,0 +1,186 @@ +# -*- 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 . + +import mozbuild +reload(mozbuild) +from mozbuild import * + +# This is the dictionary that the buildmaster pays attention to. We also use +# a shorter alias to save typing. +c = BuildmasterConfig = {} + +## +## Misc Config +## + +c['projectName'] = "Mozilla CVS trunk patch uploader" +c['projectURL'] = "http://www.mozilla.org" +c['buildbotURL'] = "http://test1-linux-buildbot.build.mozilla.org:8010" +c['slavePortnum'] = 9989 + +## +## Slaves +## +# (bot-name, bot-password) +c['bots'] = [("linux1", "*********"), + ("win1", "*********"), + ("mac1", "********")] + +## +## Status +## + +from buildbot.status.html import Waterfall +c['status'] = [] +c['status'].append(Waterfall(http_port=8010, + css="/builds/buildbot/master/waterfall.css", + allowForce=False)) + +## +## Sources +## + +from buildbot.changes.pb import PBChangeSource +c['sources'] = [] +c['sources'].append(PBChangeSource()) + +## +## Schedulers +## + +c['schedulers'] = [] + +# scheduler for sendchange +from buildbot.scheduler import Scheduler +c['schedulers'].append(Scheduler(name="Sendchange test scheduler", + branch="HEAD_TRY", + treeStableTimer=3, + builderNames=["Sendchange linux builder", + "Sendchange mac builder", + "Sendchange win32 builder"])) + +# 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 bilder +# 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 + +builders = [] + +CVSROOT = ":pserver:anonymous@cvs.mozilla.org:/cvsroot" + +from buildbot.process import factory +s = factory.s +from buildbot.steps.shell import ShellCommand + +firefox_sendchange_unix_steps = [ + s(ShellCommand, name="remove source and obj dirs", + command=["rm", "-rf", "mozilla"], + workdir="."), + + s(ShellCommand, name="checkout client.mk", + description=["fetching client.mk"], + descriptionDone=["client.mk"], + command=["cvs", "-d", CVSROOT, "co", + "mozilla/client.mk"], + workdir="."), + + # TODO: when we support the upload of a mozconfig + # there should be a FileDownload step here + s(ShellCommand, name="source checkout", + description=["fetching source"], + descriptionDone=["source"], + command=["make", "-f", "client.mk", "checkout"], + workdir="mozilla"), + + s(MozillaPatchDownload, patchDir="patchstore", workdir="mozilla"), + s(MozillaCustomPatch, workdir="mozilla"), + + s(ShellCommand, name="mozconfig contents", + command=["cat",".mozconfig"], + workdir="mozilla"), + + s(ShellCommand, name="building", + description=["building"], + descriptionDone=["compile"], + command=["make", "-f", "client.mk", "build"], + workdir="mozilla") +] + +firefox_sendchange_unix_builder = { + 'name': "Sendchange linux builder", + 'slavenames': ['linux1'], + 'builddir': "sendchange-linux", + 'factory': factory.BuildFactory(firefox_sendchange_unix_steps), + 'category': "Sendchange" +} +builders.append(firefox_sendchange_unix_builder) + +# we can just use the same steps for mac +firefox_sendchange_mac_builder = { + 'name': "Sendchange mac builder", + 'slavenames': ['mac1'], + 'builddir': "sendchange-mac", + 'factory': factory.BuildFactory(firefox_sendchange_unix_steps), + 'category': "Sendchange" +} +builders.append(firefox_sendchange_mac_builder) + +firefox_sendchange_win32_steps = [ + s(ShellCommand, name="remove source and obj dirs", + command=["rmdir", "/s", "/q", "mozilla"], + workdir=".", + env=MozillaEnvironments['win32-buildbotref-v4']), + + s(ShellCommand, name="checkout client.mk", + description=["fetching client.mk"], + descriptionDone=["client.mk"], + command=["cvs", "-d", CVSROOT, "co", + "mozilla/client.mk"], + workdir=".", + env=MozillaEnvironments['win32-buildbotref-v4']), + + # TODO: when we support the upload of a mozconfig + # there should be a FileDownload step here + s(ShellCommand, name="source checkout", + description=["fetching source"], + descriptionDone=["source"], + command=["make", "-f", "client.mk", "checkout"], + workdir="mozilla", + env=MozillaEnvironments['win32-buildbotref-v4']), + + s(MozillaPatchDownload, patchDir="patchstore", workdir="mozilla"), + s(MozillaCustomPatch, workdir="mozilla"), + + s(ShellCommand, name="mozconfig contents", + command=["cat",".mozconfig"], + workdir="mozilla", + env=MozillaEnvironments['win32-buildbotref-v4']), + + s(ShellCommand, name="building", + description=["building"], + descriptionDone=["compile"], + command=["make", "-f", "client.mk", "build"], + workdir="mozilla", + env=MozillaEnvironments['win32-buildbotref-v4']), +] + +firefox_sendchange_win32_builder = { + 'name': "Sendchange win32 builder", + 'slavenames': ['win1'], + 'builddir': "sendchange-win32", + 'factory': factory.BuildFactory(firefox_sendchange_win32_steps), + 'category': "Sendchange" +} +builders.append(firefox_sendchange_win32_builder) + +c['builders'] = builders diff --git a/mozilla/tools/buildbot-configs/tryserver/mozbuild.py b/mozilla/tools/buildbot-configs/tryserver/mozbuild.py new file mode 100644 index 00000000000..83d6b28a5ae --- /dev/null +++ b/mozilla/tools/buildbot-configs/tryserver/mozbuild.py @@ -0,0 +1,121 @@ +from buildbot.steps.transfer import FileDownload + +MozillaEnvironments = {} + +MozillaEnvironments['win32-buildbotref-v4'] = { + "'MOZ_TOOLS": 'd:\\moztools', + "VSINSTALLDIR": 'C:\\Program Files\\Microsoft Visual Studio 8', + "VS80COMMTOOLS": 'C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\Tools\\', + "VCINSTALLDIR": 'C:\\Program Files\\Microsoft Visual Studio 8\\VC', + "FrameworkDir": 'C:\\WINDOWS\\Microsoft.NET\\Framework', + "FrameworkSDKDir": 'C:\\Program Files\\Microsoft Visual Studio 8\\SDK\\v2.0', + "DevEnvDir": "C:\\Program Files\\Microsoft Visual Studio 8\\VC\\Common7\\IDE", + "MSVCDir": 'C:\\Program Files\\Microsoft Visual Studio 8\\VC', + "PATH": 'C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\IDE;' + \ + 'C:\\Program Files\\Microsoft Visual Studio 8\\VC\\bin;' + \ + 'C:\\Program Files\\Microsoft Platform SDK\\bin;' + \ + 'C:\\Program Files\\Microsoft Visual Studio 8\\VC;' + \ + 'C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\Tools;' + \ + 'C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\Tools\\bin;' + \ + 'd:\\moztools\\bin;' + \ + 'd:\\cygwin\\bin;' + \ + 'd:\\buildtools\\7zip;' + \ + 'd:\\buildtools\\upx;' + \ + 'd:\\buildtools\\python24;' + \ + 'd:\\buildtools\\nsis;', + "INCLUDE": 'C:\\Program Files\\Microsoft Visual Studio 8\\VC\\ATLMFC\\INCLUDE;' + \ + 'C:\\Program Files\\Microsoft Visual Studio 8\\VC\\INCLUDE;' + \ + 'C:\\Program Files\\Microsoft Platform SDK\\include', + "LIB": 'C:\\Program Files\\Microsoft Visual Studio 8\\VC\\ATLMFC\\LIB;' + \ + 'C:\\Program Files\\Microsoft Visual Studio 8\\VC\\LIB;' + \ + 'C:\\Program Files\\Microsoft Platform SDK\\lib' +} + +class MozillaPatchDownload(FileDownload): + """This step reads a Change for a filename and downloads it to the slave. + It is typically used in conjunction with the MozillaCustomPatch step. + """ + + haltOnFailure = True + + def __init__(self, patchDir=".", **kwargs): + """arguments: + @type patchDir: string + @param patchDir: The directory on the master that holds the patches + This directory is relative to the base buildmaster + directory. + ie. /home/buildmaster/project + Defaults to '.' + 'workdir' is assumed to be 'build' and should be passed if it is anything + else. + """ + + self.patchDir = patchDir + # mastersrc and slavedest get overriden in start() + if not 'workdir' in kwargs: + kwargs['workdir'] = "build" + FileDownload.__init__(self, mastersrc=".", slavedest=".", **kwargs) + + def start(self): + changes = self.step_status.build.getChanges() + + if len(changes) < 1: + return + + file = changes[0].getFileContents().split(": ")[1].rstrip() + # strip the path from the filename + file = file.split("/")[-1] + + self.mastersrc = "%s/%s" % (self.patchDir, file) + self.slavedest = "%s" % (file) + + # now that everything is set-up, download the file + FileDownload.start(self) + + +from twisted.python import log + +from buildbot.steps.shell import ShellCommand +from buildbot.status.builder import WARNINGS + + +class MozillaCustomPatch(ShellCommand): + """This step looks at a Change to find the name of a diff. + The diff is applied to the current tree. + This step is typically used in conjunction with the MozillaPatchDownload + step. + """ + + haltOnFailure = True + + def __init__(self, stripDirs=0, **kwargs): + """ + @type stripDirs: int + @param stripDirs: The '-p' option to pass to patch. Defaults to 0 + + 'workdir' is assumed to be 'build' and should be passed if it is + anything else. + """ + + self.stripDirs = stripDirs + + if not 'workdir' in kwargs: + kwargs['workdir'] = "build" + ShellCommand.__init__(self, **kwargs) + + def start(self): + changes = self.step_status.build.getChanges() + if len(changes) < 1: + log.msg("No changes, not doing anything") + self.step_status.setColor("yellow") + self.step_status.setText(["Skipped patch step:", "no patch"]) + self.finished(WARNINGS) + return + + if len(changes) > 1: + log.msg("Ignoring all but the first change...") + + file = changes[0].getFileContents().split(": ")[1].rstrip() + + self.setCommand(["patch", "-f", "-p%d" % self.stripDirs, "-i", file]) + ShellCommand.start(self)