Copy from seamonkey's nightly builders to get us started. Keep actual
authorPhilippe M. Chiasson <gozer@mozillamessaging.com>
Wed, 23 Jul 2008 15:22:15 -0400
changeset 192 566067c2daab6afbee6a508a5bdd251fffe1871e
parent 191 e4873e196a3dfa63030dedb6fbb4060a116b749b
child 193 25b1ce7a11cd7e587cb330265b54a1bb9f2e9b56
push id1
push userroot
push dateWed, 17 Dec 2014 00:18:48 +0000
Copy from seamonkey's nightly builders to get us started. Keep actual bit publishing steps disabled.
thunderbird/Makefile
thunderbird/buildbot.tac
thunderbird/config.py
thunderbird/linux/mozconfig
thunderbird/macosx/mozconfig
thunderbird/master.cfg
thunderbird/public_html/buildbot.css
thunderbird/public_html/index.html
thunderbird/public_html/robots.txt
thunderbird/win32/mozconfig
new file mode 100644
--- /dev/null
+++ b/thunderbird/Makefile
@@ -0,0 +1,19 @@
+# -*- makefile -*-
+
+# This is a simple makefile which lives in a buildmaster/buildslave
+# directory (next to the buildbot.tac file). It allows you to start/stop the
+# master or slave by doing 'make start' or 'make stop'.
+
+# The 'reconfig' target will tell a buildmaster to reload its config file.
+
+start:
+	twistd --no_save -y buildbot.tac
+
+stop:
+	kill `cat twistd.pid`
+
+reconfig:
+	kill -HUP `cat twistd.pid`
+
+log:
+	tail -f twistd.log
new file mode 100644
--- /dev/null
+++ b/thunderbird/buildbot.tac
@@ -0,0 +1,10 @@
+
+from twisted.application import service
+from buildbot.master import BuildMaster
+
+basedir = r'/buildbot/buildbot-configs/thunderbird'
+configfile = r'master.cfg'
+
+application = service.Application('buildmaster')
+BuildMaster(basedir, configfile).setServiceParent(application)
+
new file mode 100644
--- /dev/null
+++ b/thunderbird/config.py
@@ -0,0 +1,87 @@
+HGURL = 'http://hg.mozilla.org/'
+ADD_POLL_BRANCH = 'mozilla-central'
+CONFIG_REPO_URL = 'http://hg.mozilla.org/build/buildbot-configs'
+CVSROOT = ':ext:tbirdbld@cvs.mozilla.org:/cvsroot'
+CONFIG_SUBDIR = 'thunderbird'
+OBJDIR = 'objdir-tb'
+STAGE_USERNAME = 'tbirdbld'
+STAGE_SERVER = 'stage.mozilla.org'
+STAGE_BASE_PATH = '/home/ftp/pub/thunderbird'
+STAGE_GROUP = 'thunderbird'
+STAGE_SSH_KEY = 'tbirdbld_dsa'
+AUS2_USER = 'tbirdbld'
+AUS2_HOST = 'aus2-community.mozilla.org'
+DOWNLOAD_BASE_URL = 'http://ftp.mozilla.org/pub/mozilla.org/thunderbird'
+
+
+# All branches that are to be built MUST be listed here.
+BRANCHES = {
+    'comm-central': {}
+}
+
+######## thunderbird-hg
+# All platforms being built for this branch MUST be listed here.
+BRANCHES['comm-central']['platforms'] = {
+    'linux': {},
+    'win32': {},
+    'macosx': {}
+}
+BRANCHES['comm-central']['platforms']['linux']['base_name'] = 'Linux comm-central'
+BRANCHES['comm-central']['platforms']['win32']['base_name'] = 'Win2k3 comm-central'
+BRANCHES['comm-central']['platforms']['macosx']['base_name'] = 'MacOSX 10.4 comm-central'
+BRANCHES['comm-central']['platforms']['linux']['profiled_build'] = False
+BRANCHES['comm-central']['platforms']['win32']['profiled_build'] = False
+BRANCHES['comm-central']['platforms']['macosx']['profiled_build'] = False
+# If True, a complete update snippet for this branch will be generated and
+# uploaded to. Any platforms with 'debug' in them will not have snippets
+# generated.
+BRANCHES['comm-central']['create_snippet'] = True
+BRANCHES['comm-central']['aus2_base_upload_dir'] = '/opt/aus2/build/0/SeaMonkey/trunk'
+BRANCHES['comm-central']['platforms']['linux']['update_platform'] = 'Linux_x86-gcc3'
+BRANCHES['comm-central']['platforms']['win32']['update_platform'] = 'WINNT_x86-msvc'
+BRANCHES['comm-central']['platforms']['macosx']['update_platform'] = 'Darwin_Universal-gcc3'
+# If True, 'make buildsymbols' and 'make uploadsymbols' will be run
+# SYMBOL_SERVER_* variables are setup in the environment section below
+BRANCHES['comm-central']['platforms']['linux']['upload_symbols'] = True
+BRANCHES['comm-central']['platforms']['win32']['upload_symbols'] = True
+BRANCHES['comm-central']['platforms']['macosx']['upload_symbols'] = True
+BRANCHES['comm-central']['tinderbox_tree'] = 'Thunderbird'
+BRANCHES['comm-central']['platforms']['linux']['slaves'] = [
+    'tb-linux-tbox',
+]
+BRANCHES['comm-central']['platforms']['win32']['slaves'] = [
+    'tbnewref-win32-tbox'
+]
+BRANCHES['comm-central']['platforms']['macosx']['slaves'] = [
+    'bm-xserve07'
+]
+# This is used in a bunch of places where something needs to be run from
+# the objdir. This is necessary because of universal builds on Mac
+# creating subdirectories inside of the objdir.
+BRANCHES['comm-central']['platforms']['linux']['platform_objdir'] = OBJDIR
+BRANCHES['comm-central']['platforms']['win32']['platform_objdir'] = OBJDIR
+BRANCHES['comm-central']['platforms']['macosx']['platform_objdir'] = '%s/ppc' % OBJDIR
+BRANCHES['comm-central']['platforms']['linux']['env'] = {
+    'MOZ_OBJDIR': OBJDIR,
+    'SYMBOL_SERVER_HOST': 'dm-symbolpush01.mozilla.org',
+    'SYMBOL_SERVER_USER': 'tbirdbld',
+    'SYMBOL_SERVER_PATH': '/mnt/netapp/breakpad/symbols_tbrd/',
+    'SYMBOL_SERVER_SSH_KEY': "/home/tbirdbld/.ssh/tbirdbld_dsa",
+    'TINDERBOX_OUTPUT': '1'
+}
+BRANCHES['comm-central']['platforms']['win32']['env'] = {'CVS_RSH': 'ssh',
+    'MOZ_OBJDIR': OBJDIR,
+    'SYMBOL_SERVER_HOST': 'dm-symbolpush01.mozilla.org',
+    'SYMBOL_SERVER_USER': 'tbirdbld',
+    'SYMBOL_SERVER_PATH': '/mnt/netapp/breakpad/symbols_tbrd/',
+    'SYMBOL_SERVER_SSH_KEY': "/c/Documents and Settings/tbirdbld/.ssh/tbirdbld_dsa",
+    'TINDERBOX_OUTPUT': '1'
+}
+BRANCHES['comm-central']['platforms']['macosx']['env'] = {
+    'MOZ_OBJDIR': OBJDIR,
+    'SYMBOL_SERVER_HOST': 'dm-symbolpush01.mozilla.org',
+    'SYMBOL_SERVER_USER': 'tbirdbld',
+    'SYMBOL_SERVER_PATH': '/mnt/netapp/breakpad/symbols_tbrd/',
+    'SYMBOL_SERVER_SSH_KEY': "/Users/tbirdbld/.ssh/tbirdbld_dsa",
+    'TINDERBOX_OUTPUT': '1'
+}
new file mode 100644
--- /dev/null
+++ b/thunderbird/linux/mozconfig
@@ -0,0 +1,13 @@
+ac_add_options --enable-application=mail
+ac_add_options --enable-optimize
+ac_add_options --enable-update-channel=nightly
+ac_add_options --enable-update-packaging
+ac_add_options --disable-debug
+ac_add_options --disable-tests
+ac_add_options --enable-codesighs
+
+CC=/tools/gcc-4.1.1/bin/gcc
+CXX=/tools/gcc-4.1.1/bin/g++
+
+export CFLAGS="-gstabs+"
+export CXXFLAGS="-gstabs+"
new file mode 100644
--- /dev/null
+++ b/thunderbird/macosx/mozconfig
@@ -0,0 +1,20 @@
+if test -e "$topsrcdir/mozilla/build/macosx/universal/mozconfig"; then
+. $topsrcdir/mozilla/build/macosx/universal/mozconfig
+else
+. $topsrcdir/build/macosx/universal/mozconfig
+fi
+ac_add_app_options ppc --enable-prebinding
+
+ac_add_options --enable-application=mail
+ac_add_options --enable-update-channel=nightly
+ac_add_options --enable-update-packaging
+ac_add_options --enable-optimize
+ac_add_options --disable-debug
+ac_add_options --disable-tests
+ac_add_options --enable-codesighs
+
+export CFLAGS="-gstabs -gfull -save-temps"
+export CXXFLAGS="-gstabs -gfull -save-temps"
+
+# Needed to enable breakpad in application.ini
+export MOZILLA_OFFICIAL=1
new file mode 100644
--- /dev/null
+++ b/thunderbird/master.cfg
@@ -0,0 +1,469 @@
+# -*- python -*-
+# ex: set syntax=python:
+
+# Shorthand
+c = BuildmasterConfig = {}
+
+####### BUILDSLAVES
+
+import BuildSlaves
+reload(BuildSlaves)
+c['slaves'] = BuildSlaves.SlaveList
+
+# 'slavePortnum' defines the TCP port to listen on. This must match the value
+# configured into the buildslaves (with their --master option)
+
+c['slavePortnum'] = 9010
+
+
+# most of the config is in an external file
+import config
+reload(config)
+from config import *
+
+
+from buildbot.process import factory
+from buildbot.scheduler import Scheduler, Nightly, Periodic
+from buildbot.status.tinderbox import TinderboxMailNotifier
+from buildbot.status.words import IRC
+from buildbot.steps.source import Mercurial
+from buildbot.steps.shell import Compile, ShellCommand, WithProperties
+
+import buildbotcustom.changes.hgpoller
+import buildbotcustom.steps.misc
+import buildbotcustom.steps.test
+import buildbotcustom.steps.transfer
+import buildbotcustom.steps.updates
+reload(buildbotcustom.changes.hgpoller)
+reload(buildbotcustom.steps.misc)
+reload(buildbotcustom.steps.test)
+reload(buildbotcustom.steps.transfer)
+reload(buildbotcustom.steps.updates)
+
+from buildbotcustom.changes.hgpoller import HgPoller
+from buildbotcustom.steps.test import AliveTest, CompareBloatLogs, \
+  CompareLeakLogs, Codesighs
+from buildbotcustom.steps.misc import SetMozillaBuildProperties
+from buildbotcustom.steps.transfer import MozillaStageUpload
+from buildbotcustom.steps.updates import CreateCompleteUpdateSnippet
+
+c['change_source'] = []
+c['schedulers'] = []
+c['builders'] = []
+c['status'] = []
+
+for name in BRANCHES.keys():
+    # shorthand
+    branch = BRANCHES[name]
+    builders = []
+    nightlyBuilders = []
+    allBuilders = []
+    # generate a list of builders, nightly builders (names must be different)
+    # for easy access
+    for platform in branch['platforms'].keys():
+        builders.append('%s build' % branch['platforms'][platform]['base_name'])
+        # Skip the nightly builder for debug builds
+        if platform.find('debug') == -1:
+            nightlyBuilders.append('%s nightly' % \
+                                    branch['platforms'][platform]['base_name'])
+    allBuilders.extend(builders)
+    allBuilders.extend(nightlyBuilders)
+
+    # Currently, each branch goes to a different tree
+    # If this changes in the future this may have to be
+    # moved out of the loop
+    c['status'].append(TinderboxMailNotifier(
+        fromaddr="gozer@mozillamessaging.com",
+        tree=branch['tinderbox_tree'],
+        extraRecipients=["gozer@mozillamessaging.com"],
+        #extraRecipients=["tinderbox-daemon@tinderbox.mozilla.org"],
+        relayhost="mail.build.mozilla.org",
+        builders=allBuilders,
+        logCompression="bzip2"
+    ))
+
+    c['status'].append(IRC(
+        host='irc.mozilla.org',
+        nick='gozer-bot',
+        channels=['gozer']
+    ))
+
+    # change sources
+    c['change_source'].append(HgPoller(
+        hgURL=HGURL,
+        branch=name,
+        pushlogUrlOverride='%s/%s/index.cgi/pushlog' % (HGURL, ADD_POLL_BRANCH),
+        pollInterval=1*60
+    ))
+    c['change_source'].append(HgPoller(
+        hgURL=HGURL,
+        branch=name,
+        pushlogUrlOverride='%s/%s/index.cgi/pushlog' % (HGURL, name),
+        pollInterval=1*60
+    ))
+
+    # schedulers
+    # this one gets triggered by the HG Poller
+    c['schedulers'].append(Scheduler(
+        name=name,
+        branch=name,
+        treeStableTimer=3*60,
+        builderNames=builders
+    ))
+    c['schedulers'].append(Nightly(
+        name='%s nightly' % name,
+        branch=name,
+        hour=[0],
+        builderNames=nightlyBuilders
+    ))
+    c['schedulers'].append(Periodic(
+        name='%s periodic' % name,
+        builderNames=builders,
+        branch=name,
+        periodicBuildTimer=60*60*2 # 2 hours
+    ))
+
+    for platform in branch['platforms'].keys():
+        # no need to have a whole new directory just for logs.
+        # let's put these in their non-debug counterpart
+        # translates to, eg:
+        #  /home/ftp/pub/thunderbird/tinderbox-builds/comm-central-linux
+        realPlatform = platform.replace('-debug', '').replace('64', '')
+        logUploadDir = 'tinderbox-builds/%s-%s/' % (name, realPlatform)
+
+        # shorthand
+        pf = branch['platforms'][platform]
+        mozilla2_dep_factory = factory.BuildFactory()
+        mozilla2_dep_factory.addStep(ShellCommand(
+            command=['echo', WithProperties('Building on: %(slavename)s')],
+            env=pf['env']
+        ))
+        mozilla2_dep_factory.addStep(ShellCommand(
+            command="rm -rfv %s/dist/thunderbird-* %s/dist/install/sea/*.exe " %
+                     (pf['platform_objdir'], pf['platform_objdir']),
+            env=pf['env'],
+            description=['deleting', 'old', 'package'],
+            descriptionDone=['delete', 'old', 'package']
+        ))
+        mozilla2_dep_factory.addStep(Mercurial(
+            mode='update',
+            baseURL=HGURL,
+            defaultBranch=name,
+            alwaysUseLatest=True
+        ))
+        changesetLink = '<a href=%s/%s/index.cgi/rev' % (HGURL, name)
+        changesetLink += '/%(got_revision)s title="Built from revision %(got_revision)s">rev:%(got_revision)s</a>'
+        mozilla2_dep_factory.addStep(ShellCommand(
+            command=['echo', 'TinderboxPrint:', WithProperties(changesetLink)]
+        ))
+        mozilla2_dep_factory.addStep(ShellCommand(
+            command=['python', 'client.py', '--skip-comm', '--skip-chatzilla', '--skip-venkman', '--skip-calendar', '--cvsroot', CVSROOT, 'checkout'],
+            description=['running', 'client.py', 'checkout'],
+            descriptionDone=['python', 'client.py', 'checkout'],
+        ))
+        mozilla2_dep_factory.addStep(ShellCommand(
+            command=['rm', '-rfv', 'configs'],
+            description=['removing', 'configs'],
+            descriptionDone=['remove', 'configs'],
+            haltOnFailure=True
+        ))
+        mozilla2_dep_factory.addStep(ShellCommand(
+            command=['hg', 'clone', CONFIG_REPO_URL, 'configs'],
+            description=['checking', 'out', 'configs'],
+            descriptionDone=['checkout', 'configs'],
+            haltOnFailure=True
+        ))
+        mozilla2_dep_factory.addStep(ShellCommand(
+            # cp configs/thunderbird/$platform/mozconfig .mozconfig
+            command=['cp', 'configs/%s/%s/mozconfig' % (CONFIG_SUBDIR,
+                                                        platform),
+                     '.mozconfig'],
+            description=['copying', 'mozconfig'],
+            descriptionDone=['copy', 'mozconfig'],
+            haltOnFailure=True
+        ))
+        mozilla2_dep_factory.addStep(ShellCommand(
+            command=['cat', '.mozconfig'],
+        ))
+
+        buildcmd = 'build'
+        mozilla2_dep_factory.addStep(Compile(
+            command=['make', '-f', 'client.mk', buildcmd],
+            env=pf['env'],
+            haltOnFailure=True,
+            timeout=60*40
+        ))
+
+        if platform.find('debug') == -1:
+            mozilla2_dep_factory.addStep(ShellCommand(
+                command=['make', 'package'],
+                workdir='build/%s' % pf['platform_objdir'],
+                haltOnFailure=True
+            ))
+            if platform.startswith("win32"):
+                mozilla2_dep_factory.addStep(ShellCommand(
+                    command=['make', 'installer'],
+                    workdir='build/%s' % pf['platform_objdir'],
+                    haltOnFailure=True
+                ))
+            mozilla2_dep_factory.addStep(SetMozillaBuildProperties(
+                objdir='build/%s/mozilla' % pf['platform_objdir']
+            ))
+#            mozilla2_dep_factory.addStep(MozillaStageUpload(
+#                objdir='%s/mozilla' % pf['platform_objdir'],
+#                username=STAGE_USERNAME,
+#                milestone=name,
+#                remoteHost=STAGE_SERVER,
+#                remoteBasePath=STAGE_BASE_PATH,
+#                platform=realPlatform,
+#                group=STAGE_GROUP,
+#                sshKey=STAGE_SSH_KEY,
+#                releaseToLatest=False,
+#                releaseToDated=False,
+#                releaseToTinderboxBuilds=True,
+#                tinderboxBuildsDir='%s-%s' % (name, platform),
+#                dependToDated=True
+#            ))
+            if platform.find('win32') == -1 and platform.find('linux64') == -1:
+                # Codesighs
+                mozilla2_dep_factory.addStep(ShellCommand(
+                    command=['make'],
+                    workdir='build/%s/mozilla/tools/codesighs' % pf['platform_objdir']
+                ))
+                mozilla2_dep_factory.addStep(ShellCommand(
+                    command=['wget', '-O', 'codesize-auto-old.log',
+                     'http://%s/pub/mozilla.org/thunderbird/%s/codesize-auto.log' %\
+                      (STAGE_SERVER, logUploadDir)],
+                    env=pf['env']
+                ))
+                mozilla2_dep_factory.addStep(Codesighs(
+                    objdir='../%s/mozilla' % pf['platform_objdir'],
+                    platform=realPlatform,
+                    workdir='build/mozilla',
+                    env=pf['env']
+                ))
+                mozilla2_dep_factory.addStep(ShellCommand(
+                    command=['cat', 'codesize-auto-diff.log']
+                ))
+#                mozilla2_dep_factory.addStep(ShellCommand(
+#                    command=['scp', '-o', 'User=%s' % STAGE_USERNAME,
+#                     '-o', 'IdentityFile=~/.ssh/%s' % STAGE_SSH_KEY,
+#                     'codesize-auto.log',
+#                     '%s:%s/%s' % (STAGE_SERVER, STAGE_BASE_PATH, logUploadDir)]
+#                ))
+                mozilla2_dep_factory.addStep(ShellCommand(
+                    command=['wget', '-O', 'codesize-base-old.log',
+                     'http://%s/pub/mozilla.org/thunderbird/%s/codesize-base.log' %\
+                      (STAGE_SERVER, logUploadDir)],
+                    env=pf['env']
+                ))
+                mozilla2_dep_factory.addStep(Codesighs(
+                    objdir='../%s/mozilla' % pf['platform_objdir'],
+                    platform=realPlatform,
+                    type='base',
+                    workdir='build/mozilla',
+                    env=pf['env']
+                ))
+                mozilla2_dep_factory.addStep(ShellCommand(
+                    command=['cat', 'codesize-base-diff.log']
+                ))
+#                mozilla2_dep_factory.addStep(ShellCommand(
+#                    command=['scp', '-o', 'User=%s' % STAGE_USERNAME,
+#                     '-o', 'IdentityFile=~/.ssh/%s' % STAGE_SSH_KEY,
+#                     'codesize-base.log',
+#                     '%s:%s/%s' % (STAGE_SERVER, STAGE_BASE_PATH, logUploadDir)]
+#                ))
+
+        # OS X builds eat up a ton of space with -save-temps enabled
+        # until we have dwarf support we need to clean this up so we don't
+        # fill up the disk
+        if platform.startswith("macosx"):
+            mozilla2_dep_factory.addStep(ShellCommand(
+                command=['find', '-E', '.', '-iregex',
+                         '.*\.(i|s|mii|ii)$', '-exec', 'rm', '{}', ';'],
+                workdir='build/%s' % OBJDIR
+            ))
+
+
+        mozilla2_dep_builder = {
+            'name': '%s build' % pf['base_name'],
+            'slavenames': pf['slaves'],
+            'builddir': '%s-%s' % (name, platform),
+            'factory': mozilla2_dep_factory,
+            'category': name,
+        }
+        c['builders'].append(mozilla2_dep_builder)
+
+        mozilla2_nightly_factory = factory.BuildFactory()
+        mozilla2_nightly_factory.addStep(ShellCommand(
+            command=['echo', WithProperties('Building on: %(slavename)s')],
+            env=pf['env']
+        ))
+        mozilla2_nightly_factory.addStep(ShellCommand(
+            command=['find', '.', '-maxdepth', '2', '-mtime', '+7', '-exec',
+                     'rm', '-rfv', '{}', ';'],
+            env=pf['env'],
+            workdir='.',
+            description=['cleanup', 'old', 'symbols'],
+            flunkOnFailure=False,
+        ))
+        mozilla2_nightly_factory.addStep(Mercurial(
+            mode='clobber',
+            baseURL=HGURL,
+            defaultBranch=name
+        ))
+        changesetLink = '<a href=%s/%s/index.cgi/rev' % (HGURL, name)
+        changesetLink += '/%(got_revision)s title="Built from revision %(got_revision)s">rev:%(got_revision)s</a>'
+        mozilla2_nightly_factory.addStep(ShellCommand(
+            command=['echo', 'TinderboxPrint:', WithProperties(changesetLink)]
+        ))
+        mozilla2_nightly_factory.addStep(ShellCommand(
+            command=['python', 'client.py', 'checkout'],
+            description=['running', 'client.py', 'checkout'],
+            descriptionDone=['client.py', 'checkout']
+        ))
+        mozilla2_nightly_factory.addStep(ShellCommand(
+            command=['rm', '-rfv', 'configs'],
+            description=['removing', 'configs'],
+            descriptionDone=['remove', 'configs'],
+            haltOnFailure=True
+        ))
+        mozilla2_nightly_factory.addStep(ShellCommand(
+            command=['hg', 'clone', CONFIG_REPO_URL, 'configs'],
+            description=['checking', 'out', 'configs'],
+            descriptionDone=['checkout', 'configs'],
+            haltOnFailure=True
+        ))
+        mozilla2_nightly_factory.addStep(ShellCommand(
+            # cp configs/thunderbird/$platform/mozconfig .mozconfig
+            command=['cp', 'configs/%s/%s/mozconfig' % (CONFIG_SUBDIR,
+                                                        platform),
+                     '.mozconfig'],
+            description=['copying', 'mozconfig'],
+            descriptionDone=['copy', 'mozconfig'],
+            haltOnFailure=True
+        ))
+        mozilla2_nightly_factory.addStep(ShellCommand(
+            command=['cat', '.mozconfig'],
+        ))
+
+        buildcmd = 'build'
+        mozilla2_nightly_factory.addStep(Compile(
+            command=['make', '-f', 'client.mk', buildcmd],
+            env=pf['env'],
+            haltOnFailure=True,
+            timeout=60*40
+        ))
+        mozilla2_nightly_factory.addStep(ShellCommand(
+            command=['make', 'package'],
+            workdir='build/%s' % pf['platform_objdir'],
+            haltOnFailure=True
+        ))
+        if platform.startswith("win32"):
+            mozilla2_nightly_factory.addStep(ShellCommand(
+                command=['make', 'installer'],
+                workdir='build/%s' % pf['platform_objdir'],
+                haltOnFailure=True
+            ))
+        mozilla2_nightly_factory.addStep(ShellCommand(
+            command=['make', '-C',
+                     '%s/mozilla/tools/update-packaging' % pf['platform_objdir']],
+            description=['create', 'complete', 'update'],
+            haltOnFailure=True
+        ))
+        mozilla2_nightly_factory.addStep(SetMozillaBuildProperties(
+                objdir='build/%s/mozilla' % pf['platform_objdir']
+        ))
+#        mozilla2_nightly_factory.addStep(MozillaStageUpload(
+#                objdir='%s/mozilla' % pf['platform_objdir'],
+#                username=STAGE_USERNAME,
+#                milestone=name,
+#                remoteHost=STAGE_SERVER,
+#                remoteBasePath=STAGE_BASE_PATH,
+#                platform=realPlatform,
+#                group=STAGE_GROUP,
+#                sshKey=STAGE_SSH_KEY,
+#                releaseToDated=True,
+#                releaseToLatest=True,
+#                releaseToTinderboxBuilds=True,
+#                tinderboxBuildsDir='%s-%s' % (name, platform),
+#                dependToDated=True
+#        ))
+        if branch['create_snippet']:
+            # this is a tad ugly because we need to python interpolation
+            # as well as WithProperties
+            # here's an example of what it translates to:
+            # /opt/aus2/build/0/SeaMonkey/mozilla2/WINNT_x86-msvc/2008010103/en-US
+            AUS2_FULL_UPLOAD_DIR = '%s/%s/%%(buildid)s/en-US' % \
+              (branch['aus2_base_upload_dir'],
+               branch['platforms'][platform]['update_platform']
+              )
+
+            mozilla2_nightly_factory.addStep(CreateCompleteUpdateSnippet(
+                objdir='build/%s/mozilla' % pf['platform_objdir'],
+                milestone=name,
+                baseurl='%s/nightly' % DOWNLOAD_BASE_URL
+            ))
+#            mozilla2_nightly_factory.addStep(ShellCommand(
+#                command=['ssh', '-l', AUS2_USER, AUS2_HOST,
+#                         WithProperties('mkdir -p %s' % AUS2_FULL_UPLOAD_DIR)],
+#                description=['create', 'aus2', 'upload', 'dir'],
+#                haltOnFailure=True
+#            ))
+#            mozilla2_nightly_factory.addStep(ShellCommand(
+#                command=['scp', '-o', 'User=%s' % AUS2_USER,
+#                         'dist/update/complete.update.snippet',
+#                         WithProperties('%s:%s/complete.txt' % \
+#                           (AUS2_HOST, AUS2_FULL_UPLOAD_DIR))],
+#                workdir='build/%s/mozilla' % pf['platform_objdir'],
+#                description=['upload', 'complete', 'snippet'],
+#                haltOnFailure=True
+#              ))
+        if pf['upload_symbols']:
+            mozilla2_nightly_factory.addStep(ShellCommand(
+                command=['make', 'buildsymbols'],
+                env=pf['env'],
+                workdir='build/%s' % pf['platform_objdir'],
+                haltOnFailure=True
+            ))
+            mozilla2_nightly_factory.addStep(ShellCommand(
+                command=['make', 'uploadsymbols'],
+                env=pf['env'],
+                workdir='build/%s' % pf['platform_objdir'],
+                haltOnFailure=True
+            ))
+        # in order to save disk space we clobber 'build' at the end.
+        # we don't want to clobber anything else though, because symbols
+        # sit alongside
+        mozilla2_nightly_factory.addStep(ShellCommand(
+            command=['rm', '-rfv', 'build'],
+            env=pf['env'],
+            workdir='.'
+        ))
+
+
+        mozilla2_nightly_builder = {
+            'name': '%s nightly' % pf['base_name'],
+            'slavenames': pf['slaves'],
+            'builddir': '%s-%s-nightly' % (name, platform),
+            'factory': mozilla2_nightly_factory,
+            'category': name,
+        }
+        c['builders'].append(mozilla2_nightly_builder)
+
+####### STATUS TARGETS
+
+from buildbot.status import html
+
+c['status'].append(html.WebStatus(
+    http_port=8011, allowForce=True
+))
+
+####### 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'] = "Thunderbird:hg"
new file mode 100644
--- /dev/null
+++ b/thunderbird/public_html/buildbot.css
@@ -0,0 +1,64 @@
+body {
+    background: url("http://www.mozilla.org/images/mozilla-banner.gif") 
+                no-repeat top left;
+    font-family: Verdana, Courier, sans-sarif;
+    font-size: 80%;
+    padding-top: 80px;
+}
+
+a:link, a:visited {
+    color: #000;
+}
+
+td.Event, td.BuildStep, td.Activity, td.Change, td.Time, td.Builder, td.LastBuild {
+    border: 1px solid #777;
+}
+
+td.Event, td.Change, td.Time, td.Builder {
+    background-color: #F3F3F3;
+}
+
+td.green {
+    background-color: #72ff75;
+}
+
+.table {
+    /* border-spacing: 2px; */
+    border-spacing: 0px;
+    width: 1%;
+    border-collapse: seperate;
+}
+
+td {
+    padding: 0.5ex 1ex;
+    text-align: center;
+    border: 1px solid #DDD;
+}
+
+/* Activity states */
+.idle {
+    background-color: #F3F3F3;
+}
+
+/* LastBuild, BuildStep states */
+.success {
+    background-color: #72ff75;
+}
+.failure {
+    background-color: red;
+}
+.warnings {
+    background-color: orange;
+}
+.exception {
+    background-color: #c000c0;
+}
+.start,.running {
+    background-color: yellow;
+}
+
+/* color trunk/branch builder links differently */
+
+.Builder a[href*="trunk"] {
+    color: #05e;
+}
new file mode 100644
--- /dev/null
+++ b/thunderbird/public_html/index.html
@@ -0,0 +1,29 @@
+<!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="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>
new file mode 100644
--- /dev/null
+++ b/thunderbird/public_html/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow: /
new file mode 100644
--- /dev/null
+++ b/thunderbird/win32/mozconfig
@@ -0,0 +1,9 @@
+ac_add_options --enable-application=mail
+ac_add_options --enable-update-channel=nightly
+ac_add_options --enable-update-packaging
+ac_add_options --disable-debug
+ac_add_options --enable-optimize
+ac_add_options --enable-jemalloc
+ac_add_options --disable-tests
+
+export MOZ_DEBUG_SYMBOLS=1