<?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>Ben&#039;s Blog &#187; bootstrap</title>
	<atom:link href="http://blog.mozilla.com/bhearsum/archives/category/bootstrap/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.mozilla.com/bhearsum</link>
	<description></description>
	<lastBuildDate>Tue, 07 Feb 2012 20:14:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Release Automation &#8211; Part 1: Bootstrap</title>
		<link>http://blog.mozilla.com/bhearsum/archives/204</link>
		<comments>http://blog.mozilla.com/bhearsum/archives/204#comments</comments>
		<pubDate>Tue, 07 Feb 2012 20:14:25 +0000</pubDate>
		<dc:creator>bhearsum</dc:creator>
				<category><![CDATA[bootstrap]]></category>
		<category><![CDATA[history]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[releases]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/bhearsum/?p=204</guid>
		<description><![CDATA[One of the first tasks I had as a full-time employee of Mozilla was getting the Bootstrap Release framework working with Firefox 3.0 Beta releases. Now, just over 4 years later, our Release Automation has changed dramatically in many ways: primary language, supported platforms, scope and extent, reliability, and versatility. I thought it made be [...]]]></description>
			<content:encoded><![CDATA[<p>One of the first tasks I had as a full-time employee of Mozilla was getting the Bootstrap Release framework working with Firefox 3.0 Beta releases. Now, just over 4 years later, our Release Automation has changed dramatically in many ways: primary language, supported platforms, scope and extent, reliability, and versatility. I thought it made be interesting to trace the path from there to here, and talk about what&#8217;s in store for the future, too. Throughout all of this work there&#8217;s been two overarching goals: 1) Lower the time it takes to go from &#8220;go to build&#8221; to &#8220;updates available for testing&#8221; &#8211; which we call &#8220;end2end time&#8221;, and 2) Remove the number of machines we have to log into, commands we have to run, and active time we have to spend on a release &#8211; known as &#8220;manual touchpoints&#8221;. I&#8217;ll be referencing these a lot throughout this series.</p>
<p>This post will talk about what I know of Bootstrap and my work porting it to Firefox 3.0.</p>
<p>In its earliest form Bootstrap was a simple scripted version of much of the previously manual release process. The processes for tagging VCS repositories, creating deliverables (source packages, en-US and localized builds, updates), and some verifications were encapsulated into its scripts. This was a big improvement over the 100% manual, cut+paste-from-a-wiki, process. Instead of logging into many machines and running many commands, the release engineer had to log in to many machines and run a few, very simple commands. The very first release that was Bootstrap-aided was Firefox 1.5.0.9, built on December 6th, 2006. This was before my time, but a former release engineer, <a href="http://rhelmer.org/">Rob Helmer</a>, told me that the end2end time back then could be multiple days, and countless touchpoints.</p>
<p>Over time, more parts of the release process were automated with Bootstrap, further reducing the burden on the release engineer. Even with these big improvements some classes of things were still not codified: which machines to run which commands on, when and in what order to run things, who to notify about what. Enter: Buildbot. Integrating Bootstrap into Buildbot was the next logical step in the process. It would handle scheduling and status, while Bootstrap would remain responsible for all of implementation. With this, the release engineer only had to log in to a few machines and run a few, very simple commands. Another big improvement! The first release to benefit from this was Firefox 2.0.0.8, built on October 10th, 2007. This work was largely done by Rob Helmer.</p>
<p>Around this time we were gearing up to start shipping the first Firefox 3.0 Beta release and had never tested Bootstrap against that development branch. I was tasked with making whatever changes were necessary to Bootstrap and our Buildbot to make it work. The Buildbot side was largely simple, because of it being at such a high abstraction layer, but back in these days we still had single purpose Buildbot masters, so it involved adding several hundred lines of config code.</p>
<p>The Bootstrap side was far more interesting. Until this point, there was a lot of built-in assumptions based on what the 1.8 branch looked like, including:</p>
<ul>
<li>Releases are done from CVS branches (explicitly _not_ trunk)</li>
<li>Windows build machines run Cygwin</li>
<li>Linux packages are in .gz format</li>
<li>The crash reporting system Talkback is always shipped</li>
</ul>
<p>By themselves, none of these things are too challenging to deal with, but as a very new hire, the combination took me about a month to find solutions to and fully test, with many rounds of feedback and guidance along the way. With all of that done and landed, we managed to use the new automation to build Firefox 3.0b2 on December 10, 2007. At this point, the end2end time was around 24h and there were about 20 manual touchpoints.</p>
<p>Over the next 8 months or so there were a few major improvements of note. Firstly, <a href="http://blog.mozilla.com/nthomas/">Nick Thomas</a> fixed <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=409394">bug 409394 (Support for long version names)</a> allowed us to start shipping releases with nicer looking filenames like &#8220;Firefox Setup 3.0 Beta 4&#8243;. Not a crucial thing, but much nicer from the user perspective. <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=422235">bug 422235 (enable fast patcher for release automation)</a> was a massive improvement in update generation, written by <a href="http://twitter.com/schrep">schrep</a>. With this work, we went from taking 6-8 hours to generate updates, down to ~1h &#8212; an incredible savings in time. Finally, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=428063">bug 428063 (Support major releases &#038; quit using rc in overloaded ways)</a> (also fixed by Nick) enabled us to build RCs with Bootstrap. While it may sound simple, there&#8217;s a lot of things in release automation that depend on filename, and catching them all can be difficult. As well as making it possible to build these, this bug also renamed the internal &#8220;rc&#8221; notion to &#8220;build&#8221;, to avoid situations where we&#8217;d have things like &#8220;3.0 RC1 rc1&#8243;, which was utterly confusing.</p>
<hr/>
<p>So, in the early days there were tons of improvement quickly: Bootstrap itself sped things up and lowered the possibility of error through reducing manual touchpoints. Buildbot + Bootstrap did so again, through the same methods. We also had pure speed-ups through things such as fast patcher. Having these things allowed us to maintain the 2.0.0.x and 3.0.x branches more more easily, and get chemspill releases out quickly and simultaneously. All of this work had to be done incrementally too, because we had to continue shipping releases while the work was happening. It&#8217;s hard to find good data for releases done with this version of the automation, but I guesstimate that the end2end time was around 12-14 hours and the number of manual touchpoints was still around 20 for a release without major issues.</p>
<p>Next up&#8230;.Release Automation on Mercurial, v1.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/bhearsum/archives/204/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bootstrap, Buildbot &amp; Release Automation</title>
		<link>http://blog.mozilla.com/bhearsum/archives/5</link>
		<comments>http://blog.mozilla.com/bhearsum/archives/5#comments</comments>
		<pubDate>Tue, 20 Nov 2007 14:43:59 +0000</pubDate>
		<dc:creator>bhearsum</dc:creator>
				<category><![CDATA[bootstrap]]></category>
		<category><![CDATA[buildbot]]></category>
		<category><![CDATA[planet]]></category>

		<guid isPermaLink="false">http://blog.mozilla.com/bhearsum/archives/5</guid>
		<description><![CDATA[I am officially a QA Engineer but I still help out in Build from time to time. Most recently, I have been working on getting trunk releases automated with our release framework and Buildbot. Rob, Paul, and John both spent considerable time getting automation going for Fx2 and Tb2 releases. With that up and running [...]]]></description>
			<content:encoded><![CDATA[<p>I am officially a QA Engineer but I still help out in Build from time to time. Most recently, I have been working on getting trunk releases automated with our <a href="http://mxr.mozilla.org/mozilla/source/tools/release" rel="bootstrap">release framework</a> and <a href="http://buildbot.net" rel="buildbot">Buildbot</a>. <a href="http://roberthelmer.com/blog/">Rob</a>, <a href="http://weblogs.mozillazine.org/preed/">Paul</a>, and <a href="http://oduinn.com/">John</a> both spent considerable time getting automation going for Fx2 and Tb2 releases. With that up and running it has saved a significant amount of human time on recent Firefox and Thunderbird point releases. I have been tasked with getting the same system up and running for trunk releases. Right now, that specifically means Fx3 betas. With tons of support from co-workers work on this is progressing nicely (thank you Nick, Rob, John, Paul, and Coop!).</p>
<p>For those interested, my work is being tracked in <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=379278">bug 379278</a>.</p>
<p>For now, alphas and betas are being done by hand but by the time Firefox 3 Beta 2 is up for release I hope (and intend) to be able to have the automation do some or all of the process.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mozilla.com/bhearsum/archives/5/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

