Aegisub/devel/tinderbox/buildbot/master/master.cfg

738 lines
20 KiB
INI

###############
# General Setup
###############
c = BuildmasterConfig = {}
# Import our passwords
passwd_file = open('passwd.py')
exec passwd_file
passwd_file.close()
c['db_url'] = "mysql://buildbot:%s@localhost/buildbot?max_idle=300" % passwd["mysql"]
# What port to listen on, used for try attempts as well.
c['slavePortnum'] = "tcp:9899:interface=68.233.14.102"
c['projectName'] = "Aegisub"
c['projectURL'] = "http://devel.aegisub.org/"
c['buildbotURL'] = "http://buildbot.aegisub.org/"
# Used for accepting wchange notifications (svn-commit-hook) _and_ try attempts.
from buildbot.changes.pb import PBChangeSource
c['change_source'] = PBChangeSource(port="tcp:9900:interface=127.0.0.1")
####################################
# Check if a file is worth a rebuild
####################################
re_common = [
'^trunk/aegisub/.*\.c$',
'^trunk/aegisub/.*\.cpp$',
'^trunk/aegisub/.*\.h$',
'^trunk/aegisub/FFmpegSource2/.*',
'^trunk/aegisub/src/include/aegisub/.*',
'^trunk/aegisub/src/boost/.*',
'^trunk/aegisub/src/bitmaps/.*',
'^trunk/aegisub/src/config/.*',
'^trunk/aegisub/universalchardet/.*',
'^trunk/aegisub/src/gl/.*',
'^trunk/aegisub/libaegisub/common/.*',
'^trunk/aegisub/libaegisub/include/.*',
'^trunk/aegisub/*.h',
'^trunk/aegisub/src/command/.*\.h$',
'^trunk/aegisub/src/command/.*\.cpp$',
]
re_common_unix = [
'^trunk/aegisub/configure.in$',
'^trunk/aegisub/libass/.*',
'^trunk/aegisub/.*Makefile.*$',
'^trunk/aegisub/m4macros/.*',
'^trunk/aegisub/scripts/unix-.*',
'^trunk/aegisub/src/libresrc/.*',
'^trunk/aegisub/po/.*',
'^trunk/aegisub/acinclude.m4$',
'^trunk/aegisub/desktop/.*'
'^trunk/aegisub/libaegisub/unix/.*',
]
re_osx = [
'^trunk/aegisub/src/libosxutil/.*',
'^trunk/aegisub/packages/osx_.*',
'^trunk/aegisub/scripts/osx-.*'
'^trunk/aegisub/libaegisub/osx/.*',
]
re_windows = [
'^trunk/aegisub/build/.*',
'^trunk/contrib/csri/.*',
'^trunk/contrib/lua51/.*',
'^trunk/contrib/hunspell/.*',
'^trunk/aegisub/packages/win_installer/.*',
'^trunk/aegisub/tinderbox/windows/.*',
'^trunk/aegisub/src/msvc/.*'
'^trunk/aegisub/libaegisub/windows/.*',
]
re_doxygen = [
'^trunk/aegisub/docs/doxygen/.*',
'^trunk/aegisub/src/.*\.c$',
'^trunk/aegisub/src/.*\.cpp$',
'^trunk/aegisub/src/.*\.h$',
'^trunk/aegisub/src/libosxutil/.*\.h$',
'^trunk/aegisub/src/libosxutil/.*\.c$',
'^trunk/aegisub/libaegisub/.*\.h$'
'^trunk/aegisub/libaegisub/.*\.cpp$'
'^trunk/aegisub/src/command/.*.h$'
'^trunk/aegisub/src/command/.*.cpp$'
'^trunk/aegisub/src/include/aegisub/.*'
'^trunk/aegisub/reporter/.*\.c$',
'^trunk/aegisub/reporter/.*\.cpp$',
'^trunk/aegisub/reporter/.*\.h$',
]
import re, string
def check_changes(files, re_array):
re_compiled = re.compile(string.joinfields(re_array, "|"), re.I)
for changed_file in files:
if re.match(re_compiled, changed_file):
return True
return False
def interested_windows(change):
return check_changes(change.files, re_common + re_windows)
def interested_unix(change):
return check_changes(change.files, re_common + re_common_unix)
def interested_osx(change):
return check_changes(change.files, re_common + re_common_unix + re_osx)
def interested_doxygen(change):
return check_changes(change.files, re_doxygen)
#############
# BUILDSLAVES
#############
from buildbot.buildslave import BuildSlave
c['slaves'] = [
BuildSlave("mochi", passwd['mochi'], max_builds=1, properties={'os':'Debian', 'version':'5.0.1', 'osname':'Squeeze'}),
BuildSlave("kokoro", passwd['kokoro'], max_builds=1, properties={'os':'OSX', 'version':'10.6.3', 'osname':'Snow Leopard'}),
BuildSlave("anpan", passwd['anpan'], max_builds=1, properties={'os':'Windows', 'version':'SP2', 'osname':'Vista'}),
BuildSlave("tako", passwd['tako'], max_builds=1, properties={'os':'FreeBSD', 'version':'9.0', 'osname':'CURRENT'}),
BuildSlave("nori", passwd['nori'], max_builds=1, properties={'os':'Ubuntu', 'version':'10.10', 'osname':'Maverick'}),
BuildSlave("mokona", passwd['mokona'], max_builds=1, properties={'os':'OSX', 'version': '10.4.11', 'osname':'Tiger'}),
BuildSlave("shoyu", passwd['shoyu'], max_builds=2, properties={'os':'FreeBSD', 'version': '???', 'osname':'???'})
]
###########
# FACTORIES
###########
from buildbot.steps import source, shell
from buildbot.steps.shell import Configure, Compile, WithProperties
from buildbot.process import factory
from buildbot import locks
from agi_upload import agi_upload
#from OOCompile import OOCompile
# General settings
source_unix = "http://svn.aegisub.org/trunk/aegisub/"
source_windows = "http://svn.aegisub.org/branches/windows"
stub = factory.BuildFactory()
##############
# Factory
# General Unix
##############
flinux = factory.BuildFactory()
flinux.addStep(source.SVN(mode="clobber", svnurl=source_unix))
flinux.addStep(shell.ShellCommand(
command=["./autogen.sh", "--skip-configure"],
env={
'ACLOCAL_FLAGS': '-I /home/verm/build/wx/share/aclocal'
},
name = "autogen",
description = ["autogening"],
descriptionDone = ["autogen"],
haltOnFailure=True
))
flinux.addStep(shell.ShellCommand(
command=["./configure",
WithProperties("--with-build-credit=BuildBot: %s (%s)", "buildername", "slavename"),
"--disable-check-wx-stc",
"--disable-check-wx-opengl",
"--with-wx-config=/home/verm/build/wx/bin/wx-config"
],
env={
'CC': '/usr/lib/ccache/gcc',
'CXX': '/usr/lib/ccache/g++',
'LDFLAGS': '-Wl,-rpath=/home/verm/build/wx/lib',
'CCACHE_PATH': '/usr/bin',
'CCACHE_DIR': '/home/verm/.ccache',
'LUA_CFLAGS': '-I/usr/include/lua5.1',
'LUA_LDFLAGS': '-llua5.1'
},
name = "configure",
description = ["configuring"],
descriptionDone = ["configure"],
logfiles={
'config.log': 'config.log',
'config.status': 'config.status'
},
haltOnFailure=True
))
flinux.addStep(Compile(
command=["make"],
env={
'CCACHE_PATH': '/usr/bin',
'CCACHE_DIR': '/home/verm/.ccache'
},
name = "build",
description = ["building"],
descriptionDone = ["build"],
haltOnFailure=True
))
#########
# Factory
# FreeBSD
#########
ffbsd = factory.BuildFactory()
ffbsd.addStep(source.SVN(mode="clobber", svnurl=source_unix))
ffbsd.addStep(shell.ShellCommand(
name = "autogen",
description = "autogening",
descriptionDone = "autogen",
haltOnFailure=True,
command=["./autogen.sh", "--skip-configure"],
env={
'ACLOCAL_FLAGS': '-I /usr/local/share/aclocal -I /home/verm/build/wx/share/aclocal',
'ACLOCAL': 'aclocal-1.11',
'AUTOCONF': 'autoconf-2.68',
'AUTOHEADER': 'autoheader-2.68'
}
))
ffbsd.addStep(shell.ShellCommand(
command=["./configure",
"--prefix=/usr/local",
WithProperties("--with-build-credit=BuildBot: %s (%s)", "buildername", "slavename"),
"--with-wx-config=/home/verm/build/wx/bin/wx-config",
"--enable-maintainer-mode",
"--disable-check-wx-opengl",
"--disable-check-wx-stc"
],
env={
'CCACHE_PATH': '/usr/bin:/usr/local/bin',
'CCACHE_DIR': '/usr/home/verm/.ccache',
'CC': '/usr/local/libexec/ccache/gcc',
'CXX': '/usr/local/libexec/ccache/g++',
'CFLAGS': '-I/usr/local/include',
'CXXFLAGS': '-I/usr/local/include',
'LDFLAGS': '-rpath /usr/home/verm/build/wx/lib',
# 'LUA_CFLAGS': '-I/usr/local/include/lua51',
# 'LUA_LDFLAGS': '-L/usr/local/lib -llua-5.1'
},
name = "configure",
description = ["configuring"],
descriptionDone = ["configure"],
logfiles={
'config.log': 'config.log',
'config.status': 'config.status'
},
haltOnFailure=True
))
ffbsd.addStep(Compile(
command=["gmake"],
name = "build",
description = ["building"],
descriptionDone = ["build"],
env={
'CCACHE_PATH': '/usr/bin:/usr/local/bin',
'CCACHE_DIR': '/usr/home/verm/.ccache'
},
haltOnFailure=True
))
###############
# Factory
# Unix Snapshot
###############
funix_dist = factory.BuildFactory()
funix_dist.addStep(source.SVN(mode="clobber", svnurl=source_unix))
funix_dist.addStep(shell.ShellCommand(
name = "dist",
description = "disting",
descriptionDone = "dist",
command=[
"sh",
"-x",
"tinderbox/unix/dist.sh",
WithProperties("%s", "got_revision"),
WithProperties("%s", "slavename"),
],
haltOnFailure=True
))
#funix_dist.addStep(agi_upload(
# blocksize=640*1024,
# slavesrc="dist.tar.bz2",
# mode=0644,
# masterdest=WithProperties("tinderbox/snapshot/aegisub-snap-r%s.tar.bz2", "got_revision"),
# name = "upload",
# description = ["uploading"],
# descriptionDone = ["uploaded"],
# haltOnFailure=False,
# flunkOnFailure=False
#))
############
# Factory
# OS X Intel
############
fosx = factory.BuildFactory()
fosx.addStep(source.SVN(mode="clobber", svnurl=source_unix))
fosx.addStep(shell.ShellCommand(
name = "autogen",
description = "autogening",
descriptionDone = "autogen",
haltOnFailure=True,
command=["./autogen.sh", "--skip-configure"],
env={
'ACLOCAL_FLAGS': '-I /Users/verm/prefix/share/aclocal -I /Developer/usr/share/aclocal -I /opt/local/share/aclocal',
'AUTOMAKE': '/Users/verm/prefix/bin/automake-1.10',
'ACLOCAL': '/Users/verm/prefix/bin/aclocal-1.10',
'AUTOCONF': '/Users/verm/prefix/bin/autoconf',
'AUTOHEADER': '/Users/verm/prefix/bin/autoheader',
'BIN_CONVERT': '/Users/verm/prefix/bin/convert'
}
))
fosx.addStep(shell.ShellCommand(
command=["./configure",
"--prefix=/Users/verm/prefix",
WithProperties("--with-build-credit=BuildBot: %s (%s)", "buildername", "slavename"),
"--with-apple-opengl-framework",
"--with-wx-config=/Users/verm/prefix/bin/wx-config",
"--enable-debug",
"--disable-check-wx-opengl",
"--disable-check-wx-stc"
],
env={
'CCACHE_PATH': '/usr/bin',
'CCACHE_DIR': '/Users/verm/.ccache',
'CC': '/opt/local/libexec/ccache/gcc',
'CXX': '/opt/local/libexec/ccache/g++',
'PKG_CONFIG': '/Users/verm/prefix/bin/pkg-config',
'PKG_CONFIG_PATH': '/Users/verm/prefix/lib/pkgconfig',
'CXXFLAGS': '-I/Users/verm/prefix/include',
'LDFLAGS': '-L/Users/verm/prefix/lib -Wl,-rpath=/Users/verm/prefix/lib',
'LUA_CFLAGS': '-I/Users/verm/prefix/include/lua51',
'LUA_LDFLAGS': '-L/Users/verm/prefix/lib/lua51 -llua',
'OPENAL_CFLAGS': '-framework OpenAL',
'OPENAL_LIBS': '-framework OpenAL',
'CFLAGS': '-I/Developer/SDKs/MacOSX10.5.sdk/usr/include',
'ICONV_LDFLAGS': '/usr/lib/libiconv.dylib',
},
name = "configure",
description = ["configuring"],
descriptionDone = ["configure"],
logfiles={
'config.log': 'config.log',
'config.status': 'config.status'
},
haltOnFailure=True
))
fosx.addStep(Compile(
command=["make"],
name = "build",
description = ["building"],
descriptionDone = ["build"],
env={
'CCACHE_PATH': '/usr/bin',
'CCACHE_DIR': '/Users/verm/.ccache'
},
haltOnFailure=True
))
fosx.addStep(shell.ShellCommand(
command=["make", "osx-tinderbox-bundle"],
env={
'T_BUNDLE': WithProperties("aegisub-%s-%s-%s-r%s", "buildername", "slavename", "buildnumber", "got_revision"),
},
name = "bundle",
description = ["bundling"],
descriptionDone = ["bundle"],
haltOnFailure=True
))
fosx.addStep(shell.ShellCommand(
command=["make", "osx-tinderbox-dmg"],
env={
'T_BUNDLE': WithProperties("aegisub-%s-%s-%s-r%s", "buildername", "slavename", "buildnumber", "got_revision"),
'T_DMG': WithProperties("aegisub-%s-%s-%s-r%s", "buildername", "slavename", "buildnumber", "got_revision"),
},
name = "dmg",
description = ["dmging"],
descriptionDone = ["dmg"],
haltOnFailure=True
))
#fosx.addStep(agi_upload(
# blocksize=640*1024,
# slavesrc="bundle.dmg",
# mode=0644,
# masterdest=WithProperties("tinderbox/osx/aegisub-%s-%s-%s-r%s.dmg", "buildername", "slavename", "buildnumber", "got_revision")),
# name = "upload",
# description = ["uploading"],
# descriptionDone = ["uploaded"],
# haltOnFailure=False,
# flunkOnFailure=False
#)
#########
# Factory
# Windows
#########
fwin = factory.BuildFactory()
fwin.addStep(source.SVN(mode="clobber", svnurl=source_windows))
fwin.addStep(shell.ShellCommand(
command=["copy aegisub\\tinderbox\\windows\\config_windows.h aegisub\\src\\config\\config_windows.h"],
name = "configure",
description = ["configuring"],
descriptionDone = ["configure"],
haltOnFailure=True
))
fwin.addStep(Compile(
command=["aegisub\\tinderbox\\windows\\anpan.bat", "Release", "Win32"],
name = "build",
description = ["building"],
descriptionDone = ["build"],
haltOnFailure=True
))
fwin.addStep(shell.ShellCommand(
command=[WithProperties("aegisub\\tinderbox\\windows\\dist.bat %s %s %s %s", "buildername", "slavename", "buildnumber", "got_revision")],
name = "dist",
description = ["dist"],
descriptionDone = ["dist"],
haltOnFailure=True
))
#fwin.addStep(agi_upload(
# blocksize=640*1024,
# slavesrc="dist.7z",
# mode=0644,
# masterdest=WithProperties("tinderbox/windows/aegisub-%s-%s-%s-r%s.7z", "buildername", "slavename", "buildnumber", "got_revision")),
# name = "upload",
# description = ["uploading"],
# descriptionDone = ["uploaded"],
# haltOnFailure=False,
# flunkOnFailure=False
#)
fwin64 = factory.BuildFactory()
fwin64.addStep(source.SVN(mode="clobber", svnurl=source_windows))
fwin64.addStep(shell.ShellCommand(
command=["copy aegisub\\tinderbox\\windows\\config_windows.h aegisub\\src\\config\\config_windows.h"],
name = "configure",
description = ["configuring"],
descriptionDone = ["configure"],
haltOnFailure=True
))
fwin64.addStep(Compile(
name = "build",
command=["aegisub\\tinderbox\\windows\\anpan.bat", "Release", "x64"],
description = ["building"],
descriptionDone = ["build"],
haltOnFailure=True
))
fwin64.addStep(shell.ShellCommand(
command=[WithProperties("aegisub\\tinderbox\\windows\\dist.bat %s %s %s %s", "buildername", "slavename", "buildnumber", "got_revision")],
name = "dist",
description = ["dist"],
descriptionDone = ["dist"],
haltOnFailure=True
))
#fwin64.addStep(agi_upload(
# blocksize=640*1024,
# slavesrc="dist.7z",
# mode=0644,
# masterdest=WithProperties("tinderbox/windows/aegisub-%s-%s-%s-r%s.7z", "buildername", "slavename", "buildnumber", "got_revision")),
# name = "upload",
# description = ["uploading"],
# descriptionDone = ["uploaded"],
# haltOnFailure=False,
# flunkOnFailure=False
#)
#########
# Factory
# WWW
#########
fwww_dox = factory.BuildFactory()
fwww_dox.addStep(source.SVN(mode="clobber", svnurl=source_unix))
fwww_dox.addStep(shell.ShellCommand(
name = "aegisub",
description = "generating",
descriptionDone = "aegisub",
logfiles={
'doxygen.log': 'doxygen.log'
},
command=[
"sh",
"-x",
"tinderbox/www/doxygen.sh",
"aegisub"
],
haltOnFailure=True
))
fwww_dox.addStep(shell.ShellCommand(
name = "libaegisub",
description = "generating",
descriptionDone = "libaegisub",
logfiles={
'doxygen.log': 'doxygen.log'
},
command=[
"sh",
"-x",
"tinderbox/www/doxygen.sh",
"libaegisub"
],
haltOnFailure=True
))
fwww_dox.addStep(shell.ShellCommand(
name = "reporter",
description = "generating",
descriptionDone = "reporter",
logfiles={
'doxygen.log': 'doxygen.log'
},
command=[
"sh",
"-x",
"tinderbox/www/doxygen.sh",
"reporter"
],
haltOnFailure=True
))
##########
# BUILDERS
##########
slave_win = ["anpan"]
slave_freebsd = ["tako"]
slave_debian = ["mochi"]
slave_ubuntu = ["nori"]
slave_osx = ["kokoro"]
slave_www = ['shoyu']
Windowsx8632 = { 'name': "Windows-x86_32", 'slavenames': slave_win, 'builddir': "full_Windows-x86_32", 'factory': fwin }
Windowsx8664 = { 'name': "Windows-x86_64", 'slavenames': slave_win, 'builddir': "full_Windows-x86_64", 'factory': fwin64 }
Darwinx8664 = { 'name': "Darwin-x86_64", 'slavenames': slave_osx, 'builddir': "full_Darwin-x86_64", 'factory': fosx }
FreeBSDx8664 = { 'name': "FreeBSD-x86_64", 'slavenames': slave_freebsd, 'builddir': "full_FreeBSD-x86_64", 'factory': ffbsd }
Ubuntux8664 = { 'name': "Ubuntu-x86_64", 'slavenames': slave_ubuntu, 'builddir': "full_Ubuntu-x86_64", 'factory': flinux }
Debianx8632 = { 'name': "Debian-x86_32", 'slavenames': slave_debian, 'builddir': "full_Debian-x86_32", 'factory': flinux }
UNIXDist = { 'name': "UNIX Dist", 'slavenames': slave_debian + slave_ubuntu + slave_freebsd, 'builddir': "UNIX_Dist", 'factory': funix_dist }
Doxygen = { 'name': "Doxygen", 'slavenames': slave_www, 'builddir': "www_Doxygen", 'factory': fwww_dox }
c['builders'] = [
Windowsx8632,
Windowsx8664,
Darwinx8664,
FreeBSDx8664,
Ubuntux8664,
Debianx8632,
UNIXDist,
Doxygen
]
builder_name_windows = [
"Windows-x86_32",
"Windows-x86_64"
]
builder_name_unix = [
"FreeBSD-x86_64",
"Ubuntu-x86_64",
"Debian-x86_32"
]
builder_name_darwin = [
"Darwin-x86_64"
]
builder_name_www = [
"Doxygen"
]
############
# SCHEDULERS
############
from buildbot.scheduler import Scheduler
from buildbot.scheduler import Dependent
full_windows = Scheduler(name="full_windows",
branch=None,
treeStableTimer=901,
builderNames=builder_name_windows,
fileIsImportant=interested_windows)
full_unix = Scheduler(name="full_unix",
branch=None,
treeStableTimer=901,
builderNames=builder_name_unix,
fileIsImportant=interested_unix)
full_darwin = Scheduler(name="full_darwin",
branch=None,
treeStableTimer=901,
builderNames=builder_name_darwin,
fileIsImportant=interested_osx)
full_www = Scheduler(name="full_www",
branch=None,
treeStableTimer=901,
builderNames=builder_name_www,
fileIsImportant=interested_doxygen)
unix_dist = Dependent("unix_dist",
full_unix,
builderNames=["UNIX Dist"])
from buildbot.scheduler import Try_Jobdir
try_job = Try_Jobdir("try", builder_name_windows + builder_name_unix + builder_name_darwin, jobdir="jobdir")
c['schedulers'] = [full_windows, full_unix, full_darwin, full_www, unix_dist]
from buildbot import scheduler
################
# STATUS TARGETS
################
c['status'] = []
# Website http://builder.aegisub.org/
from buildbot.status import html
c['status'].append(html.WebStatus(http_port="tcp:8001:interface=127.0.0.1", allowForce=1))
# Send out status emails.
from buildbot.status import mail
from buildbot.status.builder import Results
from datetime import datetime
def message(attrs):
text = list()
text.append("STATUS : %s" % attrs['result'].title())
text.append("REVISION : %s" % attrs['revision'])
text.append("BUILD URL : %s" % attrs['buildURL'])
text.append("COMMITTERS : %s" % ' '.join(sorted(attrs['responsibleUsers'])))
text.append("")
text.append("LOG FILES")
for log in attrs['logs']:
name, url, lines, logstatus = log
text.append(" %s (%s):\n %s" % (name, Results[logstatus], url))
text.append("")
if attrs['changes']:
text.append("CHANGES")
for change in attrs['changes']:
text.append(" Committer : %s" % change.who)
text.append(" Revision : %s" % change.revision)
text.append(" Changeset : http://devel.aegisub.org/changeset/%s" % change.revision)
text.append(" Time : %s" % datetime.fromtimestamp(change.when).strftime("%Y-%m-%d %H:%M:%S"))
text.append("")
text.append(" Files")
for file in change.files:
text.append(" %s" % file)
text.append(" Log:\n%s" % ' ' + change.comments.replace("\n", "\n "))
text.append("")
text.append("---------------------------------------------------------------")
text.append("")
text.append("")
text.append("- %s" % attrs['buildbotURL'])
return ("\n".join(text), 'plain')
c['status'].append(mail.MailNotifier(fromaddr="tinderbox@aegisub.org",
extraRecipients=["aegisub-tinderbox@aegisub.org"],
sendToInterestedUsers=False,
customMesg=message,
mode="problem",
extraHeaders={'Reply-To':'aegisub-tinderbox@aegisub.org'}))
# IRC!
from buildbot.status import words
c['status'].append(words.IRC(
host="irc.rizon.net",
nick="aegibuild",
channels=["#aegisub"],
notify_events={
'exception': 1,
'successToFailure': 1,
'failureToSuccess': 1
}
))
c['status'].append(words.IRC(
host="irc.freenode.net",
nick="aegibuild",
channels=["#aegisub"],
notify_events={
'exception': 1,
'successToFailure': 1,
'failureToSuccess': 1
}
))
# Realtime client
# from buildbot.status import client
# c['status'].append(client.PBListener(9988))