Commit f8b9a032 authored by Nicolas Boulenguez's avatar Nicolas Boulenguez

Merge tag 'upstream/1.4.0'

Upstream version 1.4.0
parents 9e16ba68 cd6aeaf3
......@@ -70,7 +70,6 @@ sdist_ubuntu: sdist_linux
# Launchpad does not support one size fits all packages...
cp dist/TaskCoach-$(TCVERSION).tar.gz dist/taskcoach_$(TCVERSION)-0ubuntu10~lucid.tar.gz
cp dist/TaskCoach-$(TCVERSION).tar.gz dist/taskcoach_$(TCVERSION)-0ubuntu12~precise.tar.gz
cp dist/TaskCoach-$(TCVERSION).tar.gz dist/taskcoach_$(TCVERSION)-0ubuntu13~saucy.tar.gz
cp dist/TaskCoach-$(TCVERSION).tar.gz dist/taskcoach_$(TCVERSION)-0ubuntu14~trusty.tar.gz
sdist_raw:
......@@ -110,15 +109,12 @@ ubuntu: sdist_ubuntu
mv build build-lucid
LC_ALL=C $(PYTHON) make.py bdist_ubuntu precise 12 --sdist=dist/taskcoach_$(TCVERSION)-0ubuntu12~precise.tar.gz
mv build build-precise
LC_ALL=C $(PYTHON) make.py bdist_ubuntu saucy 13 --sdist=dist/taskcoach_$(TCVERSION)-0ubuntu13~saucy.tar.gz
mv build build-saucy
LC_ALL=C $(PYTHON) make.py bdist_ubuntu trusty 14 --sdist=dist/taskcoach_$(TCVERSION)-0ubuntu14~trusty.tar.gz
mv build build-trusty
ppa_sign: ubuntu
cd build-lucid; debsign -k0x$(PGPID) taskcoach_$(TCVERSION)-0ubuntu10~lucid-1_source.changes
cd build-precise; debsign -k0x$(PGPID) taskcoach_$(TCVERSION)-0ubuntu12~precise-1_source.changes
cd build-saucy; debsign -k0x$(PGPID) taskcoach_$(TCVERSION)-0ubuntu13~saucy-1_source.changes
cd build-trusty; debsign -k0x$(PGPID) taskcoach_$(TCVERSION)-0ubuntu14~trusty-1_source.changes
# Split PPA by version because the upload has a tendency to fail so the buildbot must retry
......@@ -129,9 +125,6 @@ ppa_rel_lucid:
ppa_rel_precise:
cd build-precise; dput ppa:taskcoach-developers/release-snapshot taskcoach_$(TCVERSION)-0ubuntu12~precise-1_source.changes
ppa_rel_saucy:
cd build-saucy; dput ppa:taskcoach-developers/release-snapshot taskcoach_$(TCVERSION)-0ubuntu13~saucy-1_source.changes
ppa_rel_trusty:
cd build-trusty; dput ppa:taskcoach-developers/release-snapshot taskcoach_$(TCVERSION)-0ubuntu14~trusty-1_source.changes
......@@ -141,9 +134,6 @@ ppa_relnext_lucid:
ppa_relnext_precise:
cd build-precise; dput ppa:taskcoach-developers/nextrelease-snapshot taskcoach_$(TCVERSION)-0ubuntu12~precise-1_source.changes
ppa_relnext_saucy:
cd build-saucy; dput ppa:taskcoach-developers/nextrelease-snapshot taskcoach_$(TCVERSION)-0ubuntu13~saucy-1_source.changes
ppa_relnext_trusty:
cd build-trusty; dput ppa:taskcoach-developers/nextrelease-snapshot taskcoach_$(TCVERSION)-0ubuntu14~trusty-1_source.changes
......@@ -153,9 +143,6 @@ ppa_release_lucid:
ppa_release_precise:
cd build-precise; dput ppa:taskcoach-developers/ppa taskcoach_$(TCVERSION)-0ubuntu12~precise-1_source.changes
ppa_release_saucy:
cd build-saucy; dput ppa:taskcoach-developers/ppa taskcoach_$(TCVERSION)-0ubuntu13~saucy-1_source.changes
ppa_release_trusty:
cd build-trusty; dput ppa:taskcoach-developers/ppa taskcoach_$(TCVERSION)-0ubuntu14~trusty-1_source.changes
......
# -*- 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:
sudo -u www-data twistd --no_save -y buildbot.tac
stop:
kill `cat twistd.pid`
reconfig:
kill -HUP `cat twistd.pid`
log:
tail -f twistd.log
from twisted.application import service
from buildbot.master import BuildMaster
basedir = r'/home/buildmaster'
configfile = r'master.cfg'
rotateLength = 1000000
maxRotatedFiles = None
application = service.Application('buildmaster')
try:
from twisted.python.logfile import LogFile
from twisted.python.log import ILogObserver, FileLogObserver
logfile = LogFile.fromFullPath("twistd.log", rotateLength=rotateLength,
maxRotatedFiles=maxRotatedFiles)
application.setComponent(ILogObserver, FileLogObserver(logfile).emit)
except ImportError:
# probably not yet twisted 8.2.0 and beyond, can't set log yet
pass
BuildMaster(basedir, configfile).setServiceParent(application)
#!/usr/bin/python
import os, re, sys
def findLatest(path, valid):
rx = re.compile(r'(.*)(\d+\.\d+\.\d+\.\d+)(.*)')
results = dict()
for name in os.listdir(path):
if (name.lower().startswith('taskcoach') or name.lower().startswith('x-taskcoach')) and valid(name):
mt = rx.search(name)
if mt:
ls = results.get((mt.group(1), mt.group(3)), [])
ls.append(map(int, mt.group(2).split('.')))
results[(mt.group(1), mt.group(3))] = ls
packages = []
for (part1, part3), versions in results.items():
versions.sort()
packages.append('%s%s%s' % (part1, '.'.join(map(str, versions[-1])), part3))
packages.sort()
return packages
def listPath(path):
def isSource(name):
if name.endswith('.tar.gz') or name.endswith('.src.rpm') or name.endswith('.tgz'):
return True
if name.endswith('.zip'):
return not name.endswith('_rev1.zip')
return False
print '<table border="0">'
changelog = os.path.join(path, 'changelog_content')
if os.path.exists(changelog):
print '<tr><td colspan="2"><pre>'
print file(changelog, 'rb').read()
print '</td></tr></pre>'
print '<tr><th colspan="2"><h2>Sources</h2></th></tr>'
for pkgname in findLatest(path, isSource):
print '<tr>'
print '<td><img src="source.png" /></td>'
print '<td>'
if path == '.' or path == 'all':
print '<a href="http://www.fraca7.net/TaskCoach-packages/%s">%s</a>' % (pkgname, pkgname)
else:
print '<a href="http://www.fraca7.net/TaskCoach-packages/%s/%s">%s</a>' % (path, pkgname, pkgname)
print '</td>'
print '</tr>'
print '<tr><th colspan="2"><h2>Binaries</h2></th></tr>'
for pkgname in findLatest(path, lambda x: not isSource(x)):
print '<tr>'
img = 'binary.png'
if pkgname.endswith('.dmg'):
img = 'mac.png'
elif pkgname.endswith('.exe'):
img = 'windows.png'
elif pkgname.endswith('.rpm') or pkgname.endswith('.deb'):
img = 'linux.png'
print '<td><img src="%s" /></td>' % img
print '<td>'
if path == '.' or path == 'all':
print '<a href="http://www.fraca7.net/TaskCoach-packages/%s">%s</a>' % (pkgname, pkgname)
else:
print '<a href="http://www.fraca7.net/TaskCoach-packages/%s/%s">%s</a>' % (path, pkgname, pkgname)
print '</td>'
print '</tr>'
print '</table>'
print '<hr />'
def main(path):
print 'Content-type: text/html'
print
print '<html><head><title>Latest Task Coach builds</title>'
print '<style type="text/css" media="screen">@import "default.css";</style>'
print '</head><body><center>'
if path == '.' or path == 'all':
print '<h1>New developments (from trunk)</h1>'
listPath('.')
if path != '.':
for name in sorted(os.listdir(path), cmp=lambda x, y: cmp(y, x)): # Feature should come first
if name.startswith('Release') or name.startswith('Feature'):
fname = os.path.join(path, name)
if os.path.isdir(fname):
if name.startswith('Release'):
print '<h1>Bug fixes (from %s)</h1>' % name
else:
print '<h1>Experimental features (from %s)</h1>' % name
listPath(fname)
print '<a href="http://www.taskcoach.org/download.html>Back to Task Coach downloads</a>'
print '</center></body></html>'
if __name__ == '__main__':
if sys.argv[0].endswith('latest_features.py'):
main('.')
elif sys.argv[0].endswith('latest_bugfixes.py'):
main('branches')
else:
main('all')
This diff is collapsed.
body {
margin-bottom:50px;
}
body, td {
font-family: Verdana, Cursor;
font-size: 10px;
font-weight: bold;
}
a:link,a:visited,a:active {
color: #444;
}
a:hover {
color: #000000;
}
table {
border-spacing: 1px 1px;
}
table td {
padding: 3px 0px 3px 0px;
text-align: center;
}
.Project {
width: 100px;
}
.LastBuild, .Activity {
padding: 0 0 0 4px;
}
.LastBuild, .Activity, .Builder, .BuildStep {
width: 155px;
max-width: 155px;
}
div.BuildResultInfo {
color: #444;
}
div.Announcement {
margin-bottom: 1em;
}
div.Announcement > a:hover {
color: black;
}
div.Announcement > div.Notice {
background-color: #afdaff;
padding: 0.5em;
font-size: 16px;
text-align: center;
}
div.Announcement > div.Open {
border: 3px solid #8fdf5f;
padding: 0.5em;
font-size: 16px;
text-align: center;
}
div.Announcement > div.Closed {
border: 5px solid #e98080;
padding: 0.5em;
font-size: 24px;
font-weight: bold;
text-align: center;
}
td.Time {
color: #000;
border-bottom: 1px solid #aaa;
background-color: #eee;
}
td.Activity, td.Change, td.Builder {
color: #333333;
background-color: #CCCCCC;
}
td.Change {
border-radius: 5px;
-webkit-border-radius: 5px;
}
td.Event {
color: #777;
background-color: #ddd;
border-radius: 5px;
-webkit-border-radius: 5px;
}
td.Activity {
border-top-left-radius: 10px;
-webkit-border-top-left-radius: 10px;
min-height: 20px;
padding: 2px 0 2px 0;
}
td.idle, td.waiting, td.offline, td.building {
border-top-left-radius: 0px;
-webkit-border-top-left-radius: 0px;
}
.LastBuild {
border-top-left-radius: 5px;
-webkit-border-top-left-radius: 5px;
border-top-right-radius: 5px;
-webkit-border-top-right-radius: 5px;
}
/* LastBuild, BuildStep states */
.success {
color: #FFFFFF;
background-color: #8fdf5f;
}
.failure {
color: #FFFFFF;
background-color: #e98080;
}
.warnings {
color: #FFFFFF;
background-color: #ffc343;
}
.exception, td.offline {
color: #FFFFFF;
background-color: #e0b0ff;
}
.start,.running, td.building {
color: #666666;
background-color: #fffc6c;
}
.start {
border-bottom-left-radius: 10px;
-webkit-border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
-webkit-border-bottom-right-radius: 10px;
}
.closed {
background-color: #ff0000;
}
.closed .large {
font-size: 1.5em;
font-weight: bolder;
}
td.Project a:hover, td.start a:hover {
color: #000;
}
.mini-box {
text-align:center;
height:20px;
padding:0 2px;
line-height:0;
white-space:nowrap;
}
.mini-box a {
border-radius:0;
-webkit-border-radius:0;
display:block;
width:100%;
height:20px;
line-height:20px;
margin-top:-30px;
}
.mini-closed {
-box-sizing:border-box;
-webkit-box-sizing:border-box;
border:4px solid red;
}
User-agent: *
Disallow: /waterfall
Disallow: /builders
Disallow: /changes
Disallow: /buildslaves
Disallow: /schedulers
Disallow: /one_line_per_build
Disallow: /builders
Disallow: /grid
Disallow: /tgrid
Disallow: /json
This diff is collapsed.
{% extends 'layout.html' %}
{% import 'forms.html' as forms %}
{% block content %}
<h1>Welcome to the Buildbot
{%- if title -%}
&nbsp;for the&nbsp;
{%- if title_url -%}
<a href="{{ title_url }}">{{ title }}</a>
{%- else -%}
{{ title }}
{%- endif -%}
&nbsp;project
{%- endif -%}
!
</h1>
<div class="column">
<ul>
{% set item_class=cycler('alt', '') %}
<li class="{{ item_class.next() }}"><a
href="http://www.fraca7.net/TaskCoach-packages/latest_bugfixes.py">Latest
bugfix packages</a>.</li>
<li class="{{ item_class.next() }}"><a href="http://www.fraca7.net/TaskCoach-packages/latest.py">All
latest packages</a> grouped by branch.</li>
<li class="{{ item_class.next() }}">The <a href="waterfall">Waterfall Display</a> will give you a
time-oriented summary of recent buildbot activity. <a href="waterfall/help">Waterfall Help.</a></li>
<li class="{{ item_class.next() }}">The <a href="grid">Grid Display</a> will give you a
developer-oriented summary of recent buildbot activity.</li>
<li class="{{ item_class.next() }}">The <a href="tgrid">Transposed Grid Display</a> presents
the same information as the grid, but lists the revisions down the side.</li>
<li class="{{ item_class.next() }}">The <a href="console">Console</a> presents
a user-oriented status page.</li>
<li class="{{ item_class.next() }}">The <a href="builders">Builders</a> and their most recent builds are
here.</li>
<li class="{{ item_class.next() }}"><a href="one_line_per_build">Recent Builds</a> are summarized here, one
per line.</li>
<li class="{{ item_class.next() }}"><a href="buildslaves">Buildslave</a> information</li>
<li class="{{ item_class.next() }}"><a href="changes">Changesource</a> information.</li>
<li class="{{ item_class.next() }}"><a href="about">About</a> this Buildbot</li>
</ul>
{%- if authz.advertiseAction('cleanShutdown', request) -%}
{%- if shutting_down -%}
Master is shutting down<br/>
{{ forms.cancel_clean_shutdown(cancel_shutdown_url, authz) }}
{%- else -%}
{{ forms.clean_shutdown(shutdown_url, authz) }}
{%- endif -%}
{%- endif -%}
<p><i>This and other pages can be overridden and customized.</i></p>
</div>
{% endblock %}
# -*- 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
from twisted.application import service
from buildbot.slave.bot import BuildSlave
from buildslave.bot import BuildSlave
basedir = r'/home/jerome/Buildslave'
host = '192.168.1.2'
port = 9989
slavename = 'Ubuntu9'
slavename = 'Fedora14'
passwd = file('.passwd', 'rb').readlines()[0].strip()
keepalive = 600
usepty = 1
......
Your Name Here <admin@youraddress.invalid>
Please put a description of this build host here
# -*- 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:
python /usr/bin/twistd --no_save -y buildbot.tac
stop:
kill `cat twistd.pid`
reconfig:
kill -HUP `cat twistd.pid`
log:
tail -f twistd.log
from twisted.application import service
from buildbot.slave.bot import BuildSlave
from buildslave.bot import BuildSlave
basedir = r'/Users/fraca7/Buildslave'
buildmaster_host = '192.168.1.2'
......@@ -9,7 +9,7 @@ slavename = 'MacOS'
passwd = file('.passwd', 'rb').readlines()[0].strip()
keepalive = 600
usepty = 1
umask = None
umask = 0022
application = service.Application('buildslave')
s = BuildSlave(buildmaster_host, port, slavename, passwd, basedir,
......
Task Coach Mac OS X build slave
# -*- 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
from twisted.application import service
from buildbot.slave.bot import BuildSlave
from buildslave.bot import BuildSlave
basedir = r'/home/jerome/Buildslave'
host = '192.168.1.2'
port = 9989
slavename = 'Ubuntu8'
slavename = 'OpenSuse'
passwd = file('.passwd', 'rb').readlines()[0].strip()
keepalive = 600
usepty = 1
......
Your Name Here <admin@youraddress.invalid>
Please put a description of this build host here
# -*- 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
from twisted.application import service
from buildbot.slave.bot import BuildSlave
from buildslave.bot import BuildSlave
basedir = r'/home/jerome/Buildslave'
basedir = r'/home/jerome/Buildslave_Release'
host = '192.168.1.2'
port = 9989
slavename = 'Fedora12'
slavename = 'Release'
passwd = file('.passwd', 'rb').readlines()[0].strip()
keepalive = 600
usepty = 1
......
Your Name Here <admin@youraddress.invalid>
Please put a description of this build host here
# -*- 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`