<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>a little madness</title>
	<atom:link href="http://www.alittlemadness.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alittlemadness.com</link>
	<description>A man needs a little madness, or else he never dares cut the rope and be free. -Nikos Kazantzakis</description>
	<lastBuildDate>Wed, 26 Oct 2011 04:14:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Pulse Sample and Community Plugins</title>
		<link>http://www.alittlemadness.com/2011/10/26/pulse-sample-and-community-plugins/</link>
		<comments>http://www.alittlemadness.com/2011/10/26/pulse-sample-and-community-plugins/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 04:14:48 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Zutubi]]></category>

		<guid isPermaLink="false">http://www.alittlemadness.com/?p=775</guid>
		<description><![CDATA[Since version 2.0, Pulse has supported plugins to extend integration with external tools.  Whenever customers have asked for help with plugin implementation, we&#8217;ve always provided samples as the easiest starting point.  Seeing a complete plugin project, with build and packaging support, is the easiest way to get a new plugin up and running.
Based [...]]]></description>
			<content:encoded><![CDATA[<p>Since version 2.0, <a href="http://zutubi.com/products/pulse/">Pulse</a> has supported plugins to extend integration with external tools.  Whenever customers have asked for help with plugin implementation, we&#8217;ve always provided samples as the easiest starting point.  Seeing a complete plugin project, with build and packaging support, is the easiest way to get a new plugin up and running.</p>
<p>Based on this we&#8217;ve decided to start maintaining a repository of open source Pulse plugins.  These will act both as samples and in some cases as early versions of plugins that may migrate into the  core Pulse distribution.  The sample plugins are hosted in a Mercurial repository which has an hgweb interface:</p>
<p><a href="http://hg.zutubi.com/">http://hg.zutubi.com/</a></p>
<p>So far we have provided a sample JUnit test post-processor (simplified from the version shipped with Pulse), and the beginnings of a Subversion SCM plugin (wrapping the svn command line).  Provided you have Mercurial installed, you can easily clone the samples over HTTP, e.g.:</p>
<p>$ hg clone http://hg.zutubi.com/com.zutubi.pulse.core.postprocessors.junits</p>
<p>The samples have README files to get you started.</p>
<p>You may notice there is a third sample: a plugin that provides basic SCM integration with <a href="http://bazaar.canonical.com/">Bazaar</a> by wrapping the bzr command-line.  I&#8217;m happy to report that this sample was generously donated by a member of the community, Michiel van Slobbe.  Michiel is the first to try to get Pulse and Bazaar working together and we appreciate the effort!  Hopefully it will provide inspiration for other community members.</p>
<p>Although we are happy to provide hosting for such community plugins, you may also choose your own path.  Another member of the community, Orvid, is using Pulse for C#/Mono projects.  Orvid has taken the initiative of writing a command plugin to integrate <a href="http://www.mono-project.com/Microsoft.Build">XBuild</a>, the Mono equivalent of Microsoft&#8217;s MSBuild, with Pulse.  You can find the XBuild plugin on GitHub:</p>
<p><a href="https://github.com/Orvid/XBuildIntegration">https://github.com/Orvid/XBuildIntegration</a></p>
<p>You might also notice that Orvid has been working on a .Net wrapper for the Pulse remote API:</p>
<p><a href="https://github.com/Orvid/Zutubi.Pulse.Api">https://github.com/Orvid/Zutubi.Pulse.Api</a></p>
<p>These efforts are a great contribution that we are most thankful for!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alittlemadness.com/2011/10/26/pulse-sample-and-community-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pulse Continuous Integration Server 2.4 Released!</title>
		<link>http://www.alittlemadness.com/2011/08/10/pulse-continuous-integration-server-2-4-released/</link>
		<comments>http://www.alittlemadness.com/2011/08/10/pulse-continuous-integration-server-2-4-released/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 07:57:44 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Zutubi]]></category>

		<guid isPermaLink="false">http://www.alittlemadness.com/?p=771</guid>
		<description><![CDATA[Happy days: we&#8217;ve now released Pulse 2.4!  Thanks to all those that provided feedback during the Pulse 2.4 beta period.  Here&#8217;s a recap of the major updates in this release:

Mercurial support: in the form of a new plugin.
Maven 3 support: including a command, post-processor and resource discovery.
Agents page updates: with graphical status and [...]]]></description>
			<content:encoded><![CDATA[<p>Happy days: we&#8217;ve now released <a href="http://zutubi.com/products/pulse/">Pulse 2.4</a>!  Thanks to all those that provided feedback during the Pulse 2.4 beta period.  Here&#8217;s a recap of the major updates in this release:</p>
<ul>
<li><b>Mercurial support</b>: in the form of a new plugin.</li>
<li><b>Maven 3 support</b>: including a command, post-processor and resource discovery.</li>
<li><b>Agents page updates</b>: with graphical status and more convenient navigation.</li>
<li><b>Reworked agent status tab</b>: with more build links and efficient live updates.</li>
<li><b>New agent history tab</b>: quickly browse all builds that involved an agent.</li>
<li><b>Reworked server activity tab</b>: showing build stages nested under active builds.</li>
<li><b>Pause server</b>: admins can pause the build queue, so all triggers are ignored.</li>
<li><b>New server history tab</b>: showing build history across all projects.</li>
<li><b>Restyled info and messages tabs</b>: for both the agents and server sections.</li>
<li><b>Improved process termination</b>: to make terminating builds more reliable.</li>
<li><b>Kill build action</b>: for quicker build termination forgoing full clean up.</li>
<li><b>Improved changelist views</b>: these views have been reworked in the new style.</li>
<li><b>Pinned builds</b>: mark builds that should never be deleted or cleaned.</li>
<li><b>Templated field actions</b>: easily find or revert to an inherited value.</li>
<li><b>Introduce parent refactoring</b>: adjust your template hierarchy over time.</li>
<li><b>Pluggable resource discovery</b>: automatically locate build tools and libraries.</li>
<li><b>Subversion changelist support</b>: easily submit a changelist as a personal build.</li>
<li><b>&#8230; and more</b>: extra UI touches, improved performance, more plugin support implementations and more.</li>
</ul>
<p>The <a href="http://zutubi.com/products/pulse/new/">new in 2.4 page</a> on our website has more details and a few screenshots.  Or you can simply <a href="http://zutubi.com/products/pulse/downloads/">download and try Pulse 2.4 for free</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alittlemadness.com/2011/08/10/pulse-continuous-integration-server-2-4-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pulse 2.4 Release Candidate</title>
		<link>http://www.alittlemadness.com/2011/07/16/pulse-2-4-release-candidate/</link>
		<comments>http://www.alittlemadness.com/2011/07/16/pulse-2-4-release-candidate/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 13:11:11 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Zutubi]]></category>

		<guid isPermaLink="false">http://www.alittlemadness.com/?p=764</guid>
		<description><![CDATA[After a few iterations of Pulse 2.4 beta builds, we&#8217;ve finally reached a stable enough state to declare our first release candidate.  Since the original 2.4 beta post, we haven&#8217;t just been squishing bugs, but have come up with several more improvements:

New agent history tab: quickly browse all builds that involved an agent.
Pause server: [...]]]></description>
			<content:encoded><![CDATA[<p>After a few iterations of <a href="http://zutubi.com/products/pulse/">Pulse</a> 2.4 beta builds, we&#8217;ve finally reached a stable enough state to declare our first <strong>release candidate</strong>.  Since the <a href="/2011/06/01/pulse-2-4-beta/">original 2.4 beta post</a>, we haven&#8217;t just been squishing bugs, but have come up with several more improvements:</p>
<ul>
<li><b>New agent history tab</b>: quickly browse all builds that involved an agent.</li>
<li><b>Pause server</b>: admins can pause the build queue, so all triggers are ignored.</li>
<li><b>Improved changelist views</b>: these views have been reworked in the new style.</li>
<li><b>Pinned builds</b>: mark builds that should never be deleted or cleaned.</li>
<li><b>Subversion changelist support</b>: easily submit a changelist as a personal build.</li>
<li><b>Faster browse view</b>: most of these optimisations also appear in Pulse 2.3.
<li><b>Improved process termination</b>: to make terminating builds more reliable.</li>
</ul>
<p>We know from feedback that these changes will be popular!  Check them out yourself: release candidate builds are available from the <a href="http://confluence.zutubi.com/display/pulse0204/Beta+Program">Beta Program</a> page.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alittlemadness.com/2011/07/16/pulse-2-4-release-candidate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pulse 2.4 Beta!</title>
		<link>http://www.alittlemadness.com/2011/06/01/pulse-2-4-beta/</link>
		<comments>http://www.alittlemadness.com/2011/06/01/pulse-2-4-beta/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 06:29:58 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.alittlemadness.com/?p=760</guid>
		<description><![CDATA[Another lull in the blog post frequency should have been a clue: we were hard at work on the next major Pulse release.  So it is with great pleasure that I announce the first Pulse 2.4 beta build!  This version brings further usability improvements throughout both the reporting and administration interfaces, along with [...]]]></description>
			<content:encoded><![CDATA[<p>Another lull in the blog post frequency should have been a clue: we were hard at work on the next major <a href="http://zutubi.com/products/pulse/">Pulse</a> release.  So it is with great pleasure that I announce the first <a href="http://confluence.zutubi.com/display/pulse0204/Beta+Program">Pulse 2.4 beta</a> build!  This version brings further usability improvements throughout both the reporting and administration interfaces, along with built in support for new tools. Key updates include:</p>
<ul>
<li><b>Mercurial support</b>: in the form of a new plugin.</li>
<li><b>Maven 3 support</b>: including a command, post-processor and resource discovery.</li>
<li><b>Agents page updates</b>: with graphical agent status and more convenient navigation.</li>
<li><b>Reworked agent status tab</b>: with more build links and efficient live updates.</li>
<li><b>New server history tab</b>: showing build history across all projects.</li>
<li><b>Reworked server activity tab</b>: showing build stages nested under active builds.</li>
<li><b>Restyled info and messages tabs</b>: for both the agents and server sections.</li>
<li><b>Kill build action</b>: for quicker build termination forgoing full clean up.</li>
<li><b>Templated field actions</b>: easily find or revert to an inherited value.</li>
<li><b>Introduce parent refactoring</b>: adjust your template hierarchy over time.</li>
<li><b>Pluggable resource discovery</b>: automatically locate build tools and libraries.</li>
<li><b>&#8230; and more</b>: extra UI touches, more plugin support implementations and more.</li>
</ul>
<p>See the <a href="http://confluence.zutubi.com/display/pulse0204/Beta+Program">Beta Program page</a> to download and try Pulse 2.4, and for full details.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alittlemadness.com/2011/06/01/pulse-2-4-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pulse Continuous Integration Server 2.3 Released!</title>
		<link>http://www.alittlemadness.com/2011/03/16/pulse-continuous-integration-server-2-3-released/</link>
		<comments>http://www.alittlemadness.com/2011/03/16/pulse-continuous-integration-server-2-3-released/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 08:39:15 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.alittlemadness.com/?p=758</guid>
		<description><![CDATA[Exciting news: we&#8217;ve made our first stable release of Pulse 2.3!  This new release includes a host of new features, with an emphasis on usability and saving time.  New features include:

Concurrent project builds: increased throughput for rapidly-changing projects.
Project and stage priorities: allow important builds to jump the queue.
An all-new project home tab: with [...]]]></description>
			<content:encoded><![CDATA[<p>Exciting news: we&#8217;ve made our first stable release of <a href="http://zutubi.com/products/pulse/">Pulse 2.3</a>!  This new release includes a host of new features, with an emphasis on usability and saving time.  New features include:</p>
<ul>
<li>Concurrent project builds: increased throughput for rapidly-changing projects.</li>
<li>Project and stage priorities: allow important builds to jump the queue.</li>
<li>An all-new project home tab: with clearer project status.</li>
<li>An all-new project history tab: with easily customised columns.</li>
<li>An improved build status tab: the build status is obvious at a glance.</li>
<li>A restyled my builds tab: also easier to customise.</li>
<li>Plugin synchronisation from master to agents: to save on admin time.</li>
<li>Improved UI performance: via more efficient live updates.</li>
<li>Google Test support: integrate C++ test results.</li>
<li>Terminated build status: clearly identify explicitly-killed builds.</li>
<li>&#8230;much more: dozens more improvements and fixes.</li>
</ul>
<p>Pulse is <b>free</b> for open source, small teams and evaluation.  Why not <a href="http://zutubi.com/products/pulse/downloads/">download Pulse</a> today and try it for yourself!  Setup takes only a matter of minutes, as shown in our <a href="http://zutubi.com/products/pulse/videos/">demo videos</a>.</p>
<p>Thanks to all users that gave help and feedback over the 2.3 development cycle!  We hope you enjoy using Pulse as much as we enjoy making it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alittlemadness.com/2011/03/16/pulse-continuous-integration-server-2-3-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android JUnit XML Reports: Multiple File Support</title>
		<link>http://www.alittlemadness.com/2011/02/23/android-junit-xml-reports-multiple-file-support/</link>
		<comments>http://www.alittlemadness.com/2011/02/23/android-junit-xml-reports-multiple-file-support/#comments</comments>
		<pubDate>Wed, 23 Feb 2011 05:08:55 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.alittlemadness.com/?p=749</guid>
		<description><![CDATA[Due to popular demand, I&#8217;ve added support for multiple output files (one per test suite) to android-junit-report.
For simplicity and efficiency, android-junit-report does not produce files in the exact format used by the Ant JUnit task.  In the 1.1 release there are two main differences:

A single report file is produced containing all test suites.
Redundant information, [...]]]></description>
			<content:encoded><![CDATA[<p>Due to popular demand, I&#8217;ve added support for multiple output files (one per test suite) to <a href="https://github.com/jsankey/android-junit-report">android-junit-report</a>.</p>
<p>For simplicity and efficiency, android-junit-report does not produce files in the exact format used by the Ant JUnit task.  In the 1.1 release there are two main differences:</p>
<ol>
<li>A single report file is produced containing all test suites.</li>
<li>Redundant information, such as the number of cases, failures etc is not added using attributes on the testsuite tag.</li>
</ol>
<p>It turns out the first of these restrictions caused multiple users issues with tools accustomed to handling a single report file per suite.  So in the latest 1.2 release I have added a new multiFile option.  When this option is enabled, android-junit-report produces a separate output file for each test suite.  This does mean that to retrieve the results from the device you will need to pull a whole directory.</p>
<p>To enable this option from an Ant build, you can override the default run-tests target as follows:</p>
<div class="codesnip-container" >
<div class="xml codesnip" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;target</span> <span class="re0">name</span>=<span class="st0">&quot;run-tests&quot;</span> <span class="re0">depends</span>=<span class="st0">&quot;-install-tested-project, install&quot;</span></span><br />
<span class="sc3"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">description</span>=<span class="st0">&quot;Runs tests from the package defined in test.package property&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;property</span> <span class="re0">name</span>=<span class="st0">&quot;reports.dir&quot;</span> <span class="re0">value</span>=<span class="st0">&quot;${out.dir}/reports&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;property</span> <span class="re0">name</span>=<span class="st0">&quot;files.dir&quot;</span> <span class="re0">value</span>=<span class="st0">&quot;/data/data/${tested.manifest.package}/files&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;echo<span class="re2">&gt;</span></span></span>Cleaning up previous test reports&#8230;<span class="sc3"><span class="re1">&lt;/echo<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;delete</span> <span class="re0">dir</span>=<span class="st0">&quot;${reports.dir}&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;exec</span> <span class="re0">executable</span>=<span class="st0">&quot;${adb}&quot;</span> <span class="re0">failonerror</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">line</span>=<span class="st0">&quot;${adb.device.arg}&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;shell&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;rm&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;${files.dir}/*&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/exec<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;echo<span class="re2">&gt;</span></span></span>Running tests&#8230;<span class="sc3"><span class="re1">&lt;/echo<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;exec</span> <span class="re0">executable</span>=<span class="st0">&quot;${adb}&quot;</span> <span class="re0">failonerror</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">line</span>=<span class="st0">&quot;${adb.device.arg}&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;shell&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;am&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;instrument&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;-w&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;-e&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;coverage&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;@{emma.enabled}&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;-e&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;multiFile&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;true&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;${manifest.package}/${test.runner}&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/exec<span class="re2">&gt;</span></span></span> &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;echo<span class="re2">&gt;</span></span></span>Downloading XML test reports&#8230;<span class="sc3"><span class="re1">&lt;/echo<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;mkdir</span> <span class="re0">dir</span>=<span class="st0">&quot;${reports.dir}&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;exec</span> <span class="re0">executable</span>=<span class="st0">&quot;${adb}&quot;</span> <span class="re0">failonerror</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">line</span>=<span class="st0">&quot;${adb.device.arg}&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;pull&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;${files.dir}&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;arg</span> <span class="re0">value</span>=<span class="st0">&quot;${reports.dir}&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/exec<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/target<span class="re2">&gt;</span></span></span></div>
</div>
<p>You can learn more about android-junit-report and/or download the new release using the links below:</p>
<ul>
<li><a href="http://www.alittlemadness.com/2010/07/14/android-testing-xml-reports-for-continuous-integration/">Original blog post</a></li>
<li><a href="https://github.com/jsankey/android-junit-report/downloads">Pre-built jar downloads</a></li>
<li><a href="https://github.com/jsankey/android-junit-report">Project home and documentation</a></li>
<li><a href="http://pulse.zutubi.com/browse/projects/android-junit-report-release/">Build Server</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.alittlemadness.com/2011/02/23/android-junit-xml-reports-multiple-file-support/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Android: Automated Build Versioning</title>
		<link>http://www.alittlemadness.com/2010/10/05/android-automated-build-versioning/</link>
		<comments>http://www.alittlemadness.com/2010/10/05/android-automated-build-versioning/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 05:16:41 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Project Automation]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.alittlemadness.com/?p=734</guid>
		<description><![CDATA[The Android SDK documentation offers a guide for Versioning Your Applications.  In short, applications have two version fields:

versionCode: a simple integer that you should increase with each new release.  Being an integer, the code can be processed in software (e.g. other applications) if required.
versionName: a free-form string you can use as the customer-facing [...]]]></description>
			<content:encoded><![CDATA[<p>The Android SDK documentation offers a guide for <a href="http://developer.android.com/guide/publishing/versioning.html">Versioning Your Applications</a>.  In short, applications have two version fields:</p>
<ol>
<li>versionCode: a simple integer that you should increase with each new release.  Being an integer, the code can be processed in software (e.g. other applications) if required.</li>
<li>versionName: a free-form string you can use as the customer-facing version for your application.  A typical format would be dotted-decimal (e.g. 1.2.0), although any form is allowed.</li>
</ol>
<p>This version scheme is simple and allows you the flexibility to choose your own naming scheme.  One annoyance, however, is that the version is specified in the AndroidManifest.xml file:</p>
<pre class="brush: xml;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
        package=&quot;com.zutubi.android.example&quot;
        android:versionCode=&quot;1&quot;
        android:versionName=&quot;1.0&quot;&gt;
    &lt;application android:name=&quot;.ExampleApplication&quot;&gt;
        ...
    &lt;/application&gt;
&lt;/manifest&gt;</pre>
<p>The problem here is that the manifest is a version controlled file that also contains other vital information about the application.  This makes it inconvenient to automate stamping your application with a new version for each release.</p>
<p>This motivated me to create a couple of Ant tasks which make it easy to set the version of your Android applications from your Ant build.  I&#8217;ve released them as part of an initial version of the <a href="http://github.com/jsankey/zutubi-android-ant">zutubi-android-ant</a> project.  So far there are two tasks: setversion and bumpversion.</p>
<h4>setversion</h4>
<p>This task allows you to explicitly set the version code and/or name for your application to specified values.  Typically these values would be specified indirectly via Ant properties.  The properties would be set by some other process (e.g. automatic generation based on the date, an input prompt, a property from your build server, or an read from an unversioned properties file).</p>
<p>For example, to set the versions based on Ant properties, prompting if those properties are not yet defined:</p>
<pre class="brush: xml;">&lt;target name=&quot;set-version&quot;&gt;
    &lt;input addproperty=&quot;version.code&quot; message=&quot;Version Code:&quot;/&gt;
    &lt;input addproperty=&quot;version.name&quot; message=&quot;Version Name:&quot;/&gt;
    &lt;zaa:setversion code=&quot;${version.code}&quot; name=&quot;${version.name}&quot;/&gt;
&lt;/target&gt;</pre>
<h4>bumpversion</h4>
<p>Perhaps you simply want to increment the version code and point number for your application each time you make a build.  (You may also change the major.minor version at times, but that is a manual choice.)  You can do this simply with the bumpversion task.  By default, this task will just increment the existing version code.  If you set the optional attribute bumpname to true, the last element of the version name will also be incremented.  For example:</p>
<pre class="brush: xml;">&lt;target name=&quot;bump-version&quot;&gt;
    &lt;zaa:bumpversion bumpname=&quot;true&quot;/&gt;
&lt;/target&gt;</pre>
<p>If your existing manifest has a version code of 3 and a version name of 1.0.3, then after bumping you will have a code of 4 and a name of 1.0.4.  Simple!</p>
<h4>Try It Out</h4>
<p>The zutubi-android-ant <a href="http://github.com/jsankey/zutubi-android-ant">GitHub page</a> has a full README and simple examples showing in more detail how you can use these tasks.  Happy versioning!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alittlemadness.com/2010/10/05/android-automated-build-versioning/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Android JUnit XML Reports: Now With Test Durations</title>
		<link>http://www.alittlemadness.com/2010/09/28/android-junit-xml-reports-now-with-test-durations/</link>
		<comments>http://www.alittlemadness.com/2010/09/28/android-junit-xml-reports-now-with-test-durations/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 02:06:57 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.alittlemadness.com/?p=726</guid>
		<description><![CDATA[I&#8217;ve been planning to add test case durations to the XML reports generated by android-junit-report for some time.  This morning, however, the magic of open source caught up with me. I received a pull request from another GitHub user who had implemented durations already!
So, with thanks to Tim from todoroo, there is a new [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been planning to add test case durations to the XML reports generated by <a href="/2010/07/14/android-testing-xml-reports-for-continuous-integration/">android-junit-report</a> for some time.  This morning, however, the magic of open source caught up with me. I received a pull request from another GitHub user who had implemented durations already!</p>
<p>So, with thanks to Tim from <a href="http://todoroo.com">todoroo</a>, there is a new release of android-junit-report which outputs the duration (in seconds) for each test case.  This matches the output produced by the regular Ant JUnit report task, and thus should be compatible with all tools that read the format.  Durations are not added to test suites, for the same reason the test case counts are not: it would require buffering.  For my own use this is no big deal, because <a href="http://zutubi.com/products/pulse/">Pulse</a> will sum the times of all cases to give an idea of the total suite time when it is not provided directly.</p>
<p>You can grab this new version of (1.1, build 4) from the GitHub <a href="http://github.com/jsankey/android-junit-report/downloads">downloads page</a>.  Or, as always, you can access the latest release build directly from the <a href="http://pulse.zutubi.com/browse/projects/android-junit-report-release/builds/success/">build server</a> (click on &#8220;jar&#8221; in the &#8220;featured artifacts&#8221; table on the right of the page).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alittlemadness.com/2010/09/28/android-junit-xml-reports-now-with-test-durations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pulse Continuous Integration Server 2.2!</title>
		<link>http://www.alittlemadness.com/2010/08/11/pulse-continuous-integration-server-2-2/</link>
		<comments>http://www.alittlemadness.com/2010/08/11/pulse-continuous-integration-server-2-2/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 04:58:55 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Zutubi]]></category>

		<guid isPermaLink="false">http://www.alittlemadness.com/?p=722</guid>
		<description><![CDATA[Big news today: Pulse 2.2 has graduated to stable!  This release includes a stack of new features and improvements, including:

Build UI overhaul: all tabs improved and restyled.
New logs tab: making it easier to access stage logs.
Featured artifacts: choose which artifacts should appear prominently.
Build navigator: easily move forward and backward through history.
Working copy browser: view [...]]]></description>
			<content:encoded><![CDATA[<p>Big news today: <a href="http://zutubi.com/products/pulse/">Pulse 2.2</a> has graduated to stable!  This release includes a stack of new features and improvements, including:</p>
<ul>
<li>Build UI overhaul: all tabs improved and restyled.</li>
<li>New logs tab: making it easier to access stage logs.</li>
<li>Featured artifacts: choose which artifacts should appear prominently.</li>
<li>Build navigator: easily move forward and backward through history.</li>
<li>Working copy browser: view working copies for in progress builds.</li>
<li>Move refactoring: move projects and agents in the template hierarchy.</li>
<li>Template navigation: navigate directly up and down a hierarchy.</li>
<li>Subscription by label: subscribe to notifications by project groups.</li>
<li>Agent executing stages: see what all agents are building at a glance.</li>
<li>Subversion exports: for faster and smaller builds.</li>
<li>Performance improvements: key for larger installations.</li>
</ul>
<p>See the <a href="http://zutubi.com/products/pulse/new/">new in 2.2 page</a> for full details.</p>
<p>In conjunction with this release, we&#8217;ve also given our <a href="http://zutubi.com/">website</a> a complete overhaul.  The new site has a fresher look, and communicates the key features of Pulse more directly.  The updates also include some new features: </p>
<ul>
<li>RSS feeds for news items.</li>
<li>Links to our latest blog posts on the front page.</li>
<li>An improved buying process, allowing multiple licenses to be purchased in one transaction.</li>
<li>Self-service renewal payments &#8211; just enter your current license key and go!</li>
<li>A more user-friendly downloads page.</li>
</ul>
<p>We hope you enjoy the new release, and the new site.  And please, <a href="mailto:support@zutubi.com">let us know</a> what you think!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alittlemadness.com/2010/08/11/pulse-continuous-integration-server-2-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Simpler Ant Builds With the Ant Script Library</title>
		<link>http://www.alittlemadness.com/2010/07/29/simpler-ant-builds-with-the-ant-script-library/</link>
		<comments>http://www.alittlemadness.com/2010/07/29/simpler-ant-builds-with-the-ant-script-library/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 09:39:21 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Project Automation]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.alittlemadness.com/?p=694</guid>
		<description><![CDATA[Introduction
Ant may be unfashionable these days, but it still has its advantages.  Key among these are familiarity and simplicity: most Java developers have worked with Ant, and with an Ant build what you get is what you see.  A major disadvantage, though, is that Ant provides very little out-of-the-box.  When you start [...]]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p><a href="http://ant.apache.org/">Ant</a> may be unfashionable these days, but it still has its advantages.  Key among these are familiarity and simplicity: most Java developers have worked with Ant, and with an Ant build what you get is what you see.  A major disadvantage, though, is that Ant provides very little out-of-the-box.  When you start a new project, you&#8217;ve got a lot of grunt work to endure just to get your code compiled, packaged, and tested.  An all-too-common solution, in the grand tradition of <a href="http://www.gnu.org/software/make/">make</a>, is to copy a build file from an existing project as an easy starting point.</p>
<p>Over the years, though, Ant has gradually expanded support for creating reusable build file snippets.  On top of this a few projects have emerged which aim to simplify and standardise your Ant builds, including:</p>
<ul>
<li><a href="http://www.easyant.org/">EasyAnt</a></li>
<li><a href="http://code.google.com/p/ant-master-build-scripts/">Ant Master Build Scripts</a></li>
<li><a href="http://www.exubero.com/asl/">Ant Script Library</a></li>
</ul>
<p>Today I&#8217;ve taken my first proper look at the latter, and so far I like what I see.</p>
<h3>The Ant Script Library</h3>
<p>In the author Joe Schmetzer&#8217;s own words:</p>
<blockquote><p>The Ant Script Library (ASL) is a collection of re-usable Ant scripts that can be imported into your own projects. The ASL provides a number of pre-defined targets that simplify setting up build scripts for a new project, bringing re-use and consistency to your own Ant scripts.</p></blockquote>
<p>ASL consists of several Ant XML files, each of which provides a group of related functionality via predefined targets.  For example, the <b>asl-java-build.xml</b> file defines targets for compiling and packaging Java code.  The <b>asl-java-test.xml</b> file extends this with the ability to run JUnit tests, and so on.  Essentially, ASL packages up all the grunt work, allowing you to concentrate on the small tweaks and extra targets unique to your project.  The modular structure of ASL, combined with the fact that it is just Ant properties and targets, makes it easy to take what you like and leave the rest.</p>
<h3>An Example</h3>
<p>Allow me to illustrate with a simple project I have been playing with.  This project has a straightforward directory structure:</p>
<ul>
<li>&lt;project root&gt;
<ul style="font-size: 1em;">
<li>asl/ &#8211; the Ant Script Library</li>
<li>build.xml &#8211; Ant build file</li>
<li>lib/ &#8211; Jar file depedencies</li>
<li>src/ &#8211; Java source files</li>
<li>test/ &#8211; JUnit-based test source files</li>
</ul>
</li>
</ul>
<p>To add ASL to my project, I simply downloaded it from the project <a href="http://www.exubero.com/asl/download.html">download page</a> and unpacked it in the <b>asl/</b> subdirectory of my project<sup>1</sup>.  Then I can start with a very simple build file that supports building my code and running the tests:</p>
<pre class="brush: xml;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;project name=&quot;zutubi-android-ant&quot; default=&quot;dist&quot;&gt;
    &lt;property name=&quot;java-build.src-dir&quot; location=&quot;src&quot;/&gt;
    &lt;property name=&quot;java-test.src-dir&quot; location=&quot;test&quot;/&gt;
    &lt;property name=&quot;java-build.lib-dir&quot; location=&quot;libs&quot;/&gt;

    &lt;property name=&quot;asl.dir&quot; value=&quot;asl&quot;/&gt;

    &lt;import file=&quot;${asl.dir}/asl-java-build.xml&quot;/&gt;
    &lt;import file=&quot;${asl.dir}/asl-java-test.xml&quot;/&gt;
&lt;/project&gt;</pre>
<p>Notice that I am using non-standard source locations, but that is easily tweaked using properties which are <a href="http://www.exubero.com/asl/reference.html">fully documented</a>.  With this tiny build file, let&#8217;s see what targets ASL provides for me:</p>
<pre class="brush: plain;">$ ant -p
Buildfile: build.xml

Main targets:

 clean                 Deletes files generated by the build
 compile               Compiles the java source
 copy-resources        Copies resources in preparation to be packaged in jar
 dist                  Create a distributable for this java project
 generate              Generates source code
 jar                   Create a jar for this java project
 test-all              Runs all tests
 test-integration      Runs integration tests
 test-run-integration  Runs the integration tests
 test-run-unit         Runs the unit tests
 test-unit             Runs unit tests
Default target: dist</pre>
<p>It&#8217;s delightfully simple!</p>
<h3>Adding Reports</h3>
<p>It gets better: ASL also provides reporting with tools like <a href="http://cobertura.sourceforge.net/">Cobertura</a> for coverage, <a href="http://findbugs.sourceforge.net/">FindBugs</a> for static analysis and so on via its <b>asl-java-report.xml</b> module.  The full range of supported reports can be seen in the <b>report-all</b> target:</p>
<pre class="brush: xml;">&lt;target name=&quot;report-all&quot;
        depends=&quot;report-javadoc, report-tests, report-cobertura, report-jdepend, report-pmd, report-cpd, report-checkstyle, report-findbugs&quot;
        description=&quot;Runs all reports&quot;/&gt;</pre>
<p>Having support for several tools out-of-the-box is great.  For my project, however, I&#8217;d like to keep my dependencies down and I don&#8217;t feel that I need all of the reporting.  Although the choice of reports is not something that is parameterised by a property, it is still trivial to override by providing your own report-all target.  This shows the advantage of everything being plain Ant targets:</p>
<pre class="brush: xml;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;project name=&quot;zutubi-android-ant&quot; default=&quot;dist&quot;&gt;
    &lt;property name=&quot;java-build.src-dir&quot; location=&quot;src&quot;/&gt;
    &lt;property name=&quot;java-test.src-dir&quot; location=&quot;test&quot;/&gt;
    &lt;property name=&quot;java-build.lib-dir&quot; location=&quot;libs&quot;/&gt;

    &lt;property name=&quot;asl.dir&quot; value=&quot;asl&quot;/&gt;

    &lt;import file=&quot;${asl.dir}/asl-java-build.xml&quot;/&gt;
    &lt;import file=&quot;${asl.dir}/asl-java-test.xml&quot;/&gt;
    &lt;import file=&quot;${asl.dir}/asl-java-report.xml&quot;/&gt;

    &lt;target name=&quot;report-all&quot;
            depends=&quot;report-javadoc, report-tests, report-cobertura, report-pmd, report-checkstyle&quot;
            description=&quot;Runs all reports&quot;/&gt;
&lt;/project&gt;</pre>
<p>Here I&#8217;ve included the <b>java-report</b> module, but defined my own <b>report-all</b> target that depends on just the reports I want.  This keeps things simple, and allows me to trim out a bunch of ASL dependencies I don&#8217;t need.</p>
<h3>Conclusion</h3>
<p>I&#8217;ve known of ASL and such projects for a while, but this is the first time I&#8217;ve actually given one a go.  Getting started was pleasantly simple, as was applying the small tweaks I needed.  So next time you&#8217;re tempted to copy an Ant build file, give ASL a shot: you won&#8217;t regret it!</p>
<p><br/></p>
<p>&#8211;<br />
<sup>1</sup> In this case I downloaded the full tarball including dependencies, which seemed on the large side (21MB!) but in fact can be easily trimmed by removing the pieces you don&#8217;t need.  Alternatively, you can start with the basic ASL install (sans dependencies) and it can pull down libraries for you.  Sweet <img src='http://www.alittlemadness.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alittlemadness.com/2010/07/29/simpler-ant-builds-with-the-ant-script-library/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

